diff options
| author | Jakob Heher <jakob.heher@iaik.tugraz.at> | 2026-04-15 13:49:22 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-15 13:49:22 +0200 |
| commit | 77dd3fcc4d85088b15ab859c4438521d9cd6ed10 (patch) | |
| tree | aefedc8d2ef77e6819b46a948459d6016dfe5b62 /pdf-as-pdfbox-2/src/main/java/at/knowcenter | |
| parent | 88930540361a88ff56e07fed31004b583f2e729f (diff) | |
| download | pdf-as-4-77dd3fcc4d85088b15ab859c4438521d9cd6ed10.tar.gz pdf-as-4-77dd3fcc4d85088b15ab859c4438521d9cd6ed10.tar.bz2 pdf-as-4-77dd3fcc4d85088b15ab859c4438521d9cd6ed10.zip | |
pdf-as-5 (#82)
- JDK 17
- PDFBox 3
- PDF-AS Web moved to Spring Boot
- MOA Integration tests w/ new error code
---------
Co-authored-by: Gerald Palfinger <gerald.palfinger@a-sit.at>
Co-authored-by: kathrin.resek <kathrin.resek@a-sit.at>
Diffstat (limited to 'pdf-as-pdfbox-2/src/main/java/at/knowcenter')
16 files changed, 66 insertions, 91 deletions
diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/PDFPage.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/PDFPage.java index a3e68c95..c49d99a5 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/PDFPage.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/PDFPage.java @@ -55,6 +55,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import lombok.Getter; +import lombok.Setter; import org.apache.commons.lang3.math.NumberUtils; import org.apache.pdfbox.contentstream.operator.Operator; import org.apache.pdfbox.contentstream.operator.OperatorProcessor; @@ -127,8 +129,21 @@ public class PDFPage extends PDFTextStripper{ /** * The path currently being constructed. - */ - private GeneralPath currentPath = new GeneralPath(); + * -- SETTER -- + * Sets the current path. + * + * + * -- GETTER -- + * Returns the path currently being constructed. + * + @param currentPath + * The new current path. + * @return The path currently being constructed. + + */ + @Getter + @Setter + private GeneralPath currentPath = new GeneralPath(); private boolean legacy40; @@ -155,8 +170,7 @@ public class PDFPage extends PDFTextStripper{ this.effectivePageHeight = effectivePageHeight; OperatorProcessor newInvoke = new MyInvoke(this); - newInvoke.setContext(this); - this.registerOperatorProcessor("Do", newInvoke); + this.addOperator(newInvoke); if (!legacy32) { registerCustomPathOperators(); @@ -172,32 +186,26 @@ public class PDFPage extends PDFTextStripper{ private void registerCustomPathOperators() { // *** path construction - this.registerOperatorProcessor("m", new MoveTo(this)); - this.registerOperatorProcessor("l", new LineTo(this)); - this.registerOperatorProcessor("c", new CurveTo(this)); - this.registerOperatorProcessor("y", - new CurveToReplicateFinalPoint(this)); - this.registerOperatorProcessor("v", new CurveToReplicateInitialPoint( - this)); - this.registerOperatorProcessor("h", new ClosePath(this)); + this.addOperator(new MoveTo(this)); + this.addOperator(new LineTo(this)); + this.addOperator(new CurveTo(this)); + this.addOperator(new CurveToReplicateFinalPoint(this)); + this.addOperator(new CurveToReplicateInitialPoint(this)); + this.addOperator(new ClosePath(this)); // *** path painting // "S": stroke path - this.registerOperatorProcessor("S", new StrokePath(this)); - this.registerOperatorProcessor("s", new CloseAndStrokePath(this)); - this.registerOperatorProcessor("f", - new FillPathNonZeroWindingNumberRule(this)); - this.registerOperatorProcessor("F", - new FillPathNonZeroWindingNumberRule(this)); - this.registerOperatorProcessor("f*", new FillPathEvenOddRule(this)); - this.registerOperatorProcessor("b", new CloseFillNonZeroAndStrokePath( - this)); - this.registerOperatorProcessor("B", new FillNonZeroAndStrokePath(this)); - this.registerOperatorProcessor("b*", new CloseFillEvenOddAndStrokePath( - this)); - this.registerOperatorProcessor("B*", new FillEvenOddAndStrokePath(this)); - this.registerOperatorProcessor("n", new EndPath(this)); + this.addOperator(new StrokePath(this)); + this.addOperator(new CloseAndStrokePath(this)); + this.addOperator(new FillPathNonZeroWindingNumberRule(this, true)); + this.addOperator(new FillPathNonZeroWindingNumberRule(this, false)); + this.addOperator(new FillPathEvenOddRule(this)); + this.addOperator(new CloseFillNonZeroAndStrokePath(this)); + this.addOperator(new FillNonZeroAndStrokePath(this)); + this.addOperator(new CloseFillEvenOddAndStrokePath(this)); + this.addOperator(new FillEvenOddAndStrokePath(this)); + this.addOperator(new EndPath(this)); // Note: The graphic context // (org.pdfbox.pdmodel.graphics.PDGraphicsState) of the underlying @@ -209,26 +217,7 @@ public class PDFPage extends PDFTextStripper{ } - /** - * Returns the path currently being constructed. - * - * @return The path currently being constructed. - */ - public GeneralPath getCurrentPath() { - return currentPath; - } - - /** - * Sets the current path. - * - * @param currentPath - * The new current path. - */ - public void setCurrentPath(GeneralPath currentPath) { - this.currentPath = currentPath; - } - - /** + /** * Registers a rectangle that bounds the path currently being drawn. * * @param bounds @@ -448,8 +437,8 @@ public class PDFPage extends PDFTextStripper{ PDXObject xobject = context.getResources().getXObject(name); - PDStream stream = xobject.getPDStream(); - COSStream cos_stream = stream.getStream(); + PDStream stream = xobject.getStream(); + COSStream cos_stream = stream.getCOSObject(); COSName subtype = (COSName) cos_stream .getDictionaryObject(COSName.SUBTYPE); @@ -550,8 +539,7 @@ public class PDFPage extends PDFTextStripper{ @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "Do"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/ClosePath.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/ClosePath.java index 50b3b4d0..098ce8f6 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/ClosePath.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/ClosePath.java @@ -91,8 +91,7 @@ public class ClosePath extends PathConstructionOperatorProcessor { @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "h"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/CurveTo.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/CurveTo.java index da1288d3..e6b76400 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/CurveTo.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/CurveTo.java @@ -87,9 +87,9 @@ public class CurveTo extends PathConstructionOperatorProcessor { COSNumber x3 = (COSNumber) operands.get(4); COSNumber y3 = (COSNumber) operands.get(5); - Point2D p1 = transform(x1.doubleValue(), y1.doubleValue()); - Point2D p2 = transform(x2.doubleValue(), y2.doubleValue()); - Point2D p3 = transform(x3.doubleValue(), y3.doubleValue()); + Point2D p1 = transform(x1.floatValue(), y1.floatValue()); + Point2D p2 = transform(x2.floatValue(), y2.floatValue()); + Point2D p3 = transform(x3.floatValue(), y3.floatValue()); pdfPage.getCurrentPath().curveTo( (float) p1.getX(), (float) p1.getY(), @@ -108,8 +108,7 @@ public class CurveTo extends PathConstructionOperatorProcessor { @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "c"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/CurveToReplicateFinalPoint.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/CurveToReplicateFinalPoint.java index 458e8b3e..86c95c17 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/CurveToReplicateFinalPoint.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/CurveToReplicateFinalPoint.java @@ -85,8 +85,8 @@ public class CurveToReplicateFinalPoint extends PathConstructionOperatorProcesso COSNumber x3 = (COSNumber) operands.get(2); COSNumber y3 = (COSNumber) operands.get(3); - Point2D p1 = transform(x1.doubleValue(), y1.doubleValue()); - Point2D p3 = transform(x3.doubleValue(), y3.doubleValue()); + Point2D p1 = transform(x1.floatValue(), y1.floatValue()); + Point2D p3 = transform(x3.floatValue(), y3.floatValue()); pdfPage.getCurrentPath().curveTo( (float) p1.getX(), (float) p1.getY(), @@ -105,8 +105,7 @@ public class CurveToReplicateFinalPoint extends PathConstructionOperatorProcesso @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "y"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/CurveToReplicateInitialPoint.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/CurveToReplicateInitialPoint.java index d3a4e5e3..91c90589 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/CurveToReplicateInitialPoint.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/CurveToReplicateInitialPoint.java @@ -86,8 +86,8 @@ public class CurveToReplicateInitialPoint extends PathConstructionOperatorProces COSNumber y3 = (COSNumber) operands.get(3); Point2D currentPoint = pdfPage.getCurrentPath().getCurrentPoint(); - Point2D p2 = transform(x2.doubleValue(), y2.doubleValue()); - Point2D p3 = transform(x3.doubleValue(), y3.doubleValue()); + Point2D p2 = transform(x2.floatValue(), y2.floatValue()); + Point2D p3 = transform(x3.floatValue(), y3.floatValue()); pdfPage.getCurrentPath().curveTo( (float)currentPoint.getX(), (float)currentPoint.getY(), @@ -107,8 +107,7 @@ public class CurveToReplicateInitialPoint extends PathConstructionOperatorProces @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "v"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/LineTo.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/LineTo.java index a3bee751..94fbbbb0 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/LineTo.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/LineTo.java @@ -80,7 +80,7 @@ public class LineTo extends PathConstructionOperatorProcessor { COSNumber x = (COSNumber) operands.get(0); COSNumber y = (COSNumber) operands.get(1); - Point2D p = transform(x.doubleValue(), y.doubleValue()); + Point2D p = transform(x.floatValue(), y.floatValue()); pdfPage.getCurrentPath().lineTo((float) p.getX(), (float) p.getY()); @@ -94,8 +94,7 @@ public class LineTo extends PathConstructionOperatorProcessor { @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "l"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/MoveTo.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/MoveTo.java index 624405f8..3fe123ea 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/MoveTo.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/construction/MoveTo.java @@ -67,7 +67,7 @@ import at.knowcenter.wag.egov.egiz.pdfbox2.pdf.operator.path.PathConstructionOpe * @see "PDF 1.7 specification, Section 8.5.2 'Path Construction Operators'" * @author PdfBox, modified by Datentechnik Innovation GmbH */ -public class MoveTo extends PathConstructionOperatorProcessor{ +public class MoveTo extends PathConstructionOperatorProcessor{ public MoveTo(PDFPage context) { super(context); @@ -82,7 +82,7 @@ public class MoveTo extends PathConstructionOperatorProcessor{ COSNumber x = (COSNumber) operands.get(0); COSNumber y = (COSNumber) operands.get(1); - Point2D p = transform(x.doubleValue(), y.doubleValue()); + Point2D p = transform(x.floatValue(), y.floatValue()); pdfPage.getCurrentPath().moveTo((float) p.getX(), (float) p.getY()); @@ -97,8 +97,7 @@ public class MoveTo extends PathConstructionOperatorProcessor{ @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "m"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/CloseAndStrokePath.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/CloseAndStrokePath.java index 488819ac..37182ddc 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/CloseAndStrokePath.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/CloseAndStrokePath.java @@ -82,8 +82,7 @@ public class CloseAndStrokePath extends PathPaintingOperatorProcessor { @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "s"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/CloseFillEvenOddAndStrokePath.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/CloseFillEvenOddAndStrokePath.java index 41078e40..597084e8 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/CloseFillEvenOddAndStrokePath.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/CloseFillEvenOddAndStrokePath.java @@ -83,8 +83,7 @@ public class CloseFillEvenOddAndStrokePath extends PathPaintingOperatorProcessor @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "b*"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/CloseFillNonZeroAndStrokePath.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/CloseFillNonZeroAndStrokePath.java index ef297ca9..8ab72438 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/CloseFillNonZeroAndStrokePath.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/CloseFillNonZeroAndStrokePath.java @@ -83,8 +83,7 @@ public class CloseFillNonZeroAndStrokePath extends PathPaintingOperatorProcessor @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "b"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/EndPath.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/EndPath.java index 0001d7e5..a43df0a2 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/EndPath.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/EndPath.java @@ -91,8 +91,7 @@ public class EndPath extends PathPaintingOperatorProcessor { @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "n"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillEvenOddAndStrokePath.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillEvenOddAndStrokePath.java index 12a4b037..77e65666 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillEvenOddAndStrokePath.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillEvenOddAndStrokePath.java @@ -95,8 +95,7 @@ public class FillEvenOddAndStrokePath extends PathPaintingOperatorProcessor { @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "B*"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillNonZeroAndStrokePath.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillNonZeroAndStrokePath.java index a6fca720..9a1f0b69 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillNonZeroAndStrokePath.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillNonZeroAndStrokePath.java @@ -95,8 +95,7 @@ public class FillNonZeroAndStrokePath extends PathPaintingOperatorProcessor { @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "B"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillPathEvenOddRule.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillPathEvenOddRule.java index 10eeae03..092ba751 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillPathEvenOddRule.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillPathEvenOddRule.java @@ -94,8 +94,7 @@ public class FillPathEvenOddRule extends PathPaintingOperatorProcessor { @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "f*"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillPathNonZeroWindingNumberRule.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillPathNonZeroWindingNumberRule.java index ca8922fc..3b8d13f9 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillPathNonZeroWindingNumberRule.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/FillPathNonZeroWindingNumberRule.java @@ -68,9 +68,11 @@ import at.knowcenter.wag.egov.egiz.pdfbox2.pdf.operator.path.PathPaintingOperato public class FillPathNonZeroWindingNumberRule extends PathPaintingOperatorProcessor { private Log log = LogFactory.getLog(getClass()); + private final boolean lowercase; - public FillPathNonZeroWindingNumberRule(PDFPage context) { + public FillPathNonZeroWindingNumberRule(PDFPage context, boolean lowercase) { super(context); + this.lowercase = lowercase; } @Override @@ -95,8 +97,7 @@ public class FillPathNonZeroWindingNumberRule extends PathPaintingOperatorProces @Override public String getName() { - // TODO Auto-generated method stub - return null; + return lowercase ? "f" : "F"; } } diff --git a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/StrokePath.java b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/StrokePath.java index 3dc0965e..ef9fc24b 100644 --- a/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/StrokePath.java +++ b/pdf-as-pdfbox-2/src/main/java/at/knowcenter/wag/egov/egiz/pdfbox2/pdf/operator/path/painting/StrokePath.java @@ -93,8 +93,7 @@ public class StrokePath extends PathPaintingOperatorProcessor { @Override public String getName() { - // TODO Auto-generated method stub - return null; + return "S"; } } |
