[prev in list] [next in list] [prev in thread] [next in thread]
List: jboss-cvs-commits
Subject: [jboss-cvs] jboss-seam ...
From: gavin.king () jboss ! com (Gavin King)
Date: 2007-01-24 11:48:54
Message-ID: E1H4TFI-00007m-Or () committer01 ! frg ! pub ! inap ! atl ! jboss ! com
[Download RAW message or body]
User: gavin
Date: 07/01/09 21:31:20
Added: jboss-seam seam-text.g
Log:
initial seamtext grammar
Revision Changes Path
1.1 date: 2007/01/10 02:31:20; author: gavin; state: \
Exp;jboss-seam/seam-text.g
Index: seam-text.g
===================================================================
header
{
package org.jboss.seam.text;
}
class P extends Parser;
options
{
k=2;
}
{
private boolean bold = false;
private boolean underline = false;
private boolean italic = false;
private boolean deleted = false;
private boolean monospace = false;
private boolean preformatted = false;
private boolean quoted = false;
private boolean superscript = false;
private StringBuilder builder = new StringBuilder();
public String toString() {
return builder.toString();
}
public void append(String... strings) {
for (String string: strings) builder.append(string);
}
}
startRule: { append("<p>\n"); }
text
{ append("\n</p>\n"); }
;
text: (word|punctuation|escape|bold|underline|italic|monospace|superscript|deleted|preformatted|quoted|ws|para|span)*
;
word: w:WORD { append( w.getText() ); }
;
punctuation: p:PUNCTUATION { append( p.getText() ); }
;
escape: ESCAPE ( seam | html )
;
seam: { Token t=null; }
(
st:STAR {t=st;}
| sl:SLASH {t=sl;}
| b:BAR {t=b;}
| h:HAT {t=h;}
| q:QUOTE {t=q;}
| m:MINUS {t=m;}
| p:PLUS {t=p;}
| eq:EQ {t=eq;}
)
{ append( t.getText() ); }
;
html: GT { append(">"); }
| LT { append("<"); }
| DOUBLEQUOTE { append("""); }
| AMPERSAND { append("&"); }
;
bold: STAR {
bold = !bold;
if (bold) append("<b>"); else append("</b>");
}
;
underline: UNDERSCORE {
underline = !underline;
if (underline) append("<u>"); else append("</u>");
}
;
italic: SLASH {
italic = !italic;
if (italic) append("<i>"); else append("</i>");
}
;
monospace: BAR {
monospace = !monospace;
if (monospace) append("<tt>"); else append("</tt>");
}
;
superscript: HAT {
superscript = !superscript;
if (superscript) append("<sup>"); else append("</sup>");
}
;
preformatted: QUOTE {
preformatted = !preformatted;
if (preformatted) append("<pre>"); else append("</pre>");
}
;
quoted: DOUBLEQUOTE {
quoted = !quoted;
if (quoted) append("<quote>"); else append("</quote>");
}
;
deleted: MINUS {
deleted = !deleted;
if (deleted) append("<del>"); else append("</del>");
}
;
ws: WS { append(" "); }
;
para: NEWLINE NEWLINE {
append("\n</p>\n<p>\n");
bold = false;
underline = false;
italic = false;
deleted = false;
monospace = false;
superscript = false;
}
;
span: LT tag:WORD { append("<" + tag.getText()); }
(
ws att:WORD EQ
DOUBLEQUOTE { append(att.getText() + "=\""); }
attributeValue
DOUBLEQUOTE { append("\""); }
)*
(
(
GT { append(">"); }
text
LT SLASH WORD GT { append("</" + tag.getText() + ">"); }
)
| (
SLASH GT { append("/>"); }
)
)
;
attributeValue: ( word | punctuation | ws | seam )*
;
class L extends Lexer;
options
{
k=2;
}
WORD: ('a'..'z'|'A'..'Z'|'0'..'9')+
;
PUNCTUATION: ':' | ';' | '(' | ')' | '?' | '!' | '@' | '%' | '.'
;
EQ: '='
;
PLUS: '+'
;
UNDERSCORE: '_'
;
STAR: '*'
;
SLASH: '/'
;
ESCAPE: '\\'
;
BAR: '|'
;
MINUS: '-'
;
QUOTE: '\''
;
DOUBLEQUOTE: '"'
;
HASH: '#'
;
HAT: '^'
;
GT: '>'
;
LT: '<'
;
AMPERSAND: '&'
;
WS: (' ' | '\t')+
;
NEWLINE: '\r' '\n' // DOS
| '\n' // UNIX
| '\r' // Mac
;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic