summaryrefslogtreecommitdiff
path: root/test/ragel.d/mailbox3.rl
diff options
context:
space:
mode:
Diffstat (limited to 'test/ragel.d/mailbox3.rl')
-rw-r--r--test/ragel.d/mailbox3.rl245
1 files changed, 0 insertions, 245 deletions
diff --git a/test/ragel.d/mailbox3.rl b/test/ragel.d/mailbox3.rl
deleted file mode 100644
index 892dc513..00000000
--- a/test/ragel.d/mailbox3.rl
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * @LANG: c++
- */
-
-#include <iostream>
-#include <string.h>
-
-using std::cin;
-using std::cout;
-using std::cerr;
-using std::endl;
-
-%%{
- machine mailbox;
-
- action prn_char { cout << *p; }
- action prn_space { cout << ' '; }
- action prn_word { cout.write(ws, p-ws); cout << ' '; }
- action prn_addr1 { cout << "| "; cout.write(ws+1, p-ws-2); }
- action prn_addr2 { cout << "| "; cout.write(ws, p-ws); }
- action prn_tab { cout << '\t'; }
- action prn_nl { cout << '\n'; }
- action prn_separator { cout << "------\n"; }
- action prn_from { cout << "FROM\n"; }
- action prn_to { cout << "TO\n"; }
- action prn_subj { cout << "SUBJECT\n"; }
-
- action start_word { ws = p; }
- action start_headers { /*preserve = p;*/ }
- action end_headers { /*preserve = 0;*/ }
-
- day = upper lower{2};
- month = upper lower{2};
- year = digit{4};
- time = digit{2} ':' digit{2}
- ( ':' digit{2} )?;
- letterZone = upper{3};
- numZone = [+\-] digit{4};
- zone = letterZone | numZone;
- dayNum = ( digit | ' ' ) digit;
-
- date = day ' ' month ' '
- dayNum ' ' time ' '
- (
- year |
- year ' ' zone |
- zone ' ' year
- );
-
- fromLine = 'From ' [^\n]* ' '
- date '\n' @start_headers;
-
- headerChar = print - [ :];
- headersToPrint = 'From' |
- 'To' | 'Subject';
- headersToConsume =
- headerChar+ - headersToPrint;
-
- action init_hlen {hlen = 0;}
- action hlen {hlen++ < 50}
-
- consumeHeaderBody =
- ':' @init_hlen
- (
- [^\n] |
- ( '\n' [ \t] )
- )* when hlen
- '\n';
-
- consumeHeader =
- headersToConsume consumeHeaderBody;
-
- addrWS = ( [ \t]+ | '\n' [ \t]+ );
- addrComment = '(' [^)]* ')';
- addrWord = [^"'@,<>() \t\n]+;
- addrAddr1 = '<' [^>]* '>';
- addrAddr2 = addrWord '@' addrWord;
- addrString =
- '"' [^"]* '"' |
- "'" [^']* "'";
-
- addrItem = (
- addrAddr1 %prn_addr1 |
- addrAddr2 %prn_addr2 |
- addrWord %prn_word |
- addrString %prn_word
- ) >start_word;
-
- address = (
- addrWS |
- addrComment |
- addrItem
- )** >prn_tab;
-
- addrHeader = (
- 'From' %prn_from |
- 'To' %prn_to
- ) ':' @init_hlen
- ( address ( ',' @prn_nl address )* ) when hlen
- '\n' %prn_nl;
-
- subjectHeader =
- 'Subject:' @prn_subj @prn_tab @init_hlen
- (
- ' '* <:
- (
- [^\n] @prn_char |
- ( '\n' [ \t]+ ) %prn_space
- )**
- ) when hlen
- '\n' %prn_nl;
-
- header = consumeHeader |
- addrHeader | subjectHeader;
-
- messageLine =
- ( [^\n]* when hlen '\n' @init_hlen ) - fromLine;
-
- main := (
- fromLine %prn_separator
- header*
- '\n' @end_headers @init_hlen
- messageLine*
- )*;
- }%%
-
-%% write data;
-
-#define BUFSIZE 8192
-
-void test( const char *buf )
-{
- int cs, len = strlen( buf );
- const char /**preserve = 0,*/ *ws = 0;
- int hlen = 0;
-
- %% write init;
- const char *p = buf;
- const char *pe = p + len;
- %% write exec;
-
- if ( cs < mailbox_first_final ) {
- cout << endl << endl;
- cout << "DID NOT FINISH IN A FINAL STATE" << endl;
- }
-}
-
-int main()
-{
- test(
- "From user@host.com Wed Nov 28 13:30:05 2001\n"
- "From: \"Adrian D. Thurston\" <thurston@complang.org>\n"
- "Subject: the squirrel has landed\n"
- "\n"
- "Message goes here. \n"
- "From (trick from line).\n"
- "From: not really a header\n"
- "\n"
- "From user2@host2.com Wed Nov 28 13:30:05 2001\n"
- "To: \"(kill 1)\" Edgar Allen Poe <ep@net.com> (da man)\n"
- "Subject: (no subject) this is a really long subject which should fail the length constraint \n"
- "Other: 0123456789\n"
- "\n"
- "Message goes here. \n"
- "\n"
- );
- test(
- "From user@host.com Wed Nov 28 13:30:05 2001\n"
- "To: \"(kill 2)\" some guy <sg@net.com>\n"
- "From: \"Adrian D. Thurston this name is far too long\" <thurston@complang.org>\n"
- "Subject: the squirrel has landed\n"
- "\n"
- "From user2@host2.com Wed Nov 28 13:30:05 2001\n"
- "To: Edgar Allen Poe <ep@net.com> (da man)\n"
- "Subject: (no subject) \n"
- "\n"
- );
- test(
- "From user@host.com Wed Nov 28 13:30:05 2001\n"
- "To: \"(kill 3)\" some guy <sg@net.com>\n"
- "From: \"Adrian D. Thurston This name is fore sure absolutely too long\" <t@cs.ca>\n"
- "Subject: the squirrel has landed\n"
- "\n"
- );
- test(
- "From user@host.com Wed Nov 28 13:30:05 2001\n"
- "From: \"Adrian D. Thurston \" <t@cs.ca>\n"
- "Subject: (kill 4) the squirrel has landed\n"
- "Other: This is another header field, not interpreted, that is too long\n"
- "\n"
- );
- test(
- "From user@host.com Wed Nov 28 13:30:05 2001\n"
- "From: \"Adrian D. Thurston \" <t@cs.ca>\n"
- "Subject: (kill 5)the squirrel has landed\n"
- "\n"
- "This message line is okay.\n"
- "But this message line is far too long and will cause an error.\n"
- );
- return 0;
-}
-
-##### OUTPUT #####
-------
-FROM
- "Adrian D. Thurston" | thurston@complang.org
-SUBJECT
- the squirrel has landed
-------
-TO
- "(kill 1)" Edgar Allen Poe | ep@net.com
-SUBJECT
- (no subject) this is a really long subject whic
-
-DID NOT FINISH IN A FINAL STATE
-------
-TO
- "(kill 2)" some guy | sg@net.com
-FROM
- "Adrian D. Thurston this name is far too long"
-
-DID NOT FINISH IN A FINAL STATE
-------
-TO
- "(kill 3)" some guy | sg@net.com
-FROM
-
-
-DID NOT FINISH IN A FINAL STATE
-------
-FROM
- "Adrian D. Thurston " | t@cs.ca
-SUBJECT
- (kill 4) the squirrel has landed
-
-
-DID NOT FINISH IN A FINAL STATE
-------
-FROM
- "Adrian D. Thurston " | t@cs.ca
-SUBJECT
- (kill 5)the squirrel has landed
-
-
-DID NOT FINISH IN A FINAL STATE