瀏覽代碼

Improve code-readability; add some clarifying comments

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@664350 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-1_0
Andreas L. Delmelle 16 年之前
父節點
當前提交
ff51233ed9
共有 1 個檔案被更改,包括 81 行新增58 行删除
  1. 81
    58
      src/java/org/apache/fop/text/linebreak/LineBreakStatus.java

+ 81
- 58
src/java/org/apache/fop/text/linebreak/LineBreakStatus.java 查看文件

@@ -73,76 +73,99 @@ public class LineBreakStatus {
* @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;
}
}

Loading…
取消
儲存