Public Function format_story(ByVal stringin As String) As String
' As I find my stories on more and more story sites,
' I'm sick of story sites' auto-formatting software
' mucking up my stories! So I've written an
' auto-formatting routine in VB and am giving it
' away for free. Bear in mind that this is
' VB for Visual Studio .NET rather than VB 6.
' What it does: Pass it a string in plain ASCII text
' and it returns a string with HTML codes for
' paragraph spacing, bold, and italics. Also, HTML
' tags (any text enclosed by <>) are stripped out.
' What it doesn't do: It doesn' support fancy
' text-based formatting commands such as {green} or
' {bold}.
' How it works: It scans the input string, character by
' character...
' - When it finds a newline character, it inserts TWO
' HTML line break codes for double spacing followed
' by a string of four non-breaking spaces, tnen skips
' the subsequent input text until it comes to the
' next alphanumeric character (i.e. it skips following
' newline characters and spaces). This way, all
' stories wil be double-spaced and indented between
' paragraphs regardless whether the author single- or
' double-spaces his paragraphs or indents them.
' - When it finds a "<" character, it skips over the
' subsequent text until it comes to a ">" character;
' thus preventing authors from embedding HTML in their
' stories.
' - When it finds a "_" character, it inserts an HTML
' tag to turn italics on if italics is off, or to
' turn italics off if italics is on.
' - When it finds a "*" character, it inserts an HTML
' tag to turn bold on if bold is off, or to
' turn bold off if bold is on.
' This code is copyright (c) 2003 Hungry Guy, but I give
' permission for operators of free story sites to use
' it as-is, or with your own improvements, in order to
' improve the quality of your auto-formatting functions.
' If you want minor tweaks or changes, feel free to ask
' and I'll see what I can do in my spare time. But if
' you want major revisions to the code, you'll need
' to hire me as a full-time software engineer.
Dim str1 As String
Dim ix1 As Integer
Dim str2 As String
Dim str3_br As String
Dim len3 As Integer
Dim chr1 As Char
Dim ital As Boolean
Dim bold As Boolean
ital = False
bold = False
ix1 = 1
str1 = stringin + " "
str2 = " "
str3_br = "<BR><BR> "
len3 = str3_br.Length - 2
While (ix1 < str1.Length)
chr1 = Mid(str1, ix1, 1)
If (chr1 < " ") Then
str2 = Mid(str1, 1, ix1 - 1) + str3_br
While (Mid(str1, ix1, 1) <= " ") And (ix1 < str1.Length)
ix1 = ix1 + 1
End While
str1 = str2 + Mid(str1, ix1, str1.Length)
ix1 = ix1 + len3
ElseIf (chr1 = "<") Then
str2 = Mid(str1, 1, ix1 - 1)
ix1 = ix1 + 1
While (Mid(str1, ix1, 1) <> ">") And (ix1 < str1.Length)
ix1 = ix1 + 1
End While
ix1 = ix1 + 1
str1 = str2 + Mid(str1, ix1, str1.Length)
ElseIf (chr1 = "_") Then
If (ital) Then
str2 = Mid(str1, 1, ix1 - 1) + "</I>"
ital = False
Else
str2 = Mid(str1, 1, ix1 - 1) + "<I>"
ital = True
End If
ix1 = ix1 + 1
str1 = str2 + Mid(str1, ix1, str1.Length)
ElseIf (chr1 = "*") Then
If (bold) Then
str2 = Mid(str1, 1, ix1 - 1) + "</B>"
bold = False
Else
str2 = Mid(str1, 1, ix1 - 1) + "<B>"
bold = True
End If
ix1 = ix1 + 1
str1 = str2 + Mid(str1, ix1, str1.Length)
End If
ix1 = ix1 + 1
End While
If (ital) Then
str1 = str1 + "</I>"
ital = False
End If
If (bold) Then
str1 = str1 + "</B>"
bold = False
End If
str1 = "<BR> " + str1
Return (str1)
End Function