John Edmund Rose, Jr.

Lassic - Templated Text Processing With ASP Classic

Introduction. Occasionally I'm called upon to do maintenance work on ASP Classic sites. Now, we all know that ASP Classic is outdated and lends itself to web applications that are masses of intermingled data, controller, and presentation logic. We also know it's 2012 and ASP Classic hasn't been relevant since 2001.

Why Lassic? ASP Classic stinks. Badly. However, some clients simply don't have the desire, need, or budget to migrate away from ASP Classic. I developed Lassic as a simple templating engine for ASP Classic sites I'm forced to do maintenance on. In modern terms, Lassic allows one's markup to separate .html files, while the ASP page acts like a poor man's "controller" or "code-behind." It ain't fun, but it's better than the typical ASP Classic spaghetti. Mostly... barely. Kind of.

Implementation Notes. Lassic is reasonably performant. It makes heavy use of VBScript's RegExp object for the heavy lifting - the text processing and replacement. The RegExp object is part of the VBScript runtime DLL; that means it's "real, compiled" C/C++. On a 2.96ghz Core 2 Quad (not that the number of cores matter; this is all single-threaded) Lassic will typically render your template in under 15ms, usually much less. (VBScript is tough to benchmark precisely; the timer's resolution appears to be ~15ms) Lassic will also cache templates in the Application object. With a little work, you could obviously modify it to use the user-specific Session object instead.

Example One - Just Grab Text From a File

If you're not doing any processing, it can still be beneficial to store your markup in a separate file. GetTemplate() is a wrapper function that uses the Template object to return the contents of a text file.

Code
<%
GetTemplate "simple.html", False   'False means we'll use the cache and not force a reload
%>
Raw Template Processed Template
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Render time: ~0 milliseconds

Example Two - Simple Tag Replacement

Nine tags are replaced.

Code
<%
Dim MyTemplate = New Template
With MyTemplate 
	.Load "templates/lorem.html"
	.Rep "ONE", "This is the first sentence in the first paragraph."
	.Rep "TWO", "This is the first sentence in the second paragraph."
	.Rep "THREE", "This is the first sentence in the third paragraph."
	.Rep "FOUR", "This is the first sentence in the fourth paragraph."
	.Rep "FIVE", "This is the first sentence in the fifth paragraph."
	.Rep "SIX", "This is the first sentence in the sixth paragraph."
	.Rep "SEVEN", "This is the first sentence in the seventh paragraph."
	.Rep "EIGHT", "This is the first sentence in the eight paragraph."
	.Rep "NINE", "This is the first sentence in the ninth paragraph."
	Response.Write .Render
End With
%>
Raw Template Processed Template
<p>
##ONE## Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras semper neque non augue condimentum eleifend. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sed felis nec diam dictum convallis vitae ut enim. Vestibulum nunc nisl, venenatis dapibus gravida id, posuere nec erat. Aenean dignissim justo sed lacus volutpat ultricies. Nunc at leo magna, vitae egestas augue. Vivamus ultricies dictum lacus sed viverra. Morbi risus mauris, aliquet at tempor at, fringilla ut augue. Vivamus malesuada nisl ut metus porttitor nec tincidunt urna pharetra. Vestibulum et ipsum ligula, et commodo magna. Cras eu dapibus libero. Nulla volutpat, mauris a venenatis dignissim, tellus nunc interdum erat, ut dictum nulla velit sed ipsum. In hac habitasse platea dictumst. Nam urna urna, pharetra quis consectetur nec, laoreet eget nibh. Donec dictum pellentesque tellus, in commodo magna dignissim in. Vivamus leo libero, dictum vitae lacinia ac, rhoncus id odio. Mauris id velit quam, sed feugiat orci. Sed ac diam at elit luctus vestibulum eget ut lectus. Praesent quis ante ut nunc venenatis fermentum vehicula in nisi. Nullam magna elit, iaculis vel tempor non, tempus tristique lectus.
</p>
<p>
##TWO## Sed elementum sapien ligula. Vestibulum adipiscing rutrum sapien, eget iaculis leo volutpat in. Sed sit amet tellus a metus malesuada porta vel id massa. Vivamus id orci augue, sit amet mattis leo. Nulla facilisi. Integer justo purus, congue id dapibus eget, lobortis scelerisque tortor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis sit amet tellus sapien. Morbi elementum varius imperdiet. Nullam volutpat viverra scelerisque. Vestibulum tincidunt velit ornare elit ullamcorper pretium.
</p>
<p>
##THREE## Proin hendrerit fermentum massa, at iaculis nisi posuere sit amet. Suspendisse ac turpis ut est semper dictum in nec est. In auctor ante a ipsum facilisis bibendum. Proin purus massa, ullamcorper et euismod eget, lacinia id velit. Praesent et turpis nisl. Cras egestas faucibus dignissim. Praesent euismod velit non dui placerat id vestibulum mi hendrerit. Vestibulum mollis odio ut tortor cursus imperdiet. Aliquam erat volutpat. Quisque pretium, lectus vel venenatis luctus, augue odio pharetra tortor, sit amet auctor metus sapien sit amet augue. Morbi et augue ut nunc posuere tempus. Curabitur non libero nunc, sed fringilla diam. Mauris consectetur eros a arcu consectetur eu malesuada ipsum congue. Duis non purus turpis. Aenean felis dui, imperdiet quis ultrices ac, vestibulum vitae dolor. Praesent eget mi risus, eu varius felis. Cras congue cursus mollis. Morbi nec rutrum leo. Phasellus elementum libero at lorem elementum quis aliquam arcu faucibus.
</p>
<p>
##FOUR## Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras semper neque non augue condimentum eleifend. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sed felis nec diam dictum convallis vitae ut enim. Vestibulum nunc nisl, venenatis dapibus gravida id, posuere nec erat. Aenean dignissim justo sed lacus volutpat ultricies. Nunc at leo magna, vitae egestas augue. Vivamus ultricies dictum lacus sed viverra. Morbi risus mauris, aliquet at tempor at, fringilla ut augue. Vivamus malesuada nisl ut metus porttitor nec tincidunt urna pharetra. Vestibulum et ipsum ligula, et commodo magna. Cras eu dapibus libero. Nulla volutpat, mauris a venenatis dignissim, tellus nunc interdum erat, ut dictum nulla velit sed ipsum. In hac habitasse platea dictumst. Nam urna urna, pharetra quis consectetur nec, laoreet eget nibh. Donec dictum pellentesque tellus, in commodo magna dignissim in. Vivamus leo libero, dictum vitae lacinia ac, rhoncus id odio. Mauris id velit quam, sed feugiat orci. Sed ac diam at elit luctus vestibulum eget ut lectus. Praesent quis ante ut nunc venenatis fermentum vehicula in nisi. Nullam magna elit, iaculis vel tempor non, tempus tristique lectus.
</p>
<p>
##FIVE## Sed elementum sapien ligula. Vestibulum adipiscing rutrum sapien, eget iaculis leo volutpat in. Sed sit amet tellus a metus malesuada porta vel id massa. Vivamus id orci augue, sit amet mattis leo. Nulla facilisi. Integer justo purus, congue id dapibus eget, lobortis scelerisque tortor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis sit amet tellus sapien. Morbi elementum varius imperdiet. Nullam volutpat viverra scelerisque. Vestibulum tincidunt velit ornare elit ullamcorper pretium.
</p>
<p>
##SIX## Proin hendrerit fermentum massa, at iaculis nisi posuere sit amet. Suspendisse ac turpis ut est semper dictum in nec est. In auctor ante a ipsum facilisis bibendum. Proin purus massa, ullamcorper et euismod eget, lacinia id velit. Praesent et turpis nisl. Cras egestas faucibus dignissim. Praesent euismod velit non dui placerat id vestibulum mi hendrerit. Vestibulum mollis odio ut tortor cursus imperdiet. Aliquam erat volutpat. Quisque pretium, lectus vel venenatis luctus, augue odio pharetra tortor, sit amet auctor metus sapien sit amet augue. Morbi et augue ut nunc posuere tempus. Curabitur non libero nunc, sed fringilla diam. Mauris consectetur eros a arcu consectetur eu malesuada ipsum congue. Duis non purus turpis. Aenean felis dui, imperdiet quis ultrices ac, vestibulum vitae dolor. Praesent eget mi risus, eu varius felis. Cras congue cursus mollis. Morbi nec rutrum leo. Phasellus elementum libero at lorem elementum quis aliquam arcu faucibus.
</p>
<p>
##SEVEN## Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras semper neque non augue condimentum eleifend. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sed felis nec diam dictum convallis vitae ut enim. Vestibulum nunc nisl, venenatis dapibus gravida id, posuere nec erat. Aenean dignissim justo sed lacus volutpat ultricies. Nunc at leo magna, vitae egestas augue. Vivamus ultricies dictum lacus sed viverra. Morbi risus mauris, aliquet at tempor at, fringilla ut augue. Vivamus malesuada nisl ut metus porttitor nec tincidunt urna pharetra. Vestibulum et ipsum ligula, et commodo magna. Cras eu dapibus libero. Nulla volutpat, mauris a venenatis dignissim, tellus nunc interdum erat, ut dictum nulla velit sed ipsum. In hac habitasse platea dictumst. Nam urna urna, pharetra quis consectetur nec, laoreet eget nibh. Donec dictum pellentesque tellus, in commodo magna dignissim in. Vivamus leo libero, dictum vitae lacinia ac, rhoncus id odio. Mauris id velit quam, sed feugiat orci. Sed ac diam at elit luctus vestibulum eget ut lectus. Praesent quis ante ut nunc venenatis fermentum vehicula in nisi. Nullam magna elit, iaculis vel tempor non, tempus tristique lectus.
</p>
<p>
##EIGHT## Sed elementum sapien ligula. Vestibulum adipiscing rutrum sapien, eget iaculis leo volutpat in. Sed sit amet tellus a metus malesuada porta vel id massa. Vivamus id orci augue, sit amet mattis leo. Nulla facilisi. Integer justo purus, congue id dapibus eget, lobortis scelerisque tortor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis sit amet tellus sapien. Morbi elementum varius imperdiet. Nullam volutpat viverra scelerisque. Vestibulum tincidunt velit ornare elit ullamcorper pretium.
</p>
<p>
##NINE## Proin hendrerit fermentum massa, at iaculis nisi posuere sit amet. Suspendisse ac turpis ut est semper dictum in nec est. In auctor ante a ipsum facilisis bibendum. Proin purus massa, ullamcorper et euismod eget, lacinia id velit. Praesent et turpis nisl. Cras egestas faucibus dignissim. Praesent euismod velit non dui placerat id vestibulum mi hendrerit. Vestibulum mollis odio ut tortor cursus imperdiet. Aliquam erat volutpat. Quisque pretium, lectus vel venenatis luctus, augue odio pharetra tortor, sit amet auctor metus sapien sit amet augue. Morbi et augue ut nunc posuere tempus. Curabitur non libero nunc, sed fringilla diam. Mauris consectetur eros a arcu consectetur eu malesuada ipsum congue. Duis non purus turpis. Aenean felis dui, imperdiet quis ultrices ac, vestibulum vitae dolor. Praesent eget mi risus, eu varius felis. Cras congue cursus mollis. Morbi nec rutrum leo. Phasellus elementum libero at lorem elementum quis aliquam arcu faucibus.
</p>
<p>
This is the first sentence in the first paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras semper neque non augue condimentum eleifend. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sed felis nec diam dictum convallis vitae ut enim. Vestibulum nunc nisl, venenatis dapibus gravida id, posuere nec erat. Aenean dignissim justo sed lacus volutpat ultricies. Nunc at leo magna, vitae egestas augue. Vivamus ultricies dictum lacus sed viverra. Morbi risus mauris, aliquet at tempor at, fringilla ut augue. Vivamus malesuada nisl ut metus porttitor nec tincidunt urna pharetra. Vestibulum et ipsum ligula, et commodo magna. Cras eu dapibus libero. Nulla volutpat, mauris a venenatis dignissim, tellus nunc interdum erat, ut dictum nulla velit sed ipsum. In hac habitasse platea dictumst. Nam urna urna, pharetra quis consectetur nec, laoreet eget nibh. Donec dictum pellentesque tellus, in commodo magna dignissim in. Vivamus leo libero, dictum vitae lacinia ac, rhoncus id odio. Mauris id velit quam, sed feugiat orci. Sed ac diam at elit luctus vestibulum eget ut lectus. Praesent quis ante ut nunc venenatis fermentum vehicula in nisi. Nullam magna elit, iaculis vel tempor non, tempus tristique lectus.
</p>
<p>
This is the first sentence in the second paragraph. Sed elementum sapien ligula. Vestibulum adipiscing rutrum sapien, eget iaculis leo volutpat in. Sed sit amet tellus a metus malesuada porta vel id massa. Vivamus id orci augue, sit amet mattis leo. Nulla facilisi. Integer justo purus, congue id dapibus eget, lobortis scelerisque tortor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis sit amet tellus sapien. Morbi elementum varius imperdiet. Nullam volutpat viverra scelerisque. Vestibulum tincidunt velit ornare elit ullamcorper pretium.
</p>
<p>
This is the first sentence in the third paragraph. Proin hendrerit fermentum massa, at iaculis nisi posuere sit amet. Suspendisse ac turpis ut est semper dictum in nec est. In auctor ante a ipsum facilisis bibendum. Proin purus massa, ullamcorper et euismod eget, lacinia id velit. Praesent et turpis nisl. Cras egestas faucibus dignissim. Praesent euismod velit non dui placerat id vestibulum mi hendrerit. Vestibulum mollis odio ut tortor cursus imperdiet. Aliquam erat volutpat. Quisque pretium, lectus vel venenatis luctus, augue odio pharetra tortor, sit amet auctor metus sapien sit amet augue. Morbi et augue ut nunc posuere tempus. Curabitur non libero nunc, sed fringilla diam. Mauris consectetur eros a arcu consectetur eu malesuada ipsum congue. Duis non purus turpis. Aenean felis dui, imperdiet quis ultrices ac, vestibulum vitae dolor. Praesent eget mi risus, eu varius felis. Cras congue cursus mollis. Morbi nec rutrum leo. Phasellus elementum libero at lorem elementum quis aliquam arcu faucibus.
</p>
<p>
This is the first sentence in the fourth paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras semper neque non augue condimentum eleifend. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sed felis nec diam dictum convallis vitae ut enim. Vestibulum nunc nisl, venenatis dapibus gravida id, posuere nec erat. Aenean dignissim justo sed lacus volutpat ultricies. Nunc at leo magna, vitae egestas augue. Vivamus ultricies dictum lacus sed viverra. Morbi risus mauris, aliquet at tempor at, fringilla ut augue. Vivamus malesuada nisl ut metus porttitor nec tincidunt urna pharetra. Vestibulum et ipsum ligula, et commodo magna. Cras eu dapibus libero. Nulla volutpat, mauris a venenatis dignissim, tellus nunc interdum erat, ut dictum nulla velit sed ipsum. In hac habitasse platea dictumst. Nam urna urna, pharetra quis consectetur nec, laoreet eget nibh. Donec dictum pellentesque tellus, in commodo magna dignissim in. Vivamus leo libero, dictum vitae lacinia ac, rhoncus id odio. Mauris id velit quam, sed feugiat orci. Sed ac diam at elit luctus vestibulum eget ut lectus. Praesent quis ante ut nunc venenatis fermentum vehicula in nisi. Nullam magna elit, iaculis vel tempor non, tempus tristique lectus.
</p>
<p>
This is the first sentence in the fifth paragraph. Sed elementum sapien ligula. Vestibulum adipiscing rutrum sapien, eget iaculis leo volutpat in. Sed sit amet tellus a metus malesuada porta vel id massa. Vivamus id orci augue, sit amet mattis leo. Nulla facilisi. Integer justo purus, congue id dapibus eget, lobortis scelerisque tortor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis sit amet tellus sapien. Morbi elementum varius imperdiet. Nullam volutpat viverra scelerisque. Vestibulum tincidunt velit ornare elit ullamcorper pretium.
</p>
<p>
This is the first sentence in the sixth paragraph. Proin hendrerit fermentum massa, at iaculis nisi posuere sit amet. Suspendisse ac turpis ut est semper dictum in nec est. In auctor ante a ipsum facilisis bibendum. Proin purus massa, ullamcorper et euismod eget, lacinia id velit. Praesent et turpis nisl. Cras egestas faucibus dignissim. Praesent euismod velit non dui placerat id vestibulum mi hendrerit. Vestibulum mollis odio ut tortor cursus imperdiet. Aliquam erat volutpat. Quisque pretium, lectus vel venenatis luctus, augue odio pharetra tortor, sit amet auctor metus sapien sit amet augue. Morbi et augue ut nunc posuere tempus. Curabitur non libero nunc, sed fringilla diam. Mauris consectetur eros a arcu consectetur eu malesuada ipsum congue. Duis non purus turpis. Aenean felis dui, imperdiet quis ultrices ac, vestibulum vitae dolor. Praesent eget mi risus, eu varius felis. Cras congue cursus mollis. Morbi nec rutrum leo. Phasellus elementum libero at lorem elementum quis aliquam arcu faucibus.
</p>
<p>
This is the first sentence in the seventh paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras semper neque non augue condimentum eleifend. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sed felis nec diam dictum convallis vitae ut enim. Vestibulum nunc nisl, venenatis dapibus gravida id, posuere nec erat. Aenean dignissim justo sed lacus volutpat ultricies. Nunc at leo magna, vitae egestas augue. Vivamus ultricies dictum lacus sed viverra. Morbi risus mauris, aliquet at tempor at, fringilla ut augue. Vivamus malesuada nisl ut metus porttitor nec tincidunt urna pharetra. Vestibulum et ipsum ligula, et commodo magna. Cras eu dapibus libero. Nulla volutpat, mauris a venenatis dignissim, tellus nunc interdum erat, ut dictum nulla velit sed ipsum. In hac habitasse platea dictumst. Nam urna urna, pharetra quis consectetur nec, laoreet eget nibh. Donec dictum pellentesque tellus, in commodo magna dignissim in. Vivamus leo libero, dictum vitae lacinia ac, rhoncus id odio. Mauris id velit quam, sed feugiat orci. Sed ac diam at elit luctus vestibulum eget ut lectus. Praesent quis ante ut nunc venenatis fermentum vehicula in nisi. Nullam magna elit, iaculis vel tempor non, tempus tristique lectus.
</p>
<p>
This is the first sentence in the eight paragraph. Sed elementum sapien ligula. Vestibulum adipiscing rutrum sapien, eget iaculis leo volutpat in. Sed sit amet tellus a metus malesuada porta vel id massa. Vivamus id orci augue, sit amet mattis leo. Nulla facilisi. Integer justo purus, congue id dapibus eget, lobortis scelerisque tortor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis sit amet tellus sapien. Morbi elementum varius imperdiet. Nullam volutpat viverra scelerisque. Vestibulum tincidunt velit ornare elit ullamcorper pretium.
</p>
<p>
This is the first sentence in the ninth paragraph. Proin hendrerit fermentum massa, at iaculis nisi posuere sit amet. Suspendisse ac turpis ut est semper dictum in nec est. In auctor ante a ipsum facilisis bibendum. Proin purus massa, ullamcorper et euismod eget, lacinia id velit. Praesent et turpis nisl. Cras egestas faucibus dignissim. Praesent euismod velit non dui placerat id vestibulum mi hendrerit. Vestibulum mollis odio ut tortor cursus imperdiet. Aliquam erat volutpat. Quisque pretium, lectus vel venenatis luctus, augue odio pharetra tortor, sit amet auctor metus sapien sit amet augue. Morbi et augue ut nunc posuere tempus. Curabitur non libero nunc, sed fringilla diam. Mauris consectetur eros a arcu consectetur eu malesuada ipsum congue. Duis non purus turpis. Aenean felis dui, imperdiet quis ultrices ac, vestibulum vitae dolor. Praesent eget mi risus, eu varius felis. Cras congue cursus mollis. Morbi nec rutrum leo. Phasellus elementum libero at lorem elementum quis aliquam arcu faucibus.
</p>

Render time: ~16 milliseconds

Example Three - Replace Tags With Recordset Fields

If you supply an ADO Recordset, tags in the template will be replaced with values from corresponding recordset fields.

Code
Set loRS=GetDisconnectedRS("select * from member where id_member=123")
Set loTemp=New Template
With loTemp
	.Load "memberinfo_html.asp"
	Set .RS = loRS
	Response.Write .Render
End With
Raw Template Processed Template
<h3>Member Information</h3>
<p>
Login: ##Login##<br>
DOB: ##DOB##<br>
First Name: ##First_Name##<br>
Last Name: ##Last_Name##<br>
</p>
<h3>Member Information</h3>
<p>
Login: John Booty<br>
DOB: 6/3/1976<br>
First Name: Brown <br>
Last Name: Sally <br>
</p>

Render time: ~0 milliseconds

Example Four - Formatting Tricks

A variety of formatting codes are included. It's easy to write your own.

Code
Set loTemp = New Template
With loTemp
.Load "formatting.html"
.Rep "Balance","123456789"
.Rep "ShutdownTime","now"
Response.Write .Render
End With
Raw Template Processed Template
Your balance is: $#,Balance,#<br> Your favorite fruit is: #-[bananas|apples|oranges|pears|kiwifruit]This will be replaced with a random value-#<br> The system is shutting down #!ShutdownTime!#
Your balance is: $123,456,789<br> Your favorite fruit is: bananas<br> The system is shutting down NOW

Render time: ~0 milliseconds

Example Five - Conditional Processing

Null, blanks, empty vars, false, and zeros evaluate to 'false' for the purposes of this formatting language.

Code
This is conditionals_code.asp
Raw Template Processed Template
<h3>Welcome back!</h3>
<p>#IF NEW_MESSAGE_COUNT#
You have ##NEW_MESSAGE_COUNT## new messages.
#ELSE NEW_MESSAGE_COUNT#
No new messages for you!
#ENDIF NEW_MESSAGE_COUNT#</p>

#IF NEW_FRIEND_COUNT#<p>
You have ##NEW_FRIEND_COUNT## new friends.
</p>#ENDIF NEW_FRIEND_COUNT#
<h3>Welcome back!</h3>
<p>
You have 42 new messages.
</p>


Render time: ~0 milliseconds