Menu

#84 Error when trying to parse "escapes" ?

0.8.2
open
7
2012-01-13
2012-01-13
Anonymous
No

I get the following error when trying to parse the attached code:

Throwable at package <test.sql>: java.lang.Error: Invalid escape character at line 25 column 46.
java.lang.Error: Invalid escape character at line 25 column 46.
at net.sourceforge.pldoc.parser.JavaCharStream.readChar(JavaCharStream.java:342)
at net.sourceforge.pldoc.parser.PLSQLParserTokenManager.jjMoveNfa_0(PLSQLParserTokenManager.java:3963)
at net.sourceforge.pldoc.parser.PLSQLParserTokenManager.jjMoveStringLiteralDfa0_0(PLSQLParserTokenManager.java:178)
at net.sourceforge.pldoc.parser.PLSQLParserTokenManager.getNextToken(PLSQLParserTokenManager.java:4246)
at net.sourceforge.pldoc.parser.PLSQLParser.jj_scan_token(PLSQLParser.java:31471)
at net.sourceforge.pldoc.parser.PLSQLParser.jj_3R_184(PLSQLParser.java:28392)
at net.sourceforge.pldoc.parser.PLSQLParser.jj_3R_125(PLSQLParser.java:28406)
at net.sourceforge.pldoc.parser.PLSQLParser.jj_3_39(PLSQLParser.java:29278)
at net.sourceforge.pldoc.parser.PLSQLParser.jj_2_39(PLSQLParser.java:24870)
at net.sourceforge.pldoc.parser.PLSQLParser.Expression(PLSQLParser.java:12172)
at net.sourceforge.pldoc.parser.PLSQLParser.Assignment(PLSQLParser.java:12406)
at net.sourceforge.pldoc.parser.PLSQLParser.Expression(PLSQLParser.java:12173)
at net.sourceforge.pldoc.parser.PLSQLParser.statement(PLSQLParser.java:11394)
at net.sourceforge.pldoc.parser.PLSQLParser.statement(PLSQLParser.java:8377)
at net.sourceforge.pldoc.parser.PLSQLParser.statement(PLSQLParser.java:8172)
at net.sourceforge.pldoc.parser.PLSQLParser.statement(PLSQLParser.java:8994)
at net.sourceforge.pldoc.parser.PLSQLParser.programUnit(PLSQLParser.java:5770)
at net.sourceforge.pldoc.parser.PLSQLParser.global(PLSQLParser.java:881)
at net.sourceforge.pldoc.parser.PLSQLParser.input(PLSQLParser.java:649)
at net.sourceforge.pldoc.PLDoc.processPackage(PLDoc.java:489)
at net.sourceforge.pldoc.PLDoc.run(PLDoc.java:190)
at net.sourceforge.pldoc.PLDoc.main(PLDoc.java:124)

Discussion

  • Stuart Turton

    Stuart Turton - 2012-01-15

    The problem is specifically Unicode escapes, i.e '\Unnnn'

    This example could be fixed by turning JAVA_UNICODE_ESCAPE off during PLDoc compilation, but that would mean that the best way of putting complex characters into the PLDOC comments will be lost.

    This is a suggested workaround until a fix is developed:-

    "
    CREATE OR REPLACE
    FUNCTION pldoc_bug.escapeString(theString IN VARCHAR2, theEscapeSolidusFlag IN BOOLEAN DEFAULT FALSE, theAsciiOutputFlag IN BOOLEAN DEFAULT TRUE) RETURN VARCHAR2
    IS
    aString VARCHAR2(32767);
    aBuffer VARCHAR2(40);
    aNumber NUMBER;
    cUnicodeEscapePrefix CONSTANT VARCHAR2(2) := '\'||'u'; -- Workaround to PLDoc Unicode Escape problem
    BEGIN
    IF (theString IS NULL) THEN
    RETURN '""';
    END IF;

    FOR i IN 1 .. LENGTH(theString) LOOP
    aBuffer := SUBSTR(theString, i, 1);
    CASE aBuffer
    WHEN CHR( 8) THEN aBuffer := '\b';
    WHEN CHR( 9) THEN aBuffer := '\t';
    WHEN CHR(10) THEN aBuffer := '\n';
    WHEN CHR(13) THEN aBuffer := '\f';
    WHEN CHR(14) THEN aBuffer := '\r';
    WHEN CHR(34) THEN aBuffer := '\"';
    WHEN CHR(47) THEN IF (theEscapeSolidusFlag) THEN aBuffer := '\/'; END IF;
    WHEN CHR(92) THEN aBuffer := '\\';
    ELSE
    IF (ASCII(aBuffer) < 32) THEN
    --aBuffer := '\ u' || REPLACE(SUBSTR(TO_CHAR(ASCII(aBuffer), 'XXXX'), 2, 4), ' ', '0');
    aBuffer := cUnicodeEscapePrefix || REPLACE(SUBSTR(TO_CHAR(ASCII(aBuffer), 'XXXX'), 2, 4), ' ', '0');
    ELSIF (theAsciiOutputFlag) THEN
    --aBuffer := REPLACE(ASCIISTR(aBuffer), '\', \ u');
    aBuffer := REPLACE(ASCIISTR(aBuffer), '\', cUnicodeEscapePrefix);
    END IF;
    END CASE;

    aString := aString || aBuffer;
    END LOOP;

    RETURN '"' || aString || '"';
    END escapeString;
    /
    "

     
  • Stuart Turton

    Stuart Turton - 2012-01-16

    Compiling with JAVA_UNICODE_ESCAPE causes the native character test to fail

    "
    PLDoc version: 0.9.10-SNAPSHOT
    Generating HTML files ...
    Generating allschemas.html ...
    Generating summary.html ...
    Generating generator.html ...
    Generating deprecated-list.html ...
    Generating index-list.html ...
    Generating allpackages.html ...
    Generating index.html ...
    Generating <unit>.html ...
    13 packages processed successfully.
    Done (5.806 seconds).

    PLDoc version: 0.9.10-SNAPSHOT
    Throwable at package <testinput/chinese.pks>: net.sourceforge.pldoc.parser.TokenMgrError: Lexical error at line 3, column 48. Encountered: "\u662f" (26159), after : ""
    net.sourceforge.pldoc.parser.TokenMgrError: Lexical error at line 3, column 48. Encountered: "\u662f" (26159), after : ""
    at net.sourceforge.pldoc.parser.PLSQLParserTokenManager.getNextToken(PLSQLParserTokenManager.java:4368)
    at net.sourceforge.pldoc.parser.PLSQLParser.jj_scan_token(PLSQLParser.java:32480)
    at net.sourceforge.pldoc.parser.PLSQLParser.jj_3R_368(PLSQLParser.java:27435)
    at net.sourceforge.pldoc.parser.PLSQLParser.jj_3R_339(PLSQLParser.java:29155)
    at net.sourceforge.pldoc.parser.PLSQLParser.jj_3R_308(PLSQLParser.java:29162)
    at net.sourceforge.pldoc.parser.PLSQLParser.jj_3R_256(PLSQLParser.java:28911)
    at net.sourceforge.pldoc.parser.PLSQLParser.jj_3R_168(PLSQLParser.java:29001)
    at net.sourceforge.pldoc.parser.PLSQLParser.jj_3R_145(PLSQLParser.java:29460)
    at net.sourceforge.pldoc.parser.PLSQLParser.jj_3R_103(PLSQLParser.java:29621)
    at net.sourceforge.pldoc.parser.PLSQLParser.jj_3_1(PLSQLParser.java:30124)
    at net.sourceforge.pldoc.parser.PLSQLParser.jj_2_1(PLSQLParser.java:25400)
    at net.sourceforge.pldoc.parser.PLSQLParser.input(PLSQLParser.java:627)
    at net.sourceforge.pldoc.PLDoc.processPackage(PLDoc.java:489)
    at net.sourceforge.pldoc.PLDoc.run(PLDoc.java:190)
    at net.sourceforge.pldoc.PLDoc.main(PLDoc.java:124)
    Package testinput/chinese.pks skipped.
    Generating HTML files ...
    Generating allschemas.html ...
    Generating summary.html ...
    Generating generator.html ...
    Generating deprecated-list.html ...
    Generating index-list.html ...
    Generating allpackages.html ...
    Generating index.html ...
    Generating <unit>.html ...
    Following packages were skipped due to errors:
    testinput/chinese.pks
    1 packages skipped!
    0 packages processed successfully.
    Done (1.386 seconds).

    "

     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.