1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-05 10:49:24 +02:00

git-svn-id: https://only.mawhrin.net/repos/FBReaderJ/trunk@63 6a642e6f-84f6-412e-ac94-c4a38d5a04b0

This commit is contained in:
griffon 2007-10-29 11:50:50 +00:00
parent 20a8b14f86
commit 8233c43a0f
14 changed files with 337 additions and 84 deletions

View file

@ -1,14 +0,0 @@
package org.zlibrary.view;
import org.zlibrary.model.entry.ZLTextParagraphEntry;
import org.zlibrary.model.entry.ZLTextControlEntry;
public interface ZLTextControlElement extends ZLTextElement {
Kind getKind();
ZLTextControlEntry getEntry();
byte getTextKind();
boolean isStart();
}

View file

@ -1,14 +0,0 @@
package org.zlibrary.view;
import org.zlibrary.model.ZLTextParagraph;
public interface ZLTextElement {
enum Kind {
WORD_ELEMENT,
CONTROL_ELEMENT,
};
abstract Kind getKind();
}

View file

@ -1,20 +0,0 @@
package org.zlibrary.view;
import org.zlibrary.model.ZLTextModel;
import org.zlibrary.model.ZLTextParagraph;
public interface ZLTextParagraphCursor {
boolean isFirst();
boolean isLast();
boolean isEndOfSection();
int getParagraphLength();
int index();
ZLTextParagraphCursor previous();
ZLTextParagraphCursor next();
ZLTextElement getElement(int index);
ZLTextParagraph getParagraph();
}

View file

@ -0,0 +1,5 @@
package org.zlibrary.view;
public interface ZLTextView {
}

View file

@ -1,7 +0,0 @@
package org.zlibrary.view;
public interface ZLTextWord extends ZLTextElement {
Kind getKind();
short getWidth();
}

View file

@ -1,29 +0,0 @@
package org.zlibrary.view;
public interface ZLTextWordCursor {
void setCursor(ZLTextWordCursor cursor);
void setCursor(ZLTextParagraphCursor paragraphCursor);
boolean isNull();
boolean equalWordNumber(ZLTextWordCursor cursor);
boolean sameElementAs(ZLTextWordCursor cursor);
boolean isStartOfParagraph();
boolean isEndOfParagraph();
int getWordNumber();
int getCharNumber();
ZLTextElement getElement();
ZLTextParagraphCursor getParagraphCursor();
void nextWord();
void previousWord();
boolean nextParagraph();
boolean previousParagraph();
void moveToParagraphStart();
void moveToParagraphEnd();
void moveToParagraph(int paragraphNumber);
void moveTo(int wordNumber, int charNumber);
void setCharNumber(int charNumber);
void rebuild();
}

View file

@ -0,0 +1,28 @@
package org.zlibrary.view.impl;
import org.zlibrary.model.entry.ZLTextParagraphEntry;
import org.zlibrary.model.entry.ZLTextControlEntry;
class ZLTextControlElement extends ZLTextElement {
private ZLTextParagraphEntry myEntry;
private ZLTextControlElement(ZLTextParagraphEntry entry) {
myEntry = entry;
}
public Kind getKind() {
return Kind.CONTROL_ELEMENT;
}
public ZLTextControlEntry getEntry() {
return (ZLTextControlEntry)myEntry;
}
public byte getTextKind() {
return getEntry().getKind();
}
public boolean isStart() {
return getEntry().isStart();
}
}

View file

@ -0,0 +1,13 @@
package org.zlibrary.view.impl;
class ZLTextElement {
enum Kind {
WORD_ELEMENT,
CONTROL_ELEMENT,
};
public Kind getKind() {
return Kind.WORD_ELEMENT;
}
}

View file

@ -0,0 +1,11 @@
package org.zlibrary.view.impl;
class ZLTextLineInfo {
ZLTextWordCursor myStart;
ZLTextWordCursor myRealStart;
ZLTextWordCursor myEnd;
boolean myIsVisible;
int myLeftIndent;
int myWidth;
int myHeight;
}

View file

@ -0,0 +1,65 @@
package org.zlibrary.view.impl;
import org.zlibrary.model.ZLTextModel;
import org.zlibrary.model.ZLTextParagraph;
import java.util.*;
abstract class ZLTextParagraphCursor {
protected ZLTextModel myModel;
protected int myIndex;
protected List <ZLTextElement> myElements;
protected ZLTextParagraphCursor(ZLTextModel model, int index) {
myModel = model;
myIndex = Math.min(index, myModel.getParagraphsNumber() - 1);
fill();
}
public static ZLTextParagraphCursor getCursor(ZLTextModel model, int index) {
ZLTextParagraphCursor result;
result = new ZLTextPlainParagraphCursor(model, index);
return result;
}
protected void fill() {
ZLTextParagraph paragraph = myModel.getParagraph(myIndex);
}
protected void clear() {
myElements.clear();
}
/*Something strange here*/
public boolean isNull() {
return myModel == null;
}
public boolean isFirst() {
return myIndex == 0;
}
public abstract boolean isLast();
public int getParagraphLength() {
return myElements.size();
}
public int getIndex() {
return myIndex;
}
abstract public ZLTextParagraphCursor previous();
abstract public ZLTextParagraphCursor next();
public ZLTextElement getElement(int index) {
return myElements.get(index);
}
public ZLTextParagraph getParagraph() {
return myModel.getParagraph(myIndex);
}
}

View file

@ -0,0 +1,21 @@
package org.zlibrary.view.impl;
import org.zlibrary.model.ZLTextModel;
class ZLTextPlainParagraphCursor extends ZLTextParagraphCursor {
/*package*/ ZLTextPlainParagraphCursor(ZLTextModel model, int index) {
super(model, index);
}
public boolean isLast() {
return (myIndex + 1 == myModel.getParagraphsNumber());
}
public ZLTextParagraphCursor previous() {
return isFirst() ? null : getCursor(myModel, myIndex - 1);
}
public ZLTextParagraphCursor next() {
return isLast() ? null : getCursor(myModel, myIndex + 1);
}
}

View file

@ -0,0 +1,7 @@
package org.zlibrary.view.impl;
import org.zlibrary.view.ZLTextView;
class ZLTextViewImpl /*implements ZLTextView*/ {
}

View file

@ -0,0 +1,19 @@
package org.zlibrary.view.impl;
class ZLTextWord extends ZLTextElement {
public String myData;
public short mySize;
public short myLength;
public int myParagraphOffset;
private ZLTextWord(String data, short size, int paragraphOffset) {
myData = data;
mySize = size;
myLength = (short) data.length();
myParagraphOffset = paragraphOffset;
}
public Kind getKind() {
return Kind.WORD_ELEMENT;
}
}

View file

@ -0,0 +1,168 @@
package org.zlibrary.view.impl;
import java.util.*;
class ZLTextWordCursor {
private ZLTextParagraphCursor myParagraphCursor;
private int myWordNumber;
private int myCharNumber;
/*Why do we create cursor without paragraph number and then are having all the troubles with cheking whether it is null or not?*/
public ZLTextWordCursor() {
myWordNumber = 0;
myCharNumber = 0;
}
public ZLTextWordCursor(ZLTextWordCursor cursor) {
myParagraphCursor = cursor.myParagraphCursor;
myWordNumber = cursor.myWordNumber;
myCharNumber = cursor.myCharNumber;
}
public void setCursor(ZLTextWordCursor cursor) {
myParagraphCursor = cursor.myParagraphCursor;
myWordNumber = cursor.myWordNumber;
myCharNumber = cursor.myCharNumber;
}
public void setCursor(ZLTextParagraphCursor paragraphCursor) {
myWordNumber = 0;
myCharNumber = 0;
myParagraphCursor = paragraphCursor;
moveToParagraphStart();
}
public boolean isNull() {
return myParagraphCursor.isNull();
}
public boolean equalWordNumber(ZLTextWordCursor cursor) {
return myWordNumber == cursor.myWordNumber;
}
public boolean sameElementAs(ZLTextWordCursor cursor) {
return (myWordNumber == cursor.myWordNumber && myParagraphCursor.getIndex() == cursor.myParagraphCursor.getIndex());
}
public boolean isStartOfParagraph() {
return (myWordNumber == 0 && myCharNumber == 0);
}
/*Why don't we check here whether myCharNumber is in the end of the word or not?*/
public boolean isEndOfParagraph() {
return myWordNumber == myParagraphCursor.getParagraphLength();
}
public int getWordNumber() {
return myWordNumber;
}
public int getCharNumber() {
return myCharNumber;
}
public ZLTextElement getElement() {
return myParagraphCursor.getElement(myWordNumber);
}
public ZLTextParagraphCursor getParagraphCursor() {
return myParagraphCursor;
}
public void nextWord() {
myWordNumber++;
myCharNumber = 0;
}
public void previousWord() {
myWordNumber--;
myCharNumber = 0;
}
public boolean nextParagraph() {
if (!isNull()) {
if (!myParagraphCursor.isLast()) {
myParagraphCursor = myParagraphCursor.next();
moveToParagraphStart();
return true;
}
}
return false;
}
public boolean previousParagraph() {
if (!isNull()) {
if (!myParagraphCursor.isFirst()) {
myParagraphCursor = myParagraphCursor.previous();
moveToParagraphStart();
}
}
return false;
}
public void moveToParagraphStart() {
if (!isNull()) {
myWordNumber = 0;
myCharNumber = 0;
}
}
/*Why are we moving outside of the paragraph?*/
public void moveToParagraphEnd() {
if (!isNull()) {
myWordNumber = myParagraphCursor.getParagraphLength();
myCharNumber = 0;
}
}
/*Why do we create new object here instead of just changing myParagraphNumber?*/
public void moveToParagraph(int paragraphNumber) {
if (!isNull() && (paragraphNumber != myParagraphCursor.getIndex())) {
myParagraphCursor = ZLTextParagraphCursor.getCursor(myParagraphCursor.myModel, paragraphNumber);
moveToParagraphStart();
}
}
public void moveTo(int wordNumber, int charNumber) {
if (!isNull()) {
if (wordNumber == 0 && charNumber == 0) {
myWordNumber = 0;
myCharNumber = 0;
} else {
wordNumber = Math.max(0, wordNumber);
int size = myParagraphCursor.getParagraphLength();
if (wordNumber > size) {
myWordNumber = size;
myCharNumber = 0;
} else {
myWordNumber = wordNumber;
setCharNumber(charNumber);
}
}
}
}
public void setCharNumber(int charNumber) {
charNumber = Math.max(0, charNumber);
myCharNumber = 0;
if (charNumber > 0) {
ZLTextElement element = myParagraphCursor.getElement(myWordNumber);
if (element.getKind() == ZLTextElement.Kind.WORD_ELEMENT) {
if (charNumber <= ((ZLTextWord)element).myLength) {
myCharNumber = charNumber;
}
}
}
}
public void rebuild() {
if (!isNull()) {
myParagraphCursor.clear();
myParagraphCursor.fill();
}
}
}