Show Changes Show Changes
Edit Edit
Print Print
Recent Changes Recent Changes
Subscriptions Subscriptions
Lost and Found Lost and Found
Find References Find References
Rename Rename
Administration Page Administration Page
Search

History

9/17/2007 1:32:12 PM
-74.15.254.118
List all versions List all versions

RSS feed for the TestJwd namespace

Related Topics

Flex Wiki Parser
.
Summary

Grammar meta language:

    // Match expression syntax
    Expr       ::= (ws* Choice)+ ws*                  
    Choice     ::= Bind (ws* '|' ws* Bind)*           // choice list
    Bind       ::= VarName '=' Factor                 // bind to factor semantic result
                 | Factor                             // no binding
    Factor     ::= Atom '??'                          // lazy zero or one
                 | Atom '*?'                          // lazy zero or more
                 | Atom '+?'                          // lazy one or more
                 | Atom '[' Int (',' ws* Int?)? ']?'  // lazy specified number
                 | Atom '?'                           // zero or one
                 | Atom '*'                           // zero or more
                 | Atom '+'                           // one or more
                 | Atom '[' Int (',' ws* Int?)? ']'   // specified number 
                 | Atom                               // one
    Atom       ::= Char '..' Char                     // char range
                 | String                             // two or more chars
                 | Char                               // single char
                 | SetName                            // named charset
                 | '_'                                // any char
                 | '^'                                // line start
                 | '$'                                // line end
                 | RuleName ('(' Params ')')?         // call another rule
                 | FuncCall 
                 | '(' Expr ')'                       // parentheses
   FuncCall    ::= '@' Name ('(' Params ')')?
   Params      ::= (Param (',' ws* Param)*)?
   Param       ::= VarName | Char | String
   Name        ::= ('A'..'Z' | 'a'..'z') {NC}* 
   VarName     ::= Name
   SetName     ::= '{' Name '}'
   Char        ::= '\'' ({SingleChar} | EscChar | HexChar | UnicodeChar) '\''
   String      ::= '\'' ({SingleChar} | EscChar | HexChar | UnicodeChar)[2,] '\''
   EscChar     ::= '\'' | '\"' | '\\' | '\0' | '\a' | '\b' | '\f' | '\n' | '\r' | '\t' | '\v'
   HexChar     ::= '\x' {HexDigit}[1,4]
   UnicodeChar ::= '\u' {HexDigit}[4]
                 | '\U' {HexDigit}[8]        
   Int         ::= {Digit}+
   ws          ::= ' ' | '\t' | '\r\n' | '\n' | '\r'

   // Character set definition set
   CharSet     ::= ws* Set ws* (('+' | '-') ws* Set ws*)* 
   Set         ::= SetName
                 | '[' ItemList ']'    
   SetItemList ::= SetItem (',' ws* SetItem)*
   SetItem     ::= Char '..' Char
                 | Char  
                 | '_'
 
   // Character sets 
   {NC}          = ['A'..'Z', 'a'..'z', '0'..'9', '_']
   {SingleChar}  = [_] - ['\'', '\\', '\n', '\r']
   {Digit}       = ['0'..'9']
   {HexDigit}    = ['0'..'9', 'A'..'F', 'a'..'f']

Below is a sample of Flex Wiki grammar. It is far from completion and just shows some initial ideas:

<?xml version="1.0" encoding="utf-8" ?>
<wps:Grammar Name="FlexWiki" Version="1.0" xmlns:wps="urn:flexwiki-com:wom/2006/03">
  <wps:DefineSet Name="AZ" As="{Lu}" />
  <wps:DefineSet Name="az09" As="{Ll} + {Lt} + {Lo} + {Nd}" />
  <wps:DefineSet Name="Az09" As="{Lu} + {Ll} + {Lt} + {Lo} + {Nd}" />
  <wps:DefineSet Name="WordChar" As="['_', 'a'..'z', 'A'..'Z', '0'..'9']"/>
  <wps:DefineSet Name="NewLine" As="['\n', '\r']"/>
  <wps:DefineSet Name="LineChar" As="[_] - {NewLine}"/>

  <wps:StartTemplate>
    <wps:Choice>
      <wps:MatchTemplate Name="MultilineProperty"/>
      <wps:MatchTemplate Name="MultilineBehaviorProperty="/>
      <wps:MatchTemplate Name="Pre"/>
      <wps:MatchTemplate Name="HorizontalRule"/>
      <wps:MatchTemplate Name="PreLine"/>
      <wps:MatchTemplate Name="BulletList"/>
      <wps:MatchTemplate Name="Table"/>
      <wps:MatchTemplate Name="H7"/>
      <wps:MatchTemplate Name="H6"/>
      <wps:MatchTemplate Name="H5"/>
      <wps:MatchTemplate Name="H4"/>
      <wps:MatchTemplate Name="H3"/>
      <wps:MatchTemplate Name="H2"/>
      <wps:MatchTemplate Name="H1"/>
      <wps:MatchTemplate Name="Property"/>
      <wps:MatchTemplate Name="Paragraph"/>
    </wps:Choice>
  </wps:StartTemplate>

  <wps:Template Name="NamespaceName" Match="{AZ} {Az09}+" />
  <wps:Template Name="StartsWithMulticaps" Match="{AZ}[2,] {az09}+ {Az09}*" />
  <wps:Template Name="StartsWithOneCap" Match="{AZ} {az09}+ {Az09}*" />
  <wps:Template Name="UnbracketedWikiName" Match="'_'? StartsWithMulticaps | StartsWithOneCap" />
  <wps:Template Name="BracketedWikiName" Match="'[' ({Az09} | ' ')+ ']'" />
  <wps:Template Name="UnqualifiedWikiName" Match="UnbracketedWikiName | BracketedWikiName" />
  <wps:Template Name="QualifiedWikiName" Match="(NamespaceName '.' )* UnqualifiedWikiName" />
  <wps:Template Name="WikiName" Match="QualifiedWikiName | UnqualifiedWikiName | ForcedLocalWikiName" />
  <wps:Template Name="Identifier" Match="('A'..'Z'|'_') {WordChar}+"></wps:Template>

  <wps:Template Name="MultilineProperty" Match="^ leader=':'? Name=Identifier ':' '[' val=PropertyContent ']'"></wps:Template>
  <wps:Template Name="MultilineBehaviorProperty" Match="^ leader=':'? Name=Identifier ':' '{' val=Behavior '}'"></wps:Template>
  <wps:Template Name="Pre" Match="
    ^ '{@' preBlockKey={LineChar}* $ 
       content=_*? 
    ^ '}@' postBlockKey={LineChar}* $ 
    @Same(preBlockKey, LineChar)">
    <pre>
      <wps:ValueOf Select="content"/>
    </pre>
  </wps:Template>
  <wps:Template Name="HorizontalRule" Match="^ '----'">
    <hr/>
  </wps:Template>
  <wps:Template Name="IncludeTopic" Match="^ ['\t']* '{{' Name=WikiName '}}' {Space}* $"></wps:Template>
  <wps:Template Name="PreLine" Match="^ [' ','\t']+"></wps:Template>
  <wps:Template Name="BulletList" Match="^ indent=TAB+ '*' LineContent* $"></wps:Template>
  <wps:Template Name="BulletList" Match="^ indent=TAB+ '1.' LineContent* $"></wps:Template>
  <wps:Template Name="Table" Match="^ '||' (CellContent '||')+ $"></wps:Template>
  <wps:Template Name="H7" Match="^ '!!!!!!!' LineContent* $"></wps:Template>
  <wps:Template Name="H6" Match="^ '!!!!!!' LineContent* $"></wps:Template>
  <wps:Template Name="H5" Match="^ '!!!!!' LineContent* $"></wps:Template>
  <wps:Template Name="H4" Match="^ '!!!!' LineContent* $"></wps:Template>
  <wps:Template Name="H3" Match="^ '!!!' LineContent* $"></wps:Template>
  <wps:Template Name="H2" Match="^ '!!' LineContent* $"></wps:Template>
  <wps:Template Name="H1" Match="^ '!' LineContent* $"></wps:Template>
  <wps:Template Name="Property" Match="^ leader=':'? Name=Identifier ':' LineContent* $"></wps:Template>

  <wps:Template Name="Paragraph">
    <wps:LineStart/>
    <p>
      <wps:MatchTemplate Name="LineContent" Min="0" Max="unbounded"/>
    </p>
    <wps:LineEnd/>
  </wps:Template>

  <wps:Template Name="LineContent" Match="Behavior | Emoticon 
    | Deemphasis 
    | Textile('\'\'\'', 'strong') 
    | Textile('\'\'', 'em') 
    | Textile('_', 'em') 
    | Textile('*', 'strong') 
    | Textile('??', 'cite') 
    | Textile('-', 'del') 
    | Textile('+', 'ins')
    | Textile('^', 'sup') 
    | Textile('~', 'sub') 
    | Textile('@', 'code') 
    | Color 
    | HttpImage 
    | FileImage 
    | _"></wps:Template>

  <wps:Template Name="Behavior" Match="'@@' Behavior '@@'"></wps:Template>
  <wps:Template Name="Emoticon" Match="':)'">
    <img src="smile.gif"/>
  </wps:Template>
  <wps:Template Name="Deemphasis" Match="'`' c=LineContent+? '`'">
    <span class="Deemphasis">
      <wps:ValueOf Select="c"/>
    </span>
  </wps:Template>

  <wps:Template Name="Textile">
    <wps:Param Name="delimiter" />
    <wps:Param Name="tag" />
    <wps:Match Text="$delimiter"/>
    <wps:Element Name="$tag">
      <wps:MatchTemplate Name="LineContent" Min="0" Max="unbounded" Lazy="yes"/>
    </wps:Element>
    <wps:Match Text="$delimiter"/>
  </wps:Template>

  <wps:Template Name="Color" Match="'%' color or size '%' c=LineContent+? '%%'?">
    <wps:Call Name="Color">
      <wps:ValueOf Select="c"/>
    </wps:Call>
  </wps:Template>
  <wps:Template Name="HttpImage" Match="url=('http' 's'? '://' {NotSpace}* ('.jpg'|'.gif'|'.png'|'.jpeg'))">
    <img>
      <wps:Attribute Name="src">
        <wps:ValueOf Select="url"/>
      </wps:Attribute>
    </img>
  </wps:Template>
  <wps:Template Name="FileImage" Match="url=('file://' {NotSpace}* ('.jpg'|'.gif'|'.png'|'.jpeg'|'.doc'|'.xls'|'.ppt'|'.txt'))">
    <img>
      <wps:Attribute Name="src">
        <wps:ValueOf Select="url"/>
      </wps:Attribute>
    </img>
  </wps:Template>
</wps:Grammar>

Not logged in. Log in

The wiki for all things Objective Design Solutions

This is FlexWiki, an open source wiki engine.

This site supports the new NoFollow anti-spam initiative.
Change Style

Recent Topics