You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ad...@apache.org on 2008/06/07 17:09:43 UTC
svn commit: r664350 -
/xmlgraphics/fop/trunk/src/java/org/apache/fop/text/linebreak/LineBreakStatus.java
Author: adelmelle
Date: Sat Jun 7 08:09:42 2008
New Revision: 664350
URL: http://svn.apache.org/viewvc?rev=664350&view=rev
Log:
Improve code-readability; add some clarifying comments
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/text/linebreak/LineBreakStatus.java
Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/text/linebreak/LineBreakStatus.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/text/linebreak/LineBreakStatus.java?rev=664350&r1=664349&r2=664350&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/text/linebreak/LineBreakStatus.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/text/linebreak/LineBreakStatus.java Sat Jun 7 08:09:42 2008
@@ -73,76 +73,99 @@
* @return the break action to be taken
*/
public byte nextChar(char c) {
+
byte currentClass = LineBreakUtils.getLineBreakProperty(c);
+
if (currentClass == LineBreakUtils.LINE_BREAK_PROPERTY_AI
|| leftClass == LineBreakUtils.LINE_BREAK_PROPERTY_XX) {
+ //current "Ambiguous" or previous "Unknown":
+ // assume current "Alphabetic"
currentClass = LineBreakUtils.LINE_BREAK_PROPERTY_AL;
- } else if (currentClass == LineBreakUtils.LINE_BREAK_PROPERTY_NL) {
- currentClass = LineBreakUtils.LINE_BREAK_PROPERTY_BK;
}
- if (leftClass == -1) {
- if (currentClass == LineBreakUtils.LINE_BREAK_PROPERTY_LF) {
- leftClass = LineBreakUtils.LINE_BREAK_PROPERTY_BK;
- } else {
+
+ /** Check 1: initial character after a reset/mandatory break? */
+ switch (leftClass) {
+ case -1:
+ //first character after a reset()
leftClass = currentClass;
if (leftClass == LineBreakUtils.LINE_BREAK_PROPERTY_CM) {
leftClass = LineBreakUtils.LINE_BREAK_PROPERTY_ID;
}
- }
- // LB 2a
- return PROHIBITED_BREAK;
- } else if (!(leftClass != LineBreakUtils.LINE_BREAK_PROPERTY_BK
- && (leftClass != LineBreakUtils.LINE_BREAK_PROPERTY_CR
- || currentClass == LineBreakUtils.LINE_BREAK_PROPERTY_LF)
- )) {
- reset();
- if (currentClass == LineBreakUtils.LINE_BREAK_PROPERTY_LF) {
- leftClass = LineBreakUtils.LINE_BREAK_PROPERTY_BK;
- }
- return EXPLICIT_BREAK;
- } else if (currentClass == LineBreakUtils.LINE_BREAK_PROPERTY_BK
- || currentClass == LineBreakUtils.LINE_BREAK_PROPERTY_LF) {
- leftClass = LineBreakUtils.LINE_BREAK_PROPERTY_BK;
- return PROHIBITED_BREAK;
- } else if (currentClass == LineBreakUtils.LINE_BREAK_PROPERTY_CR) {
- leftClass = LineBreakUtils.LINE_BREAK_PROPERTY_CR;
- return PROHIBITED_BREAK;
- } else if (currentClass == LineBreakUtils.LINE_BREAK_PROPERTY_SP) {
- hadSpace = true;
- return PROHIBITED_BREAK;
- } else {
- boolean savedHadSpace = hadSpace;
- hadSpace = false;
- switch (LineBreakUtils.getLineBreakPairProperty(leftClass, currentClass)) {
- case LineBreakUtils.PROHIBITED_BREAK :
- leftClass = currentClass;
+ // LB 2a
+ return PROHIBITED_BREAK;
+
+ case LineBreakUtils.LINE_BREAK_PROPERTY_BK:
+ case LineBreakUtils.LINE_BREAK_PROPERTY_LF:
+ case LineBreakUtils.LINE_BREAK_PROPERTY_NL:
+ //first character after mandatory break
+ reset();
+ leftClass = currentClass;
+ return EXPLICIT_BREAK;
+
+ case LineBreakUtils.LINE_BREAK_PROPERTY_CR:
+ //first character after a carriage return:
+ // explicit break if it is not a linefeed
+ if (currentClass != LineBreakUtils.LINE_BREAK_PROPERTY_LF) {
+ reset();
+ return EXPLICIT_BREAK;
+ }
+
+ default:
+ //nop
+ }
+
+ /** Check 2: current is a mandatory break or space? */
+ switch (currentClass) {
+ case LineBreakUtils.LINE_BREAK_PROPERTY_BK:
+ case LineBreakUtils.LINE_BREAK_PROPERTY_LF:
+ case LineBreakUtils.LINE_BREAK_PROPERTY_NL:
+ case LineBreakUtils.LINE_BREAK_PROPERTY_CR:
+ leftClass = currentClass;
+ return PROHIBITED_BREAK;
+
+ case LineBreakUtils.LINE_BREAK_PROPERTY_SP:
+ hadSpace = true;
+ return PROHIBITED_BREAK;
+
+ default:
+ //nop
+ }
+
+ /** Normal treatment, if the first two checks did not return */
+ boolean savedHadSpace = hadSpace;
+ hadSpace = false;
+ byte breakAction = LineBreakUtils.getLineBreakPairProperty(leftClass, currentClass);
+ switch (breakAction) {
+ case PROHIBITED_BREAK:
+ case DIRECT_BREAK:
+ leftClass = currentClass;
+ return breakAction;
+
+ case INDIRECT_BREAK:
+ leftClass = currentClass;
+ if (savedHadSpace) {
+ return INDIRECT_BREAK;
+ } else {
return PROHIBITED_BREAK;
- case LineBreakUtils.DIRECT_BREAK :
+ }
+
+ case COMBINING_INDIRECT_BREAK:
+ if (savedHadSpace) {
leftClass = currentClass;
- return DIRECT_BREAK;
- case LineBreakUtils.INDIRECT_BREAK :
+ return COMBINING_INDIRECT_BREAK;
+ } else {
+ return PROHIBITED_BREAK;
+ }
+
+ case COMBINING_PROHIBITED_BREAK:
+ if (savedHadSpace) {
leftClass = currentClass;
- if (savedHadSpace) {
- return INDIRECT_BREAK;
- } else {
- return PROHIBITED_BREAK;
- }
- case LineBreakUtils.COMBINING_INDIRECT_BREAK :
- if (savedHadSpace) {
- leftClass = currentClass;
- return COMBINING_INDIRECT_BREAK;
- } else {
- return PROHIBITED_BREAK;
- }
- case LineBreakUtils.COMBINING_PROHIBITED_BREAK :
- if (savedHadSpace) {
- leftClass = currentClass;
- }
- return COMBINING_PROHIBITED_BREAK;
- default :
- throw new RuntimeException("duh");
- }
-
+ }
+ return COMBINING_PROHIBITED_BREAK;
+
+ default:
+ assert false;
+ return breakAction;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org