Index: gsdl/trunk/perllib/plugins/TEXTPlug.pm
===================================================================
--- gsdl/trunk/perllib/plugins/TEXTPlug.pm	(revision 14119)
+++ gsdl/trunk/perllib/plugins/TEXTPlug.pm	(revision 15119)
@@ -56,4 +56,5 @@
 		'abstract' => "no",
 		'inherits' => "yes",
+		'srcreplaceable' => "yes", # Source docs in regular txt format can be replaced with GS-generated html
 		'args'     => $arguments };
 
@@ -124,14 +125,107 @@
 }
 
+# replace_srcdoc_with_html.pl requires all subroutines that support src_replaceable
+# to contain a method called tmp_area_convert_file - this is indeed the case with all
+# Perl modules that are subclasses of ConvertToPlug.pm, but as we want TEXTPlug to also
+# be srcreplaceable and because TEXTPlug does not inherit from ConvertToPlug.pm, we have
+# this ugly solution: same subroutine name.
+# Despite the subroutine name, this method does not in fact create the output html file in
+# some tmp folder. Instead, it creates the html file in the same folder as the input_filename
+# and writes the contents as html paragraphs nested inside <html><head></head><body></body></html>
+# It also sets the encoding of the html document created to UTF-8 in the head's meta tag.
+# Note: doesn't seem to be able to cope with <br /> and <meta ... /> -> slashes are a problem.
+# As a consequence, we resorted to making it not proper xhtml but just regular html.\
+# The output file's name will be utf8 AND might not be the same as the input file's name
+# (for instance, the output filename may have a number appended to it if there is already an html
+# file in the input folder with the same name).  
+sub tmp_area_convert_file {
+    my $self = shift (@_);
+    my ($output_ext, $input_filename) = @_;
+    
+    #my $outhandle = $self->{'outhandle'};
+    #my $failhandle = $self->{'failhandle'};
+    #my $convert_to_ext = $self->{'convert_to_ext'};
+    
+    # derive output filename from input filename
+    my ($tailname, $dirname, $suffix)
+	= &File::Basename::fileparse($input_filename, "\\.[^\\.]+\$");
+
+    # convert to utf-8 otherwise we have problems with the doc.xml file
+    # later on
+    &unicode::ensure_utf8(\$tailname); # TO DO: does this change the filename or not?
+
+    #my $output_filename = $tailname$output_ext;#output_ext has to be html!
+    my $output_filename = &util::filename_cat($dirname, $tailname.".html");
+    
+    # read contents of text file line by line into an array
+    # create an HTML file from the text file
+    # Recreate the original file for writing the updated contents
+    unless(open(TEXT, "<$input_filename")) {  # open it as a new file for writing
+	print STDERR "TEXTPlug.pm: Unable to open and read from $input_filename for converting to html...ERROR\n";
+	return 0;
+    }
+       
+    my @lines = ();
+    my $line;
+    my $newpara = 1; # true whenever we're going to start a new para
+    
+    while ($line=<TEXT>) { 
+	# replace < and > with their character encodings
+	$line =~ s/</&lt;/g;
+	$line =~ s/>/.*&gt;/g;
+	
+	if ($line =~ /^\s*$/) { # line is empty
+	    if(!$newpara) {
+		push(@lines, "</p>".$line); # end of a paragraph, leave empty line in there
+		$newpara = 1;
+	    } # If it is a new paragraph, we do nothing
+	} else { # a line with text
+	    if($newpara) {
+		push(@lines, "<p>".$line); # start a new paragraph
+		$newpara = 0;
+	    } else { # text-line is not a new paragraph, but just a new line
+		push(@lines, "<br>\n".$line); # put a break. It doesn't seem to accept <br />
+	    }
+	}
+    }
+    close TEXT; 
+
+    # we've come to the last line of input file, make sure that the text ends on </p>
+    # get the last line and check it has a </p> at the end:
+    $line = pop(@lines);
+    my $endpara = "</p>";
+    unless($line =~ m/$endpara$/ ) { # if no </p> at end of last para, then append it
+	$line = $line.$endpara;
+    } 
+    push(@lines, $line); # either way, put the last line back
+
+    # write everything into the html file along with html start and end parts:
+    my $count = "1";
+    # create a sensible html file, don't overwrite pre-existing files of the same name
+    # just concatenate a number instead
+    while(-e "$output_filename") {
+	$output_filename = &util::filename_cat($dirname, $tailname.$count.".html");
+	$count++;
+    }
+    # try creating this new file writing and try opening it for writing, else exit with error value
+    unless(open(HTML, ">$output_filename")) {  # open the new html file for writing
+	print STDERR "TEXTPlug.pm: Unable to create $output_filename for writing $tailname$suffix txt converted to html...ERROR\n";
+	return 0;
+    }
+
+    # append html start and end sections to the txt contents of the input file
+    print HTML "<html>\n<head>\n<title>$tailname</title>\n";
+    # we'll set the content to UTF-8 encoding
+    print HTML "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n"; # /> not accepted
+    print HTML "</head>\n<body>\n";
+    # go through each line and write it to the file:
+    foreach $line (@lines) {
+	print HTML $line;
+    }
+    print HTML "\n</body></html>\n"; 
+    close HTML;
+ 
+    return $output_filename;
+}
+
 1;
-
-
-
-
-
-
-
-
-
-
-
