diff --git a/build.third_step0.gradle b/build.third_step0.gradle
index c9bc2aeda..9b7bcd2cb 100644
--- a/build.third_step0.gradle
+++ b/build.third_step0.gradle
@@ -43,8 +43,10 @@ def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.s
def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1)
def srcDir="."
+def MVN_BRANCH = branchVariable.toUpperCase()
+
// @branch - 分支信息
-def maven_version="${version}-RELEASE-SNAPSHOT"
+def maven_version="${version}-${MVN_BRANCH}-SNAPSHOT"
def jar_version = version
configurations {
diff --git a/build.third_step1.gradle b/build.third_step1.gradle
index 4ee016047..2e561dc79 100644
--- a/build.third_step1.gradle
+++ b/build.third_step1.gradle
@@ -58,6 +58,7 @@ repositories{
FileTree files =fileTree(dir:'./',include:'build.*.gradle')
def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator))
def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1)
+def MVN_BRANCH = branchVariable.toUpperCase()
//指定依赖
dependencies{
@@ -65,7 +66,7 @@ dependencies{
compile fileTree(dir:"${srcDir}/fine-quartz/lib",include:'**/*.jar')
compile fileTree(dir:"${srcDir}/build/libs/",include:'**/*.jar')
// @branch - 分支信息
- compile "com.fr.third:fine-third:10.0-RELEASE-SNAPSHOT"
+ compile "com.fr.third:fine-third:10.0-${MVN_BRANCH}-SNAPSHOT"
compile fileTree(dir:"../../finereport-lib-other/${branchName}",include:'**/*.jar')
testCompile 'junit:junit:4.12'
}
diff --git a/build.third_step2.gradle b/build.third_step2.gradle
index 9e1e2cb2e..d65d684a4 100644
--- a/build.third_step2.gradle
+++ b/build.third_step2.gradle
@@ -46,6 +46,7 @@ repositories{
FileTree files =fileTree(dir:'./',include:'build.*.gradle')
def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator))
def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1)
+def MVN_BRANCH = branchVariable.toUpperCase()
//指定依赖
dependencies{
@@ -55,7 +56,7 @@ dependencies{
compile fileTree(dir:"${srcDir}/fine-antlr4/lib",include: '**/*.jar')
compile fileTree(dir:"${srcDir}/build/libs/",include:'**/*.jar')
// @branch - 分支信息
- compile "com.fr.third:fine-third:10.0-RELEASE-SNAPSHOT"
+ compile "com.fr.third:fine-third:10.0-${MVN_BRANCH}-SNAPSHOT"
compile fileTree(dir:"../../finereport-lib-other/${branchName}",include:'**/*.jar')
testCompile 'junit:junit:4.12'
}
diff --git a/build.third_step3.gradle b/build.third_step3.gradle
index e5658dba6..702132f17 100644
--- a/build.third_step3.gradle
+++ b/build.third_step3.gradle
@@ -45,13 +45,14 @@ repositories{
FileTree files =fileTree(dir:'./',include:'build.*.gradle')
def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator))
def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1)
+def MVN_BRANCH = branchVariable.toUpperCase()
//指定依赖
dependencies{
compile fileTree(dir:"${srcDir}/fine-jboss-logging/lib",include:'**/*.jar')
compile fileTree(dir:"${srcDir}/build/libs/",include:'**/*.jar')
// @branch - 分支信息
- compile "com.fr.third:fine-third:10.0-RELEASE-SNAPSHOT"
+ compile "com.fr.third:fine-third:10.0-${MVN_BRANCH}-SNAPSHOT"
compile fileTree(dir:"../../finereport-lib-other/${branchName}",include:'**/*.jar')
testCompile 'junit:junit:4.12'
}
diff --git a/build.third_step4.gradle b/build.third_step4.gradle
index b38e93e7f..650c69b0a 100644
--- a/build.third_step4.gradle
+++ b/build.third_step4.gradle
@@ -44,13 +44,14 @@ repositories{
FileTree files =fileTree(dir:'./',include:'build.*.gradle')
def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator))
def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1)
+def MVN_BRANCH = branchVariable.toUpperCase()
//指定依赖
dependencies{
compile fileTree(dir:"${srcDir}/fine-hibernate/lib",include:'**/*.jar')
compile fileTree(dir:"${srcDir}/build/libs/",include:'**/*.jar')
// @branch - 分支信息
- compile "com.fr.third:fine-third:10.0-RELEASE-SNAPSHOT"
+ compile "com.fr.third:fine-third:10.0-${MVN_BRANCH}-SNAPSHOT"
compile fileTree(dir:"../../finereport-lib-other/${branchName}",include:'**/*.jar')
testCompile 'junit:junit:4.12'
}
diff --git a/build.third_step5.gradle b/build.third_step5.gradle
index 819ba5457..dd8d80fdd 100644
--- a/build.third_step5.gradle
+++ b/build.third_step5.gradle
@@ -42,6 +42,7 @@ repositories{
FileTree files =fileTree(dir:'./',include:'build.*.gradle')
def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator))
def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1)
+def MVN_BRANCH = branchVariable.toUpperCase()
//指定依赖
dependencies{
@@ -49,7 +50,7 @@ dependencies{
compile fileTree(dir:"${srcDir}/fine-druid/lib",include:'**/*.jar')
compile fileTree(dir:"${srcDir}/build/libs/",include:'**/*.jar')
// @branch - 分支信息
- compile "com.fr.third:fine-third:10.0-RELEASE-SNAPSHOT"
+ compile "com.fr.third:fine-third:10.0-${MVN_BRANCH}-SNAPSHOT"
compile fileTree(dir:"../../finereport-lib-other/${branchName}",include:'**/*.jar')
testCompile 'junit:junit:4.12'
}
diff --git a/build.third_step6.gradle b/build.third_step6.gradle
index f0fb86b0a..8ef6d50ae 100644
--- a/build.third_step6.gradle
+++ b/build.third_step6.gradle
@@ -68,6 +68,7 @@ repositories{
FileTree files =fileTree(dir:'./',include:'build*.gradle')
def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf (java.io.File.separator))
def branchName=buildDir.substring(buildDir.lastIndexOf (java.io.File.separator)+1)
+def MVN_BRANCH = branchVariable.toUpperCase()
//指定依赖
dependencies{
@@ -83,7 +84,7 @@ dependencies{
compile fileTree(dir:"${srcDir}/fine-jgit/lib",include:'**/*.jar')
compile fileTree(dir:"${srcDir}/build/libs/",include:'**/*.jar')
// @branch - 分支信息
- compile "com.fr.third:fine-third:10.0-RELEASE-SNAPSHOT"
+ compile "com.fr.third:fine-third:10.0-${MVN_BRANCH}-SNAPSHOT"
compile fileTree(dir:"../../finereport-lib-other/${branchName}",include:'**/*.jar')
testCompile 'junit:junit:4.12'
}
diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfChunk.java b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfChunk.java
index f5b67439a..8d014cd80 100644
--- a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfChunk.java
+++ b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfChunk.java
@@ -88,6 +88,12 @@ public class PdfChunk {
private static final float FONT_SCALE = 100f;
+ private static final String BREAK = "\n";
+
+ private static final String BREAK_TAG = "
";
+
+ private boolean breakTag = false;
+
public float getHeight() {
return height;
}
@@ -135,16 +141,16 @@ public class PdfChunk {
keysNoStroke.put(Chunk.TEXTRENDERMODE, null);
}
-
+
// membervariables
/** The value of this object. */
protected String value = PdfObject.NOTHING;
-
+
/** The encoding. */
protected String encoding = BaseFont.WINANSI;
-
-
+
+
/** The font for this PdfChunk
. */
protected PdfFont font;
@@ -164,7 +170,7 @@ public class PdfChunk {
* such as underline.
*/
protected HashMap attributes = new HashMap();
-
+
/**
* Non metric attributes.
*
@@ -172,16 +178,16 @@ public class PdfChunk {
* such as Color.
*/
protected HashMap noStroke = new HashMap();
-
+
/**
* @param string the true
if the chunk split was cause by a newline. */
protected boolean newlineSplit;
-
+
/** The image in this PdfChunk
, if it has one */
protected Image image;
-
+
/** The offset in the x direction for the image */
protected float offsetX;
-
+
/** The offset in the y direction for the image */
protected float offsetY;
@@ -189,17 +195,18 @@ public class PdfChunk {
protected boolean changeLeading = false;
// constructors
-
+
/**
* Constructs a PdfChunk
-object.
*
* @param string the content of the PdfChunk
-object
* @param other Chunk with the same style you want for the new Chunk
*/
-
+
PdfChunk(String string, PdfChunk other) {
thisChunk[0] = this;
value = string;
+ updateBreakTag();
this.font = other.font;
this.attributes = other.attributes;
this.noStroke = other.noStroke;
@@ -217,18 +224,18 @@ public class PdfChunk {
splitCharacter = DefaultSplitCharacter.DEFAULT;
this.height = other.getHeight();
}
-
-/**
+
+ /**
* Constructs a PdfChunk
-object.
*
* @param chunk the original Chunk
-object
* @param action the PdfAction
if the Chunk
comes from an Anchor
*/
-
+
public PdfChunk(Chunk chunk, PdfAction action) {
thisChunk[0] = this;
value = chunk.getContent();
-
+ updateBreakTag();
Font f = chunk.getFont();
float size = f.getSize();
if (size == Font.UNDEFINED)
@@ -302,15 +309,15 @@ public class PdfChunk {
if (splitCharacter == null)
splitCharacter = DefaultSplitCharacter.DEFAULT;
}
-
+
// methods
-
+
/** Gets the Unicode equivalent to a CID.
- * The (inexistent) CID PdfChunk
that doesn't fit into the width.
*/
-
+
PdfChunk truncate(float width) {
if (image != null) {
if (image.getScaledWidth() + indent.getLeft() + indent.getRight() > width) {
@@ -421,10 +428,10 @@ public class PdfChunk {
else
return null;
}
-
+
int currentPosition = 0;
float currentWidth = indent.getLeft();
-
+
// it's no use trying to split if there isn't even enough place for a space
if (width < font.width() + indent.getLeft() + indent.getRight()) {
String returnValue = value.substring(1);
@@ -432,7 +439,7 @@ public class PdfChunk {
PdfChunk pc = new PdfChunk(returnValue, this);
return pc;
}
-
+
// loop over all the characters of a string
// or until the totalWidth is reached
int length = value.length();
@@ -451,12 +458,12 @@ public class PdfChunk {
currentPosition++;
currentPosition++;
}
-
+
// if all the characters fit in the total width, null is returned (there is no overflow)
if (currentPosition == length) {
return null;
}
-
+
// otherwise, the string has to be truncated
//currentPosition -= 2;
// we have to chop off minimum 1 character from the chunk
@@ -470,49 +477,49 @@ public class PdfChunk {
PdfChunk pc = new PdfChunk(returnValue, this);
return pc;
}
-
+
// methods to retrieve the membervariables
-
+
/**
* Returns the font of this Chunk
.
*
* @return a PdfFont
*/
-
+
PdfFont font() {
return font;
}
-
+
/**
* Returns the color of this Chunk
.
*
* @return a Color
*/
-
+
Color color() {
return (Color)noStroke.get(Chunk.COLOR);
}
-
+
/**
* Returns the width of this PdfChunk
.
*
* @return a width
*/
-
+
public float width() {
return font.width(value) + indent.getLeft() + indent.getRight();
}
-
+
/**
* Checks if the PdfChunk
split was caused by a newline.
* @return true
if the PdfChunk
split was caused by a newline.
*/
-
+
public boolean isNewlineSplit()
{
return newlineSplit;
}
-
+
/**
* Gets the width of the PdfChunk
taking into account the
* extra character and word spacing.
@@ -520,7 +527,7 @@ public class PdfChunk {
* @param wordSpacing the extra word spacing
* @return the calculated width
*/
-
+
public float getWidthCorrected(float charSpacing, float wordSpacing)
{
if (image != null) {
@@ -532,7 +539,7 @@ public class PdfChunk {
++numberOfSpaces;
return width() + (value.length() * charSpacing + numberOfSpaces * wordSpacing);
}
-
+
/**
* Gets the text displacement relative to the baseline.
* @return a displacement in points
@@ -544,7 +551,7 @@ public class PdfChunk {
}
return 0.0f;
}
-
+
/**
* Trims the last space.
* @return the width of the space trimmed, otherwise 0
@@ -565,44 +572,44 @@ public class PdfChunk {
}
return 0;
}
-
+
/**
* Gets an attribute. The search is made in attributes
* and noStroke
.
* @param name the attribute key
* @return the attribute value or null if not found
*/
-
+
public Object getAttribute(String name)
{
if (attributes.containsKey(name))
return attributes.get(name);
return noStroke.get(name);
}
-
+
/**
*Checks if the attribute exists.
* @param name the attribute key
* @return true
if the attribute exists
*/
-
+
boolean isAttribute(String name)
{
if (attributes.containsKey(name))
return true;
return noStroke.containsKey(name);
}
-
+
/**
* Checks if this PdfChunk
needs some special metrics handling.
* @return true
if this PdfChunk
needs some special metrics handling.
*/
-
+
boolean isStroked()
{
return (!attributes.isEmpty());
}
-
+
/**
* Checks if this PdfChunk
is a Separator Chunk.
* @return true if this chunk is a separator.
@@ -611,7 +618,7 @@ public class PdfChunk {
boolean isSeparator() {
return isAttribute(Chunk.SEPARATOR);
}
-
+
/**
* Checks if this PdfChunk
is a horizontal Separator Chunk.
* @return true if this chunk is a horizontal separator.
@@ -624,7 +631,7 @@ public class PdfChunk {
}
return false;
}
-
+
/**
* Checks if this PdfChunk
is a tab Chunk.
* @return true if this chunk is a separator.
@@ -633,7 +640,7 @@ public class PdfChunk {
boolean isTab() {
return isAttribute(Chunk.TAB);
}
-
+
/**
* Correction for the tab position based on the left starting position.
* @param newValue the new value for the left X.
@@ -645,72 +652,72 @@ public class PdfChunk {
attributes.put(Chunk.TAB, new Object[]{o[0], o[1], o[2], new Float(newValue)});
}
}
-
+
/**
* Checks if there is an image in the PdfChunk
.
* @return true
if an image is present
*/
-
+
public boolean isImage()
{
return image != null;
}
-
+
/**
* Gets the image in the PdfChunk
.
* @return the image or null
*/
-
+
public Image getImage()
{
return image;
}
-
+
/**
* Sets the image offset in the x direction
* @param offsetX the image offset in the x direction
*/
-
+
void setImageOffsetX(float offsetX)
{
this.offsetX = offsetX;
}
-
+
/**
* Gets the image offset in the x direction
* @return the image offset in the x direction
*/
-
+
float getImageOffsetX()
{
return offsetX;
}
-
+
/**
* Sets the image offset in the y direction
* @param offsetY the image offset in the y direction
*/
-
+
void setImageOffsetY(float offsetY)
{
this.offsetY = offsetY;
}
-
+
/**
* Gets the image offset in the y direction
* @return Gets the image offset in the y direction
*/
-
+
float getImageOffsetY()
{
return offsetY;
}
-
+
/**
* sets the value.
* @param value content of the Chunk
*/
-
+
void setValue(String value)
{
this.value = value;
@@ -727,17 +734,17 @@ public class PdfChunk {
* Tells you if this string is in Chinese, Japanese, Korean or Identity-H.
* @return true if the Chunk has a special encoding
*/
-
+
boolean isSpecialEncoding() {
return encoding.equals(CJKFont.CJK_ENCODING) || encoding.equals(BaseFont.IDENTITY_H);
}
-
+
/**
* Gets the encoding of this string.
*
* @return a String
*/
-
+
String getEncoding() {
return encoding;
}
@@ -745,7 +752,7 @@ public class PdfChunk {
int length() {
return value.length();
}
-
+
int lengthUtf32() {
if (!BaseFont.IDENTITY_H.equals(encoding))
return value.length();
@@ -758,17 +765,17 @@ public class PdfChunk {
}
return total;
}
-
+
boolean isExtSplitCharacter(int start, int current, int end, char[] cc, PdfChunk[] ck) {
return splitCharacter.isSplitCharacter(start, current, end, cc, ck);
}
-
+
/**
* Removes all the ' ' and '-'-characters on the right of a String
.
* String
that has to be trimmed.
* @return the trimmed
String
- */
+ */
String trim(String string) {
while (string.endsWith(" ") || string.endsWith("\t")) {
string = string.substring(0, string.length() - 1);
@@ -779,7 +786,7 @@ public class PdfChunk {
public boolean changeLeading() {
return changeLeading;
}
-
+
float getCharWidth(int c) {
if (noPrint(c))
return 0;
@@ -798,7 +805,7 @@ public class PdfChunk {
htmlString.append("");
- htmlString.append(value);
+ htmlString.append(breakTag ? BREAK_TAG : value);
htmlString.append("");
return htmlString.toString();
}
@@ -856,4 +863,12 @@ public class PdfChunk {
return indent.getLeft();
}
+ private void updateBreakTag() {
+ breakTag = BREAK.equals(value);
+ }
+
+ public boolean isBreakTag() {
+ return breakTag;
+ }
+
}
diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfLine.java b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfLine.java
index 4752ffd8e..a4f980b3c 100644
--- a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfLine.java
+++ b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfLine.java
@@ -91,9 +91,11 @@ public class PdfLine {
/** The original width. */
protected float originalWidth;
-
+
protected boolean isRTL = false;
+
+
public float getHeight() {
return height;
}
@@ -155,9 +157,15 @@ public class PdfLine {
public PdfChunk add(PdfChunk chunk) {
// nothing happens if the chunk is null.
if (chunk == null || chunk.toString().equals("")) {
- return null;
+ return null;
}
-
+ // add to line if the chunk is break tag ("\n")
+ if (chunk.isBreakTag()) {
+ addToLine(chunk);
+ width = 0;
+ return null;
+ }
+
// we split the chunk to be added
PdfChunk overflow = chunk.split(width);
newlineSplit = (chunk.isNewlineSplit() || overflow == null);
diff --git a/fine-j2v8/src/com/eclipsesource/v8/PlatformDetector.java b/fine-j2v8/src/com/eclipsesource/v8/PlatformDetector.java
index 8fa7868d0..643f57c7c 100644
--- a/fine-j2v8/src/com/eclipsesource/v8/PlatformDetector.java
+++ b/fine-j2v8/src/com/eclipsesource/v8/PlatformDetector.java
@@ -127,7 +127,7 @@ public class PlatformDetector {
//如果if条件全部不符合,就会陷入死循环,代码存在风险
//throw new UnsatisfiedLinkError("Unsupported vendor: " + getName());
- return "";
+ return null;
}
private static String getLinuxOsReleaseId() {
@@ -148,7 +148,7 @@ public class PlatformDetector {
//linux系统下如果缺失/etc/os-release,/usr/lib/os-release,/etc/redhat-release三个文件,就会和getName方法就会一直互相调用
//throw new UnsatisfiedLinkError("Unsupported linux vendor: " + getName());
- return "";
+ return null;
}
private static String parseLinuxOsReleaseFile(final File file) {