Search code examples
node.jspugtemplate-engine

doctype declaration in Jade


I'm trying to repoduce in Jade following output code (incluiding carriage returns) with no success:

Trying to output following:

<?xml version="1.0"?>
<!DOCTYPE j:jelly 
[
  <!ENTITY aacute "&#x000E1;">
  <!ENTITY Aacute "&#x000C1;">
  <!ENTITY ordm "&#x000BA;">
  <!ENTITY euro "&#x020AC;">
  <!ENTITY amp  "&#x00026;">
  <!ENTITY iquest  "&#x000BF;">
  <!ENTITY iexcl  "&#x000A1;">
  <!ENTITY copy  "&#x000A9;">
]>

in Jade code I have:

<?xml version="1.0"?>
doctype j:jelly[<!ENTITY aacute "&#x000E1;"><!ENTITY Aacute "&#x000C1;"><!ENTITY eacute "&#x000E9;"><!ENTITY ordm "&#x000BA;"><!ENTITY euro "&#x020AC;"><!ENTITY amp  "&#x00026;"><!ENTITY iquest  "&#x000BF;"><!ENTITY iexcl  "&#x000A1;"><!ENTITY copy  "&#x000A9;"> ]

which outputs one-only line (working but messy, no carriage returns):

<?xml version="1.0"?>
<!DOCTYPE j:jelly [<!ENTITY aacute "&#x000E1;"><!ENTITY Aacute "&#x000C1;"><!ENTITY ordm "&#x000BA;"><!ENTITY euro "&#x020AC;"><!ENTITY amp  "&#x00026;"><!ENTITY iquest  "&#x000BF;"><!ENTITY iexcl  "&#x000A1;"><!ENTITY copy  "&#x000A9;">]>

Solution

  • so just add line breaks with raw text:

    <?xml version="1.0"?> 
    | < doctype j:jelly
    | [
    |  <!ENTITY aacute "&#x000E1;">
    |  <!ENTITY Aacute "&#x000C1;">
    |  <!ENTITY eacute "&#x000E9;">
    |  <!ENTITY ordm "&#x000BA;">
    |  <!ENTITY euro "&#x020AC;">
    |  <!ENTITY amp  "&#x00026;">
    |  <!ENTITY iquest  "&#x000BF;">
    |  <!ENTITY iexcl  "&#x000A1;">
    |  <!ENTITY copy  "&#x000A9;">
    | ]>
    

    to get

    <?xml version="1.0"?> 
    < doctype j:jelly
    [
     <!ENTITY aacute "&#x000E1;">
     <!ENTITY Aacute "&#x000C1;">
     <!ENTITY eacute "&#x000E9;">
     <!ENTITY ordm "&#x000BA;">
     <!ENTITY euro "&#x020AC;">
     <!ENTITY amp  "&#x00026;">
     <!ENTITY iquest  "&#x000BF;">
     <!ENTITY iexcl  "&#x000A1;">
     <!ENTITY copy  "&#x000A9;">
    ]>
    

    Because this is using only raw text you may consider to use the include statement.

    With

    start.jade:

    include ./other.jade
    

    and

    other.jade:

    <?xml version="1.0"?> 
    < doctype j:jelly
    [
     <!ENTITY aacute "&#x000E1;">
     <!ENTITY Aacute "&#x000C1;">
     <!ENTITY eacute "&#x000E9;">
     <!ENTITY ordm "&#x000BA;">
     <!ENTITY euro "&#x020AC;">
     <!ENTITY amp  "&#x00026;">
     <!ENTITY iquest  "&#x000BF;">
     <!ENTITY iexcl  "&#x000A1;">
     <!ENTITY copy  "&#x000A9;">
    ]>
    

    You will get

    /usr/lib/node_modules/jade/lib/runtime.js:240
      throw err;
            ^
    Error: other.jade:3
        1| <?xml version="1.0"?> 
        2| < doctype j:jelly
      > 3| [
        4|  <!ENTITY aacute "&#x000E1;">
        5|  <!ENTITY Aacute "&#x000C1;">
        6|  <!ENTITY eacute "&#x000E9;">
    
    unexpected text [
     <!
        at Object.Lexer.fail (/usr/lib/node_modules/jade/lib/lexer.js:887:11)
        at Object.Lexer.next (/usr/lib/node_modules/jade/lib/lexer.js:947:15)
        at Object.Lexer.lookahead (/usr/lib/node_modules/jade/lib/lexer.js:113:46)
        at Parser.lookahead (/usr/lib/node_modules/jade/lib/parser.js:102:23)
        at Parser.peek (/usr/lib/node_modules/jade/lib/parser.js:79:17)
        at Parser.parse (/usr/lib/node_modules/jade/lib/parser.js:117:26)
        at Parser.parseInclude (/usr/lib/node_modules/jade/lib/parser.js:616:22)
        at Parser.parseExpr (/usr/lib/node_modules/jade/lib/parser.js:223:21)
        at Parser.parse (/usr/lib/node_modules/jade/lib/parser.js:122:25)
        at parse (/usr/lib/node_modules/jade/lib/index.js:104:21)
    

    because the to be included file is interpreted as jade template. Just rename it.

    With

    start.jade:

    include ./other.inc
    

    and

    other.inc:

    <?xml version="1.0"?> 
    < doctype j:jelly
    [
     <!ENTITY aacute "&#x000E1;">
     <!ENTITY Aacute "&#x000C1;">
     <!ENTITY eacute "&#x000E9;">
     <!ENTITY ordm "&#x000BA;">
     <!ENTITY euro "&#x020AC;">
     <!ENTITY amp  "&#x00026;">
     <!ENTITY iquest  "&#x000BF;">
     <!ENTITY iexcl  "&#x000A1;">
     <!ENTITY copy  "&#x000A9;">
    ]>
    

    You will get the expected

    <?xml version="1.0"?> 
    < doctype j:jelly
    [
     <!ENTITY aacute "&#x000E1;">
     <!ENTITY Aacute "&#x000C1;">
     <!ENTITY eacute "&#x000E9;">
     <!ENTITY ordm "&#x000BA;">
     <!ENTITY euro "&#x020AC;">
     <!ENTITY amp  "&#x00026;">
     <!ENTITY iquest  "&#x000BF;">
     <!ENTITY iexcl  "&#x000A1;">
     <!ENTITY copy  "&#x000A9;">
    ]>