tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 24226] New: - Proposition for new Preprocessor for jsp
Date Wed, 29 Oct 2003 18:57:44 GMT
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=24226>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=24226

Proposition for new Preprocessor for jsp

           Summary: Proposition for new Preprocessor for jsp
           Product: Tomcat 5
           Version: Unknown
          Platform: All
        OS/Version: All
            Status: UNCONFIRMED
          Severity: Enhancement
          Priority: Other
         Component: Unknown
        AssignedTo: tomcat-dev@jakarta.apache.org
        ReportedBy: j.lonnee@student.utwente.nl
                CC: j.lonnee@student.utwente.nl


Hi There,

I'm a student with experience of creating large applications for tomcat. I 
lately created my own Template Engine, of course exactly the way I want a 
template engine to be. In fact it is a precompiler on the jsp compiler. I would 
like my templateengine to be a standard precompiler of the jsp compiler.

I would appreciate a professional responce very much!

Here follows a copy-paste of the short manual about the usage of the tool and 
the used language:


---------
Template Engine

Usage of the Tool
The tool expects 3 commandline arguments:
-	Base directory of the directory tree containing the templates 
(the “input tree”);
-	Base directory of the directory tree where the generated files should 
be placed (the “output tree”);
-	The extension of the files that the tool should manage, e.g. “.jsp” 
or “.php4”.

In general the tool reads all files in the input tree with the given extension, 
reads and remembers all their definitions and bodies and for every one that is 
not “abstract”, generates a file in the same subdirectory in the output tree. 
The tool also generates new directories if needed,  removes files with the 
given extension if not any more in the input tree and removes directories if 
they just became empty by deleting one or more files.

Definitions and the Usage of definitions
In general the bodies of files and of all sub elements contain just 3 types of 
content:
-	Literal content (output: The content itself);
-	Definitions (output: None);
-	Usages of or references to definitions (output: The content of the 
definition);

All definitions have a name and are referred to using this name. If a file or 
other element refers to some definition it is first searched in that file or 
element itself. If not found it is searched in the element using that element. 
If it is also not found in that one it is searched in the element using that 
one and so on.

Introducing the Language
A File
If a file has “##=abstract” as its very first line, this file is “abstract “ 
and must contain a definitions body. Otherwise it must contain a normal body.

Definitions Body
A definitions body contains only definition statements. Statements end 
with “##’ and are called blocks.
Normal Body
A normal body contains literal content, any kind of statements, and references 
to definitions. All statements start with “<##” and end with “#/>”.
Inline Body
A inline body contains literal content and references to definitions. It is 
delimited by quotes or brackets from any one row of the following table.
Open	Close
{	}
[	]
(	)
‘	‘
“	“
<	>
Examples: “’inline body’” and “[another <# inline /> body]”

The Reference to a Definition
A reference starts with “<#”. Then contains the name of the definition referred 
to and may furthermore contain one or more definitions with inline bodies, 
starting with the name, followed by a ‘=’ symbol. If such a definition has 
name “default”, this one is used if the definition referred to is not found. 
Example: “<# definition123 subdef1=”aaa” subdef2=”bbb” default=”default 
defin”/>”.

The Definition Statement
A definition statement adds a definition to the element it appears in. It 
starts with “def”, followed by the name of the definition. If  the line ends it 
must contain a normal body. Otherwise a inline body must follow. Examples: “def 
defin1 ‘body of definition defin1’” and
“def  defin2
    Body of defin2
  [end symbol of statement or block]”

The Include Statement
A include statement is in fact a complex reference. It adds a part to the 
element it appears in which refers to a definition. It starts with “inc”, 
followed by the name of the definition referred to till the end of the line. 
After this line a definitions body must follow. Example: 

“inc  defin2
    def subdef1’ ‘body of subdef1’
    def  subdef2
      Body of subdef2
     ##
  [end symbol of statement or block]”

 
The Defining Include Statement
A defining include statement is the same as a include statement, except that is 
does not add a part to the element it appears in, but adds a definition to that 
element instead. It is a definition type statement. In fact it is the same as a 
definition statement with a normal body containing exactly one include 
statement. A include statement is defining if the name of the definition 
referred to is on the same line followed by “defining” followed by the name of 
the definition it defines. Example:

“inc def1 defining subdef_of_def1
    def subdef1’ ‘body of subdef1’
    def  subdef2
      Body of subdef2
     ##
  [end symbol of statement or block]”


Predefined Definitions
The engine has predefined definitions. A definition defined in a file or 
element may not have a name of a predefined definition.

On this moment the only predefined one is “linkbase”. When this one is used / 
referred to it outputs a relative link prefix to the base of the input / output 
base directory. For example if it is used in a file (in the read base 
dir) “subdir1/subdir2/file.ext”, it outputs “../../”. If it is used in a file 
(in the read base dir) “file.ext”, it outputs nothing. 
Some Examples
Input file / template in the input tree:
<## def d3
  <# centerline />
#/>

<##def d1
  Start of d1
  <##def centerline ‘Centerline of d1’ #/>
  <# d3 />
  End of  d1
#/>

<##def d2
  Start of d2
  <##def centerline ‘Centerline of d2’ #/>
  <# d3 />
  End of  d2
#/>

Start
<# d1 />
<# d2 />
End

Generates a file in the output tree on the same place as the file above:



Start
  Start of d1
    Centerline of d1
  End of  d1
  Start of d2
    Centerline of d2
  End of  d2
End

 
Example of splitting html and jsp.
Input file / template containing the html:
##=abstract

def myTable
  <table border=”1”>
    <##def row ‘<tr><td><# rowcontent /></td></tr>’ #/>
    <# rows />
  </table>
##

Input file / template containing the jsp:
<##inc myTable
  def rows
     <% for(int i=0i<10;i++) { %>
       <# row />
     <% } %>
     <##def rowcontent ‘<%=i%>’ #/>
  ##
#/>

Will together generate one file in the output tree, on the same place as the 
second file above containing:
  <table border=”1”>
         <% for(int i=0i<10;i++) { %>
           <tr><td><%=i%></td></tr>
         <% } %>
  </table>


Mark the correct indent of all lines.

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Mime
View raw message