Changeset 15150 for gsdl/trunk/perllib/plugins/TEXTPlug.pm
- Timestamp:
- 2008-03-29T17:41:28+13:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
gsdl/trunk/perllib/plugins/TEXTPlug.pm
r15119 r15150 110 110 # Add FileFormat metadata 111 111 $doc_obj->add_metadata($cursection, "FileFormat", "TEXT"); 112 113 112 113 # insert preformat tags and add text to document object 114 $self->text_to_html($textref); # modifies the text 115 $doc_obj->add_utf8_text($cursection, $$textref); #$doc_obj->add_utf8_text($cursection, "<pre>\n$$textref\n</pre>"); 116 117 return 1; 118 } 119 120 sub text_to_html { 121 my $self = shift (@_); 122 my ($textref) = @_; 123 114 124 # we need to escape the escape character, or else mg will convert into 115 125 # eg literal newlines, instead of leaving the text as '\n' … … 118 128 $$textref =~ s/</</g; 119 129 $$textref =~ s/>/>/g; 120 130 121 131 # insert preformat tags and add text to document object 122 $doc_obj->add_utf8_text($cursection, "<pre>\n$$textref\n</pre>"); 123 124 return 1; 125 } 132 $$textref = "<pre>\n$$textref\n</pre>"; 133 } 134 126 135 127 136 # replace_srcdoc_with_html.pl requires all subroutines that support src_replaceable … … 129 138 # Perl modules that are subclasses of ConvertToPlug.pm, but as we want TEXTPlug to also 130 139 # be srcreplaceable and because TEXTPlug does not inherit from ConvertToPlug.pm, we have 131 # this ugly solution: same subroutine name. 132 # Despite the subroutine name, this method does not in fact create the output html file in 133 # some tmp folder. Instead, it creates the html file in the same folder as the input_filename 134 # and writes the contents as html paragraphs nested inside <html><head></head><body></body></html> 135 # It also sets the encoding of the html document created to UTF-8 in the head's meta tag. 136 # Note: doesn't seem to be able to cope with <br /> and <meta ... /> -> slashes are a problem. 137 # As a consequence, we resorted to making it not proper xhtml but just regular html.\ 138 # The output file's name will be utf8 AND might not be the same as the input file's name 139 # (for instance, the output filename may have a number appended to it if there is already an html 140 # file in the input folder with the same name). 140 # a similar subroutine with the same name here. 141 141 sub tmp_area_convert_file { 142 142 my $self = shift (@_); 143 143 my ($output_ext, $input_filename) = @_; 144 144 145 #my $outhandle = $self->{'outhandle'};145 my $outhandle = $self->{'outhandle'}; 146 146 #my $failhandle = $self->{'failhandle'}; 147 #my $convert_to_ext = $self->{'convert_to_ext'};148 147 149 148 # derive output filename from input filename … … 151 150 = &File::Basename::fileparse($input_filename, "\\.[^\\.]+\$"); 152 151 152 # softlink to collection tmp dir 153 my $tmp_dirname = $dirname; 154 if(defined $ENV{'GSDLCOLLECTDIR'}) { 155 $tmp_dirname = $ENV{'GSDLCOLLECTDIR'}; 156 } elsif(defined $ENV{'GSDLHOME'}) { 157 $tmp_dirname = $ENV{'GSDLHOME'}; 158 } 159 $tmp_dirname = &util::filename_cat($tmp_dirname, "tmp"); 160 &util::mk_dir($tmp_dirname) if (!-e $tmp_dirname); 161 162 153 163 # convert to utf-8 otherwise we have problems with the doc.xml file 154 164 # later on 155 &unicode::ensure_utf8(\$tailname); # TO DO: does this change the filename or not? 165 &unicode::ensure_utf8(\$tailname); # TODO: does this change the filename or not? 166 # need to test this out on a windows computer using a Greek filename 167 168 my $tmp_filename = &util::filename_cat($tmp_dirname, "$tailname$suffix"); 169 &util::soft_link($input_filename, $tmp_filename); 170 # softlink symbolic link to or copy of original, so we don't accidentally damage it 156 171 157 172 #my $output_filename = $tailname$output_ext;#output_ext has to be html! 158 my $output_filename = &util::filename_cat($ dirname, $tailname.".html");173 my $output_filename = &util::filename_cat($tmp_dirname, $tailname.".html"); 159 174 160 175 # read contents of text file line by line into an array 161 176 # create an HTML file from the text file 162 177 # Recreate the original file for writing the updated contents 163 unless(open(TEXT, "<$ input_filename")) {# open it as a new file for writing178 unless(open(TEXT, "<$tmp_filename")) { # open it as a new file for writing 164 179 print STDERR "TEXTPlug.pm: Unable to open and read from $input_filename for converting to html...ERROR\n"; 165 return 0; 166 } 180 return ""; # no file name 181 } 182 183 my $text; 184 { 185 local $/ = undef; # Read entire file at once. This is from http://perl.plover.com/local.html 186 $text = <TEXT>; # Now file is read in as one single 'line' 187 } 188 close(TEXT); # close the file 189 190 # convert the text 191 $self->text_to_html(\$text); 167 192 168 my @lines = (); 169 my $line; 170 my $newpara = 1; # true whenever we're going to start a new para 171 172 while ($line=<TEXT>) { 173 # replace < and > with their character encodings 174 $line =~ s/</</g; 175 $line =~ s/>/.*>/g; 176 177 if ($line =~ /^\s*$/) { # line is empty 178 if(!$newpara) { 179 push(@lines, "</p>".$line); # end of a paragraph, leave empty line in there 180 $newpara = 1; 181 } # If it is a new paragraph, we do nothing 182 } else { # a line with text 183 if($newpara) { 184 push(@lines, "<p>".$line); # start a new paragraph 185 $newpara = 0; 186 } else { # text-line is not a new paragraph, but just a new line 187 push(@lines, "<br>\n".$line); # put a break. It doesn't seem to accept <br /> 188 } 189 } 190 } 191 close TEXT; 192 193 # we've come to the last line of input file, make sure that the text ends on </p> 194 # get the last line and check it has a </p> at the end: 195 $line = pop(@lines); 196 my $endpara = "</p>"; 197 unless($line =~ m/$endpara$/ ) { # if no </p> at end of last para, then append it 198 $line = $line.$endpara; 199 } 200 push(@lines, $line); # either way, put the last line back 201 202 # write everything into the html file along with html start and end parts: 203 my $count = "1"; 204 # create a sensible html file, don't overwrite pre-existing files of the same name 205 # just concatenate a number instead 206 while(-e "$output_filename") { 207 $output_filename = &util::filename_cat($dirname, $tailname.$count.".html"); 208 $count++; 209 } 193 #print STDERR "****output_filename: $output_filename\n"; 194 #print STDERR "****text: $text\n"; 195 210 196 # try creating this new file writing and try opening it for writing, else exit with error value 211 197 unless(open(HTML, ">$output_filename")) { # open the new html file for writing 212 198 print STDERR "TEXTPlug.pm: Unable to create $output_filename for writing $tailname$suffix txt converted to html...ERROR\n"; 213 return 0; 214 } 215 216 # append html start and end sections to the txt contents of the input file 217 print HTML "<html>\n<head>\n<title>$tailname</title>\n"; 218 # we'll set the content to UTF-8 encoding 219 print HTML "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n"; # /> not accepted 220 print HTML "</head>\n<body>\n"; 221 # go through each line and write it to the file: 222 foreach $line (@lines) { 223 print HTML $line; 224 } 225 print HTML "\n</body></html>\n"; 199 return ""; # no filename 200 } 201 # write the html contents in text out to the file 202 print HTML $text; 226 203 close HTML; 227 228 return $output_filename; 229 } 204 205 # remove the copy of the original file/remove the symbolic link to original file 206 &util::rm($tmp_filename); 207 208 return $output_filename; # return the output file path 209 } 210 230 211 231 212 1;
Note:
See TracChangeset
for help on using the changeset viewer.