Changeset 7062


Ignore:
Timestamp:
2004-03-16T16:45:35+13:00 (20 years ago)
Author:
mdewsnip
Message:

This class wasn't even slightly Unicode aware. Not a smidgeon.

And thus, with one day before the UNESCO CD deadline, this became rather a problem. Quite a serious problem, actually.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gli/src/org/greenstone/gatherer/util/AppendLineOnlyFileDocument.java

    r7054 r7062  
    137137    public void appendLine(String str) {
    138138    // Ensure the string ends in a newline
    139     if(!str.endsWith("\n")) {
    140         str = str + "\n";
    141     }
    142139    try {
    143         int str_length = str.length();
     140        if (!str.endsWith("\n")) {
     141        str = str + "\n";
     142        }
     143        int str_length = str.getBytes("UTF-8").length;
    144144        long start_offset = length;
    145145        long end_offset = start_offset + (long) str_length;
    146146        length = length + str_length;
    147         //write(start_offset, end_offset, str, str_length);
    148147        // Create a new element to represent this line
    149148        AppendLineOnlyFileDocumentElement new_line_element = new AppendLineOnlyFileDocumentElement(start_offset, end_offset, str);
     
    246245    public String getText(int offset, int l)
    247246    throws BadLocationException {
    248     String request = "getText(" + offset + ", " + l + ")";
    249     ///ystem.err.println(request);
    250     String text = null;
    251     if(text == null || text.length() < l) {
    252         try {
    253         int file_length = (int) file.length();
    254         ///ystem.err.println("file_length = " + file_length + ", length = " + length);
    255         if(l == 0) {
    256             text = StaticStrings.EMPTY_STR;
    257         }
    258         else if(0 <= offset && offset < length && (offset + l) <= length) {
    259             if(offset < file_length) {
    260             text = read((long)offset, l);
    261             if(text.length() != l) {
    262                 ///ystem.err.println("Asked for " + l + " characters of text. But only read " + text.length());
    263                 throw new BadLocationException("AppendLineOnlyDocument.getText(" + offset + ", " + l + ")", offset);
    264             }
    265             }
    266             else {
    267             int index = root_element.getElementIndex(offset);
    268             if(index < root_element.getElementCount()) {
    269                 AppendLineOnlyFileDocumentElement element = (AppendLineOnlyFileDocumentElement) root_element.getElement(index);
    270                 text = element.getContent();
    271             }
    272             else {
    273                 ///ystem.err.println("Index is " + index + " but there are only " + root_element.getElementCount() + " children.");
    274                 throw new BadLocationException("AppendLineOnlyDocument.getText(" + offset + ", " + l + ")", offset);
    275             }
    276             }
     247
     248    if (l == 0) {
     249        return "";
     250    }
     251
     252    try {
     253        return read((long) offset, l);
     254    }
     255    catch (Exception ex) {
     256    }
     257
     258    return "";
     259
     260//      // System.err.println("AppendLineOnlyFileDocument::getText() request...");
     261//      String request = "getText(" + offset + ", " + l + ")";
     262//      ///ystem.err.println(request);
     263//      String text = null;
     264//      if(text == null || text.length() < l) {
     265//          try {
     266//          int file_length = (int) file.length();
     267//          ///ystem.err.println("file_length = " + file_length + ", length = " + length);
     268//          if(l == 0) {
     269//              text = StaticStrings.EMPTY_STR;
     270//          }
     271//          else if(0 <= offset && offset < length && (offset + l) <= length) {
     272//              if(offset < file_length) {
     273//              text = read((long)offset, l);
     274//              if(text.length() != l) {
     275//                  ///ystem.err.println("Asked for " + l + " characters of text. But only read " + text.length());
     276//                  throw new BadLocationException("AppendLineOnlyDocument.getText(" + offset + ", " + l + ")", offset);
     277//              }
     278//              }
     279//              else {
     280//              int index = root_element.getElementIndex(offset);
     281//              if(index < root_element.getElementCount()) {
     282//                  AppendLineOnlyFileDocumentElement element = (AppendLineOnlyFileDocumentElement) root_element.getElement(index);
     283//                  text = element.getContent();
     284//              }
     285//              else {
     286//                  ///ystem.err.println("Index is " + index + " but there are only " + root_element.getElementCount() + " children.");
     287//                  throw new BadLocationException("AppendLineOnlyDocument.getText(" + offset + ", " + l + ")", offset);
     288//              }
     289//              }
    277290           
    278         }
    279         }
    280         catch (IOException error) {
    281         Gatherer.printStackTrace(error);
    282         }
    283         if(text == null) {
    284         ///ystem.err.println("Text is null.");
    285         throw new BadLocationException("AppendLineOnlyDocument.getText(" + offset + ", " + l + ")", offset);
    286         }
    287     }
    288     request = null;
    289     return text;
     291//          }
     292//          }
     293//          catch (IOException error) {
     294//          Gatherer.printStackTrace(error);
     295//          }
     296//          if(text == null) {
     297//          ///ystem.err.println("Text is null.");
     298//          throw new BadLocationException("AppendLineOnlyDocument.getText(" + offset + ", " + l + ")", offset);
     299//          }
     300//      }
     301//      request = null;
     302//      return text;
    290303    }
    291304
     
    375388    file.seek(start_offset);
    376389    int result = file.read(buffer, 0, l);
     390    return new String(buffer, "UTF-8");
    377391    //print("read() complete");
    378     return new String(buffer);
    379392    }
    380393
     
    390403    file.setLength(end_offset);
    391404    file.seek(start_offset);
    392     file.write(str.getBytes(), 0, l);
     405    file.write(str.getBytes("UTF-8"), 0, l);
    393406    //print("write() complete");
    394407    }
     
    779792            if(content != null) {
    780793            try {
    781                 write(element.getStartOffset(), element.getEndOffset(), content, content.length());
     794                write(element.getStartOffset(), element.getEndOffset(), content, content.getBytes("UTF-8").length);
    782795            }
    783796            catch(Exception error) {
Note: See TracChangeset for help on using the changeset viewer.