Advertisement
Aacini

T2H - TextToHtml.bat

Nov 20th, 2013
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Winbatch 46.45 KB | None | 0 0
  1. @echo off
  2. goto checkParam
  3.  
  4. TextToHtml.bat: Convert a text file with special format into a HTML encoded file
  5. Antonio Perez Ayala
  6.  
  7. References:
  8. - http://www.w3.org/MarkUp/Guide/
  9. - http://www.quackit.com/
  10. - http://www.w3schools.com/
  11.  
  12. This program does not include any error detection code, so it may break because erroneous data
  13. or by Batch special characters inserted in certain particular places.
  14.  
  15. Known bugs:
  16. - If an input line is too large and contain many tags, the translated output line may exceed max variable lenght.
  17. - Exclamation-marks can not be used in included file names in Tables and CodeSegments, and they are stripped from data in included Tables.
  18. - If [color="colorValue"], [style="param:value;..."], [br clear="all"] or [hr attrib="value"] tags are included in a paragraph, then *all* "] in that paragraph are changed to ">
  19.  
  20. Future improvements:
  21. - Extract the HTML header to a separate style sheet file and replace it by:  link type="text/css" rel="stylesheet" href="HTMLheader.css"
  22. - Give an include folder in a parameter for included files.
  23. - Give the definition of dropdown menu in include file (like Table and CodeSegment)
  24. - [include] tag to include commonly used segments, like footers.
  25.  
  26.  
  27. :checkParam
  28. if "%~1" neq "" if "%~1" neq "/?" goto checkFile
  29. (
  30. echo Convert a source text file to an equivalent HTML file
  31. echo/
  32. echo TextToHtml.bat "Source text file.txt" [/N] ["param=#"] ...
  33. echo/
  34. echo   /N          Not launch the created HTML file.
  35. echo   "param=#"   Change the value of a limiting parameter; quotes are mandatory.
  36. echo/
  37. echo These are the original values of limiting parameters:
  38. echo/
  39. echo   maxCodeTags=16
  40. echo   maxImgTags=8
  41. echo   maxUrlTags=8
  42. echo   maxSelectTags=4
  43. echo/
  44. echo   maxFilesInImage=20
  45. echo   maxUrlTagsInImage=24
  46. echo   maxUrlTagsInSelect=24
  47. echo   maxColumnsInTable=20
  48. echo/
  49. echo First four values limit tags in one line/paragraph. For example:
  50. echo/
  51. echo   TextToHtml.bat Example.txt "maxImgTags=12" "maxFilesInImage=32"
  52. echo/
  53. echo/
  54. type "Format of the source text file.txt"
  55. echo/
  56. echo The complete documentation is in file:
  57. echo   "Creation of World Wide Web pages.html"
  58. ) | more
  59. goto :EOF
  60.  
  61.  
  62. :changeExclams
  63. set "lineNoExclams="
  64. :nextChar
  65.    set "char=!line:~0,1!"
  66.    if "!not!" equ "!char!" set "char=!"
  67.    set "lineNoExclams=!lineNoExclams!!char!"
  68.    set "line=!line:~1!"
  69. if defined line goto nextChar
  70. exit /B
  71.  
  72.  
  73. :checkFile
  74. if not exist "%~F1" echo File not found: %1 & goto :EOF
  75.  
  76. cd /D "%~DP1"
  77. setlocal DisableDelayedExpansion
  78.  
  79. rem Initialize static variables
  80. set not=!
  81. set quote="
  82. set "equalSigns======="
  83. set "mods6ForCells=/[align/"
  84. set "mods8ForCells=/[bgcolor/[colspan/[rowspan/"
  85. for %%a in (" =none" "1=decimal" "0=decimal-leading-zero"
  86.            "a=lower-alpha" "UA=upper-alpha" "i=lower-roman" "UI=upper-roman"
  87.            "g=lower-greek" "UG=upper-greek" "d=disc" "lc=circle" "s=square" ) do (
  88.   for /F "tokens=1,2 delims==" %%b in (%%a) do (
  89.      set listStyle[%%b]=%%c
  90.   )
  91. )
  92.  
  93. rem Initialize limiting parameters, first four values are in one line/paragraph
  94. set maxCodeTags=16
  95. set maxImgTags=8
  96. set maxUrlTags=8
  97. set maxSelectTags=4
  98. set maxFilesInImage=20
  99. set maxUrlTagsInImage=24
  100. set maxUrlTagsInSelect=24
  101. set maxColumnsInTable=20
  102.  
  103. rem Process parameters
  104. set "thisFile=%~N1"
  105. set "fullFile=%~DPN1"
  106. set "fullFileExt=%~F1"
  107. :nextParam
  108.   shift
  109.   if "%~1" equ "" goto endParams
  110.   if /I "%~1" equ "/N" (
  111.      set noStart=true
  112.   ) else (
  113.      set %1
  114.   )
  115.   goto nextParam
  116. :endParams
  117.  
  118. echo Converting "%thisFile%"
  119. echo/
  120. del JavaCode.tmp 2> NUL
  121.  
  122. rem Create the HTML header
  123. (
  124. echo ^<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"^>
  125. echo ^<!-- This file was created using TextToHtml.bat conversion program written by Antonio Pérez Ayala (aka Aacini^) --^>
  126. echo ^<html^>
  127. echo ^<head^>
  128. echo    ^<title^>%thisFile%^</title^>
  129. echo    ^<style type="text/css"^>
  130. echo    h1 { margin-left: -6%%; }
  131. echo    h2 { margin-left: -3%%; margin-top: 2em; }
  132. echo    body {
  133. echo       margin-left: 10%%;
  134. echo       margin-right: 10%%;
  135. echo       color: black;
  136. echo       background: white;
  137. echo       font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif;
  138. echo    }
  139. echo    code {
  140. echo       color: black;
  141. echo       background:  #CCDDFF;
  142. echo       font-weight: bold;
  143. echo       white-space: pre;
  144. echo       font-family: "Courier New", Monaco, monospace;
  145. echo       font-size: 1.05em;
  146. echo    }
  147. echo    pre {
  148. echo       color: black;
  149. echo       background:  #CCDDFF;
  150. echo       font-weight: bold;
  151. echo       white-space: pre;
  152. echo       font-family: "Courier New", Monaco, monospace;
  153. echo       font-size: 1.05em;
  154. echo       border: none;
  155. echo       padding: 0.3em;
  156. echo       width: 100%%;
  157. echo       overflow: auto;
  158. echo       scrollbar-base-color: #99CCFF;
  159. echo    }
  160. echo    kbd {
  161. echo       font-size: 0.8em;
  162. echo       font-family: Arial, Helvetica, sans-serif;
  163. echo       border: 1px solid #999999;
  164. echo       border-radius: 3px;
  165. echo       padding: 0.1em 0.6em;
  166. echo       margin: 0 0.1em;
  167. echo       display: inline-block;
  168. echo       white-space: nowrap;
  169. echo    }
  170. echo    #horList li {
  171. echo       display: inline;
  172. echo    }
  173. echo    ^</style^>
  174. echo ^</head^>
  175. echo ^<body^>
  176. echo ^<h1^>%thisFile%^</h1^>
  177. ) > "%fullFile%.html"
  178.  
  179. rem Initialize control variables
  180. set TOClevel=1
  181. set TOCheader=Table of Contents
  182. set "codeBlock="
  183. set "tableRow="
  184. set "endOfList="
  185. set "horListPad="
  186. set nameNumber=0
  187.  
  188. rem Process the lines in the source file and create the HTML body
  189. (for /F delims^=^ eol^= %%a in ('findstr /N "^" "%fullFileExt%"') do (
  190.    set "line=%%a"
  191.    call set "lineNoExclams=%%line:!=&#33;%%"
  192.    setlocal EnableDelayedExpansion
  193.    if "!lineNoExclams!" neq "!line!" call :changeExclams
  194.    set "line=!lineNoExclams:*:=!"
  195.    if defined line (
  196.       set "line=!line:<=&lt;!"
  197.       set "line=!line:ÿ=&#255;!"
  198.    )
  199.  
  200.    set "middle="
  201.    if defined codeBlock (
  202.       rem 1- Insert unprocessed lines in the code block
  203.       if "!line!" neq "[/code]" (
  204.          echo(!line!
  205.       ) else (
  206.          if "!codeBlock!" neq "nul" call :TypeFile "!codeBlock!"
  207.          echo ^</pre^>
  208.          set "codeBlock="
  209.       )
  210.    ) else if defined tableRow (
  211.       rem 2- Process rows in the table
  212.       if "!line!" neq "[/table]" (
  213.          call :tableRow
  214.       ) else (
  215.          if "!tableRow:~3!" neq "" (
  216.             for /F "usebackq delims=" %%c in ("!tableRow:~3!") do (
  217.                set "line=%%c"
  218.                set "line=!line:<=&lt;!"
  219.                call :tableRow
  220.             )
  221.          )
  222.          echo    ^</table^>
  223.          set "tableRow="
  224.       )
  225.    ) else if not defined line (
  226.       rem 3- Show empty lines as line breaks
  227.       echo ^<p^>^<br^>
  228.    rem Process tags at start of line
  229.    ) else if "!line:~0,1!" equ "[" (
  230.       rem 4- Start of code block, or Start of table, or Start/Item/End of list
  231.       if "!line:~0,5!" equ "[code" (
  232.          rem 4.1- Start of code block: get modifiers and caption
  233.          if "!line:~5,1!" equ "]" (
  234.             rem Code block with no modifiers: [code]caption
  235.             set "modifiers="
  236.             set "caption=!line:~6!"
  237.          ) else (
  238.             rem Code block with includeFile and/or modifiers: [code:includeFile modifiers]caption
  239.             call :getIncludefileModifiersCaption 5 ":"
  240.             set "codeBlock=!includeFile!"
  241.          )
  242.          if defined caption echo ^<p^>^<b^>^<a name="!caption: =_!"^>!caption!^</a^>^</b^>
  243.          if defined modifiers set modifiers= style="!modifiers!"
  244.          echo ^<pre!modifiers!^>
  245.          if not defined codeBlock (
  246.             set codeBlock=nul
  247.          )
  248.       ) else if "!line:~0,6!" equ "[table" (
  249.          rem 4.2- Start of table: get modifiers and caption
  250.          if "!line:~6,1!" equ "]" (
  251.             rem Table with no modifiers: [table]caption
  252.             for %%v in (modifiers tableHeader tableData tableCol) do set "%%v="
  253.             set "caption=!line:~7!"
  254.          ) else (
  255.             rem Table with includeFile and/or modifiers:
  256.             rem [table=includeFile tableMods;headerMods;dataMods;col|Mods]caption
  257.             call :getIncludefileModifiersCaption 6 "="
  258.             for /F "tokens=1-4 delims=;" %%e in ("!modifiers!") do (
  259.                set "modifiers=%%e" & set "tableHeader=%%f" & set "tableData=%%g" & set "tableCol=%%h"
  260.             )
  261.             for %%v in (modifiers tableHeader tableData) do (
  262.                if defined %%v (
  263.                   if "!%%v!" neq " " (set "%%v= !%%v!") else (set "%%v=")
  264.                )
  265.             )
  266.          )
  267.          echo [table]!caption! > CON
  268.          echo    ^<table!modifiers!^>
  269.          if defined caption echo    ^<caption^>^<b^>^<a name="!caption: =_!"^>!caption!^</a^>^</b^>^</caption^>
  270.          set tableRow=th:!includeFile!
  271.       ) else if "!line:~0,5!" equ "[list" (
  272.          rem 4.3- Start of list: get type (Unordered/Ordered/Definition-horizontal) and caption
  273.          if "!line:~5,1!" equ "]" (
  274.             rem Unordered list: [list]caption
  275.             set "list=<ul>"
  276.             set "caption=!line:~6!"
  277.             set "endOfList=!endOfList!</ul>"
  278.          ) else (
  279.             rem Ordered/Definition-horizontal list: [list=t]caption
  280.             set "type=!line:~6,1!"
  281.             for %%t in (A I G) do if "!type!" equ "%%t" set "type=U%%t"
  282.             if "!type!" equ "c" set type=lc
  283.             for /F "delims=" %%t in ("!type!") do set "style=!listStyle[%%t]!"
  284.             if defined style (
  285.                rem Ordered list
  286.                set list=^<ol style="list-style-type: !style!"^>
  287.                set "caption=!line:~8!"
  288.                set "endOfList=!endOfList!</ol>"
  289.             ) else if /I "!type!" equ "H" (
  290.                rem Definition list: [list=H]caption
  291.                set "list=<dl>"
  292.                set "caption=!line:~8!"
  293.                set "endOfList=!endOfList!</dl>"
  294.             ) else (
  295.                rem Horizontal list: [list=C:pad]caption or [list=LR:pad:margin]caption or [list=B:pad:Lmargin:Rmargin]caption
  296.                set "list=<ul"
  297.                for /F "tokens=2* delims==]" %%c in ("!line!") do for /F "tokens=2* delims=:" %%e in ("%%c") do (
  298.                   set "caption=%%d" & set "padding=%%e" & set "margin=%%f"
  299.                )
  300.                if not defined padding set padding=0
  301.                set typeCorLorB=true
  302.                if "!type!" neq "C" if "!type!" neq "L" if "!type!" neq "B" set "typeCorLorB="
  303.                if defined typeCorLorB (
  304.                   set horListPad=padding-right:!padding!em;
  305.                   if "!type!" equ "C" (
  306.                      set style=text-align:center;
  307.                   ) else (
  308.                      set style=float:left;
  309.                      if defined margin for /F "tokens=1,2 delims=:" %%c in ("!margin!") do (
  310.                         set style=!style! margin-left:%%cem;
  311.                         set horListPad=!horListPad!:%%d
  312.                      )
  313.                   )
  314.                   set list=!list! id="horList" style="!style!"
  315.                ) else if /I "!type!" equ "R" (
  316.                   set horListPad=padding-left:!padding!em;
  317.                   set style=float:right;
  318.                   if defined margin set style=!style! margin-right:!margin!em;
  319.                   set list=!list! id="horList" style="!style!"
  320.                )
  321.                set "list=!list!>"
  322.                set "endOfList=!endOfList!</ul>"
  323.             )
  324.          )
  325.          if not defined horListPad (
  326.             echo    !list!
  327.             if defined caption echo    ^<b^>^<a name="!caption: =_!"^>!caption!^</a^>^</b^>
  328.          ) else (
  329.             if defined caption echo    ^<b^>^<a name="!caption: =_!"^>!caption!^</a^>^</b^>
  330.             echo    !list!
  331.          )
  332.       ) else if "!line:~0,3!" equ "[*]" (
  333.          rem 4.4- List item
  334.          if defined endOfList (
  335.             set "item=!line:~3!"
  336.             call :ProcessCodeSegments item
  337.             if "!endOfList:~-5!" equ "</dl>" (
  338.                echo       ^<dt^>!item!^<dd^>
  339.             ) else if not defined horListPad (
  340.                echo       ^<li^>!item!
  341.             ) else for /F "tokens=1-3 delims=:" %%c in ("!horListPad!") do (
  342.                if defined item (
  343.                   echo       ^<li style="%%c:%%d"^>!item!
  344.                ) else (
  345.                   echo    ^</ul^>
  346.                   set horListPad=!horListPad:right=left!
  347.                   set style=float:right;
  348.                   if "%%e" neq "" set style=!style! margin-right:%%eem;
  349.                   echo    ^<ul id="horList" style="!style!"^>
  350.                )
  351.             )
  352.          ) else (
  353.             rem No open list: continue checking the line
  354.             set "middle=!line!"
  355.          )
  356.       ) else if "!line!" equ "[/list]" (
  357.          rem 4.5- End of list
  358.          if defined endOfList (
  359.             echo    !endOfList:~-5!
  360.             set "endOfList=!endOfList:~0,-5!"
  361.             if defined horListPad echo ^<br clear="all"^>& set "horListPad="
  362.          ) else (
  363.             rem No open list: continue checking the line
  364.             set "middle=!line!"
  365.          )
  366.       ) else (
  367.          rem 4.6- The tag at start of line is no code, table or list: continue checking the line
  368.          set "middle=!line!"
  369.       )
  370.    ) else if "!line:~0,1!" equ "=" (
  371.       rem 5- Start of section (subdivision)
  372.       echo !line! > CON
  373.       set "break="
  374.       for /L %%i in (6,-1,2) do if not defined break (
  375.          if "!line:~0,%%i!" equ "!equalSigns:~0,%%i!" (
  376.             for /F "tokens=1,2 delims=|" %%c in ("!line!") do (
  377.                set "section=%%c" & set "title=%%d"
  378.             )
  379.             rem Check for colon before Title/Comment (:comment on section)
  380.             set "secComment="
  381.             if "!title:~0,1!" equ ":" (
  382.                set "title=!title:~1!"
  383.                set "secComment=!title!"
  384.             )
  385.             rem Differentiate ==Section==^|Title from ==Section^|Comment==
  386.             set "comment="
  387.             if defined title if "!title:~-1!" equ "=" (
  388.                set "comment=!title:~0,-%%i!"
  389.                if defined secComment set "secComment=!comment!"
  390.                set "title="
  391.                set "section=!section!!equalSigns:~0,%%i!"
  392.             )
  393.             set "section=!section:~%%i,-%%i!"
  394.             rem Check for sublink:section
  395.             set "sublink="
  396.             for /F "tokens=1* delims=:" %%c in ("!section!") do (
  397.                if "%%d" neq "" (
  398.                   set "sublink=%%c"
  399.                   set "section=%%d"
  400.                )
  401.             )
  402.             rem If this is a level-2 section
  403.             if %%i equ 2 (
  404.                rem If this is the first level 2 section
  405.                if !TOClevel! equ 1 (
  406.                   rem Insert the "TOCheader" before it
  407.                   echo ^<h4^>^<a name="!TOCheader: =_!"^>!TOCheader!^</a^>^</h4^>>&2
  408.                ) else (
  409.                   rem Insert a "Top" link before level 2 sections
  410.                   echo ^<br^>^<a href="#"^>^<span style="float:right; font-size:small;"^>Top^</span^>^</a^>
  411.                )
  412.             )
  413.             rem Create the Table of Contents below the HTML header
  414.             set /A adjust=%%i-TOClevel
  415.             ( rem Start of redirected block
  416.             for /L %%l in (1,1,!adjust!) do echo ^<ol^>
  417.             for /L %%l in (!adjust!,1,-1) do echo ^</ol^>
  418.             ) >&2
  419.             if defined title set title= title="!title!"
  420.             if not defined sublink (
  421.                rem Insert TOC entry with link to subdivision named "section"
  422.                echo ^<li^>^<a href="#!section: =_!"!title!^>!section!^</a^> !comment!>&2
  423.                rem Insert target subdivision named "section"
  424.                echo ^<h%%i^>^<a name="!section: =_!"^>!section!^</a^> !secComment!^</h%%i^>
  425.             ) else (
  426.                rem Insert TOC entry with link to subdivision named "sublink"
  427.                echo ^<li^>^<a href="#!sublink!"!title!^>!section!^</a^> !comment!>&2
  428.                rem Insert target subdivision named "sublink" with link to "section"
  429.                echo ^<h%%i^>^<a name="!sublink!" href="#!section: =_!"^>!section!^</a^> !secComment!^</h%%i^>
  430.             )
  431.             set TOClevel=%%i
  432.             set break=on
  433.          )
  434.       )
  435.       if not defined break (
  436.          if "!line!" neq "=" (
  437.             rem =Table of Contents header=
  438.             set "TOCheader=!line:~1,-1!"
  439.          ) else (
  440.             rem =   (end of last subdivision, start of footer)
  441.             if !TOClevel! gtr 1 (
  442.                rem Insert the last "Top" link
  443.                echo ^<br^>^<a href="#"^>^<span style="float:right; font-size:small;"^>Top^</span^>^</a^>^<br^>
  444.                rem Close the Table of Contents
  445.                for /L %%i in (!TOClevel!,-1,2) do echo ^</ol^>>&2
  446.             )
  447.            set TOClevel=0
  448.          )
  449.       )
  450.    ) else (
  451.       rem 6- No tag at start of line: continue checking the line
  452.       set "middle=!line!"
  453.    )
  454.  
  455.    rem 7- Process the middle of the line for code segments in-line
  456.    if defined middle (
  457.       call :ProcessCodeSegments middle
  458.       rem Write the converted line as new paragraph
  459.       if "!endOfList:~-5!" equ "</dl>" (
  460.          rem ... excepting into definition lists
  461.          echo !middle!
  462.       ) else if !TOClevel! equ 1 (
  463.          rem Write initial paragraph(s) *before* the Table of Contents
  464.          echo ^<p^>!middle!>&2
  465.       ) else (
  466.          echo ^<p^>!middle!
  467.       )
  468.    )
  469.  
  470.    rem Preserve variables for next line
  471.    for %%c in ("endlocal" "TOClevel=!TOClevel!"       "TOCheader=!TOCheader!"   "codeBlock=!codeBlock!"
  472.                           "endOfList=!endOfList!"     "horListPad=!horListPad!"
  473.                           "tableHeader=!tableHeader!" "tableData=!tableData!"   "tableRow=!tableRow!" "tableCol=!tableCol!"
  474.                           "nameNumber=!nameNumber!"   "javaCode=!javaCode!") do (
  475.       if %%c equ "endlocal" (endlocal) else set %%c
  476.    )
  477.  
  478. )) > HTMLbody.tmp 2>> "%fullFile%.html"
  479.  
  480. rem Close the Table of Contents
  481. for /L %%i in (%TOClevel%,-1,2) do echo ^</ol^>>> "%fullFile%.html"
  482.  
  483. rem Insert the HTML body, the Java code and the HTML tail below the Table of Contents
  484. (
  485.    type HTMLbody.tmp
  486.    del  HTMLbody.tmp
  487.    if exist JavaCode.tmp (
  488.       echo ^<script language="javascript"^>
  489.       echo ^<!--
  490.       type JavaCode.tmp
  491.       del  JavaCode.tmp
  492.       echo --^>
  493.       echo ^</script^>
  494.    )
  495.    echo ^</body^>
  496.    echo ^</html^>
  497. ) >> "%fullFile%.html"
  498.  
  499. echo/
  500. echo "%thisFile%.html" file created
  501. if not defined noStart start "" "%fullFile%.html"
  502. goto :EOF
  503.  
  504.  
  505. rem Type a file converting "<" characters to "&lt;"
  506.  
  507. :TypeFile filename
  508. setlocal DisableDelayedExpansion
  509. for /F delims^=^ eol^= %%c in ('findstr /N "^" %1') do (
  510.    set "line=%%c"
  511.    setlocal EnableDelayedExpansion
  512.    set "line=!line:*:=!"
  513.    if defined line set "line=!line:<=&lt;!"
  514.    echo(!line!
  515.    endlocal
  516. )
  517. endlocal
  518. exit /B
  519.  
  520.  
  521. rem Extract parts of [tag:includeFile modifiers]caption for [code:] and [table=] tags
  522. rem First param is position of first separator: 5 or 6, second param is first separator: ":" or "="
  523.  
  524. :getIncludefileModifiersCaption firstSepPos firstSepChar
  525. set /A sepPos=%1, sepPosP1=sepPos+1, sepPosP2=sepPos+2
  526. if "!line:~%sepPos%,1!" neq "%~2" (
  527.    rem Tag with no include file: [tag modifiers]caption
  528.    for /F "tokens=1* delims=]" %%c in ("!line:~%sepPosP1%!") do (
  529.       set "modifiers=%%c" & set "caption=%%d"
  530.    )
  531. ) else (
  532.    rem Tag with include file: [tag:includeFile ...
  533.    if "!line:~%sepPosP1%,1!" neq "!quote!" (
  534.       rem Include file with no quotes: [tag:includeFile modifiers]caption
  535.       for /F "tokens=1* delims=]" %%c in ("!line:~%sepPosP1%!") do (
  536.          for /F "tokens=1*" %%e in ("%%c") do set "includeFile=%%e" & set "modifiers=%%f"
  537.          set "caption=%%d"
  538.       )
  539.    ) else (
  540.       rem Include file enclosed in quotes: [tag:"include File" modifiers]caption
  541.       for /F "tokens=1* delims=]" %%c in ("!line:~%sepPosP2%!") do (
  542.          for /F ^tokens^=1*^ delims^=^" %%e in ("%%c") do set "includeFile=%%e" & set "modifiers=%%f"
  543.         set "caption=%%d"
  544.      )
  545.   )
  546. )
  547. exit /B
  548.  
  549.  
  550. rem Assemble a table row: "|header": tr-th-Header1-/th-th-Header2-/th-...-/tr or:
  551. rem                       "data":    tr-td-Data1-/td-td-Data2-/td-...-/tr
  552.  
  553. :tableRow
  554. if "!line:~0,1!" equ "|" (
  555.    rem Header row
  556.    set "line=!line:~1!"
  557. ) else (
  558.    rem Data row
  559.    set tableHeader=!tableData!
  560.    set tableRow=td%tableRow:~2%
  561.    rem Get modifiers for each data column, if any
  562.    if defined tableCol (
  563.       set "tableColDup=!tableCol!"
  564.       for /L %%i in (1,1,%maxColumnsInTable%) do if defined tableColDup (
  565.          for /F "tokens=1* delims=|" %%a in ("!tableColDup!") do (
  566.             if "%%a" neq " " set "tableCol[%%i]= %%a"
  567.             set "tableColDup=%%b"
  568.          )
  569.       )  
  570.    )
  571. )
  572. rem Create the table row
  573. echo       ^<tr!tableHeader!^>
  574. for /L %%i in (1,1,%maxColumnsInTable%) do if defined line (
  575.    for /F "tokens=1* delims=| eol=|" %%a in ("!line!") do (
  576.       set "tableCell="
  577.       set "cell=%%a"
  578.       for /F %%m in ("!cell:~0,6!") do if "!mods6ForCells:/%%m/=!" neq "%mods6ForCells%" (
  579.          for /F "tokens=1* delims=]" %%c in ("!cell:~1!") do set "tableCell= %%c" & set "cell=%%d"
  580.       )
  581.       for /F %%m in ("!cell:~0,8!") do if "!mods8ForCells:/%%m/=!" neq "%mods8ForCells%" (
  582.          for /F "tokens=1* delims=]" %%c in ("!cell:~1!") do set "tableCell= %%c" & set "cell=%%d"
  583.       )
  584.       call :ProcessCodeSegments cell
  585.       set "row=<%tableRow:~0,2%!tableCol[%%i]!!tableCell!>!cell!</%tableRow:~0,2%>"
  586.       echo          !row!
  587.       set "line=%%b"
  588.    )
  589. )
  590. echo       ^</tr^>
  591. exit /B
  592.  
  593.  
  594. rem Process code segments in-line
  595.  
  596. :ProcessCodeSegments middle
  597. setlocal EnableDelayedExpansion
  598. if not defined %1 exit /B
  599. set "last=!%1:[code]=ÿ!"
  600. set "last=!last:[/code]=ÿ!"
  601. set "last=!last:ÿÿ=ÿ ÿ!"
  602. set "middle="
  603. for /L %%i in (1,1,%maxCodeTags%) do if defined last (
  604.    if "!last:~0,1!" equ "ÿ" set "last= !last!"
  605.    for /F "tokens=1,2* delims=ÿ eol=ÿ" %%a in ("!last!") do (
  606.       if "%%a" neq " " (
  607.          rem Process tags at left of this code segment
  608.          set "left=%%a"
  609.          call :ProcessTagsInSegment left
  610.          set "middle=!middle!!left!"
  611.       )
  612.       if "%%b" neq "" (
  613.          rem Insert this code segment
  614.          set "middle=!middle!<code>%%b</code>"
  615.       )
  616.       set "last=%%c"
  617.    )
  618. )
  619. for /F "delims=" %%a in ("!middle!") do endlocal & set "%1=%%a" & set "nameNumber=%nameNumber%" & set "javaCode=%javaCode%"
  620. exit /B
  621.  
  622.  
  623. rem Process tags in segment: text styles, dropdown menus, image links, web site links, color of text, CSS styles and others
  624.  
  625. :ProcessTagsInSegment segment
  626. rem Do NOT use setlocal here; some new variables needs to be returned to the calling code
  627. set "segment=!%1!"
  628.  
  629. rem Nonbreaking space
  630. set "segment=!segment:[nbsp]=&nbsp;!"
  631.  
  632. rem Text styles
  633. for %%a in (b i u s tt big small sub sup q kbd) do (
  634.    set "segment=!segment:[%%a]=<%%a>!"
  635.    set "segment=!segment:[/%%a]=</%%a>!"
  636. )
  637.  
  638.  
  639. rem Dropdown menu, From: [select][url=addr1]Desc1[/url][url=addr2]Desc2[/url][/select]
  640. rem                To:   <select onChange="javaCode"><option value=addr1>Desc1</option>
  641. rem                                                  <option value=addr2>Desc2</option></select>
  642. set "selectSeg=!segment:[select]=ÿ!"
  643. if "!selectSeg!" neq "!segment!" (
  644.    rem Process menu options
  645.    set "selectSeg=!selectSeg:[/select]=ÿ!"
  646.    set "selectSeg=!selectSeg:ÿÿ=ÿ ÿ!"
  647.    set "segment="
  648.    for /L %%I in (1,1,%maxSelectTags%) do if defined selectSeg (
  649.       if "!selectSeg:~0,1!" equ "ÿ" set "selectSeg= !selectSeg!"
  650.       for /F "tokens=1,2* delims=ÿ eol=ÿ" %%a in ("!selectSeg!") do (
  651.          if "%%a" neq " " set "segment=!segment!%%a"
  652.          if "%%b" neq "" (
  653.             set /A nameNumber+=1
  654.             call :IncludeJavaFunction selectFunctions
  655.             set segment=!segment!^<select id="s!nameNumber!" onKeyDown="oKD(!nameNumber!)" onChange="oC(!nameNumber!)"^>
  656.  
  657.             rem Define menu options from nested url tags
  658.             set "optGroupEnd="
  659.             set "selectUrls=%%b"
  660.             set "selectUrls=!selectUrls:[url]=[url=nohref]!"
  661.             set "selectUrls=!selectUrls:[url=ÿ!"
  662.             set "selectUrls=!selectUrls:[/url]=ÿ!"
  663.             set "selectUrls= !selectUrls:ÿÿ=ÿ ÿ!"
  664.  
  665.             for /L %%J in (1,1,%maxUrlTagsInSelect%) do if defined selectUrls (
  666.                for /F "tokens=1,2* delims=ÿ eol=ÿ" %%A in ("!selectUrls!") do (
  667.                   rem From [url="question"?target:siteAddress]group:Description|Title[/url] to appropriate onClick="code" in each case
  668.                   for /F "tokens=1* delims==]" %%D in ("%%B") do for /F "tokens=1* delims=|" %%F in ("%%E") do (
  669.                      set "href=%%D" & set "description=%%F" & set "title=%%G"
  670.                   )
  671.  
  672.                   if defined title set title= title="!title:"=^&#34;!"
  673.                   if /I "!description:~0,6!" equ "group:" (
  674.                      set "segment=!segment!!optGroupEnd!<optgroup label="!description:~6!">"
  675.                      set "optGroupEnd=</optgroup>"
  676.                   ) else (
  677.                      set "href=!href:'=\'!"
  678.                      if "!description:~0,5!" equ "open:" (
  679.                         for /F "tokens=1* delims=:" %%i in ("!description:~5!") do (
  680.                            set "action=OpenCloseMenu(!nameNumber!,%%i)" & set "description=%%j"
  681.                         )
  682.                      ) else if "!href:~0,1!" equ "!quote!" (
  683.                         if "!href:~-1!" equ "!quote!" (
  684.                            set "action=alert('!href:~1,-1!')"
  685.                         ) else (
  686.                            set "href=!href:"?=ÿ!"
  687.                           for /F "tokens=1* delims=ÿ" %%i in ("!href:~1!") do (
  688.                               set "action=confirmAndOpen('%%i','%%j')"
  689.                               call :IncludeJavaFunction confirmAndOpen
  690.                            )
  691.                         )
  692.                      ) else (
  693.                         set "action=openWindow('!href!')"
  694.                         call :IncludeJavaFunction openWindow
  695.                      )
  696.                      set "segment=!segment!<option!title! value="!action!">!description!</option>"
  697.                   )
  698.  
  699.                   set "selectUrls=%%C"
  700.                )
  701.             )
  702.             set "segment=!segment!!optGroupEnd!</select>"
  703.          )
  704.          set "selectSeg=%%c"
  705.       )
  706.    )
  707. )
  708.  
  709.  
  710. rem Link to image: from [img modifiers]imageAddress[/img] to <img modifiers src="imageAddress">
  711. set "imgSeg=!segment:[img=ÿ!"
  712. if "!imgSeg!" neq "!segment!" (
  713.    rem Process links to images
  714.    set "imgSeg=!imgSeg:[/img]=ÿ!"
  715.    set "imgSeg=!imgSeg:ÿÿ=ÿ ÿ!"
  716.    set "segment="
  717.    for /L %%I in (1,1,%maxImgTags%) do if defined imgSeg (
  718.       if "!imgSeg:~0,1!" equ "ÿ" set "imgSeg= !imgSeg!"
  719.       for /F "tokens=1,2* delims=ÿ eol=ÿ" %%a in ("!imgSeg!") do (
  720.          if "%%a" neq " " set "segment=!segment!%%a"
  721.          if "%%b" neq "" (
  722.  
  723.             rem Separate img tag parts
  724.             for /F "tokens=1,2* delims=][" %%d in (" %%b") do (
  725.                set "modifiers=%%d" & set "imgAddr=%%e" & set "imgUrl=%%f"
  726.             )
  727.  
  728.  
  729.             rem Separate the image files given in this img tag
  730.             set fileNum=0
  731.             for /L %%J in (1,1,%maxFilesInImage%) do if defined imgAddr (
  732.                for /F "tokens=1* delims=|" %%d in ("!imgAddr!") do (
  733.                   set "imgAddr[!fileNum!]=%%d" & set /A fileNum+=1 & set "imgAddr=%%e"
  734.                )
  735.             )
  736.  
  737.             rem Initialize this img element
  738.             set /A nameNumber+=1
  739.             set "imgAddr=!imgAddr[0]!"
  740.             set imgCode= name="img!nameNumber!"
  741.  
  742.             if !fileNum! gtr 1 ( rem Process several image files
  743.  
  744.                rem Extract ":start-end+step" delay parts from first and last image files, if any
  745.                set /A lastFile=fileNum-1
  746.                for %%i in (0 !lastFile!) do for /F "tokens=1-3 delims=:" %%d in ("!imgAddr[%%i]!") do (
  747.                   if /I "%%d" neq "http" (
  748.                      set "imgAddr[%%i]=%%d" & set "delay%%i=%%e"
  749.                   ) else (
  750.                      set "imgAddr[%%i]=%%d:%%e" & set "delay%%i=%%f"
  751.                   )
  752.                   set "delayN=!delay%%i!"
  753.                )
  754.                set "imgAddr=!imgAddr[0]!"
  755.                set "randomImg="
  756.                if defined delayN if /I "!delayN:~0,1!" equ "R" set "randomImg=true" & set "delayN=!delayN:~1!"
  757.                for %%i in (0 N) do (
  758.                   if defined delay%%i for /F "tokens=1-3 delims=-+" %%d in ("!delay%%i!") do (
  759.                      set "start%%i=%%d" & set "end%%i=%%e" & set "step%%i=%%f"
  760.                   )
  761.                )
  762.                set "mouseOver="
  763.                if defined startN if /I "!startN:~-1!" equ "M" set "mouseOver=, img!nameNumber!play = false" & set "startN=!startN:~0,-1!"
  764.  
  765.                rem Create the array of image file names in Java code
  766.                (
  767.                echo var img!nameNumber!File = new Array(^), i!nameNumber! = 0!mouseOver!;
  768.                for /L %%i in (0,1,!lastFile!) do echo (img!nameNumber!File[%%i]=new Image^).src = "!imgAddr[%%i]!";
  769.                ) >> JavaCode.tmp
  770.  
  771.                if not defined delayN ( rem Images change as mouse moved over
  772.                   rem From: imgAddr0|imgAddr1|imgAddr2...:R to: onMouseOver=imgAddr1|imgAddr2|...[,R]; onMouseOut=imgAddr0;
  773.  
  774.                   if !fileNum! equ 2 (
  775.                      set imgCode=!imgCode! onMouseOver="document['img!nameNumber!'].src=img!nameNumber!File[i!nameNumber!=1].src"
  776.                   ) else if not defined randomImg (
  777.                      set imgCode=!imgCode! onMouseOver="if(++i!nameNumber!^>!lastFile!)i!nameNumber!=1; document['img!nameNumber!'].src=img!nameNumber!File[i!nameNumber!].src"
  778.                   ) else (
  779.                      set imgCode=!imgCode! onMouseOver="i!nameNumber!=Math.floor(!lastFile!*Math.random()+1); document['img!nameNumber!'].src=img!nameNumber!File[i!nameNumber!].src"
  780.                   )
  781.                   set imgCode=!imgCode! onMouseOut="document['img!nameNumber!'].src=img!nameNumber!File[0].src"
  782.  
  783.                ) else if not defined stepN ( rem Images change as "startM-end" values indicate
  784.                   rem From: imgAddr0|imgAddr1|...|imgAddrN:Rstart-end to cycleimgAddrs()[,start[,range][,R]]
  785.  
  786.                   if defined mouseOver (
  787.                      set imgCode=!imgCode! onMouseOver="img!nameNumber!play = true" onMouseOut="img!nameNumber!play = false"
  788.                      set "mouseOver= && img!nameNumber!play"
  789.                   )
  790.                   ( rem Start of redirected block
  791.                   echo function cycle!nameNumber! (^) {
  792.                   echo    if (document.img!nameNumber!.complete!mouseOver!^) {
  793.                   if not defined randomImg (
  794.                      echo       if (++i!nameNumber! ^> !lastFile!^) i!nameNumber! = 0;
  795.                   ) else (
  796.                      echo       i!nameNumber! = Math.floor(!fileNum!*Math.random(^)^);
  797.                   )
  798.                   echo       document.img!nameNumber!.src = img!nameNumber!File[i!nameNumber!].src;
  799.                   echo    }
  800.                   if not defined endN (
  801.                      echo }
  802.                      echo setInterval("cycle!nameNumber!()",!startN!^);
  803.                   ) else (
  804.                      set /A range=endN-startN
  805.                      echo    setTimeout("cycle!nameNumber!()",!startN!+!range!*Math.random(^)^);
  806.                      echo }
  807.                      echo cycle!nameNumber!(^);
  808.                   )
  809.                   ) >> JavaCode.tmp
  810.  
  811.                ) else ( rem Images change as "start-end+step" indicate in combination with "play:", "fast:" and "slow:" areas
  812.                   rem From: imgAddr0|imgAddr1|...|imgAddrN:Rstart-end+step to cycleimgAddrs()[,R]
  813.                   rem play: {play=!play; cycleimgAddrs()}, fast: delay=min(delay+step,end), slow: delay=max(delay-step,start)
  814.  
  815.                   set /A "middleN=(startN+endN)/2, middle0=(start0+end0)/2"
  816.                   if defined delay0 (
  817.                      set "delay0= "
  818.                      if defined step0 set "delay0=, img!nameNumber!delay0 = !middle0!"
  819.                   )
  820.                   ( rem Start of redirected block
  821.                   echo var img!nameNumber!play = 0, img!nameNumber!delayN = !middleN!!delay0!;
  822.                   echo function cycle!nameNumber! (^) {
  823.                   echo    if (document.img!nameNumber!.complete ^&^& img!nameNumber!play^) {
  824.                   if defined delay0 (
  825.                      echo      if (i!nameNumber!^) {
  826.                      echo        document.img!nameNumber!.src = img!nameNumber!File[i!nameNumber!=0].src;
  827.                      if not defined end0 (
  828.                         echo        setTimeout("cycle!nameNumber!()",!start0!^);
  829.                      ) else if not defined step0 (
  830.                         set /A range=end0-start0
  831.                         echo        setTimeout("cycle!nameNumber!()",!start0!+!range!*Math.random(^)^);
  832.                      ) else (
  833.                         echo        setTimeout("cycle!nameNumber!()",img!nameNumber!delay0^);
  834.                      )
  835.                      echo      } else {
  836.                      if not defined randomImg (
  837.                         echo        if (++i!nameNumber! ^> !lastFile!^) i!nameNumber! = 1;
  838.                      ) else (
  839.                         echo        i!nameNumber! = Math.floor(!lastFile!*Math.random(^)^)+1;
  840.                      )
  841.                   ) else (
  842.                      if not defined randomImg (
  843.                         echo        if (++i!nameNumber! ^> !lastFile!^) i!nameNumber! = 0;
  844.                      ) else (
  845.                         echo        i!nameNumber! = Math.floor(!fileNum!*Math.random(^)^);
  846.                      )
  847.                   )
  848.                   echo        document.img!nameNumber!.src = img!nameNumber!File[i!nameNumber!].src;
  849.                   echo        setTimeout("cycle!nameNumber!()",img!nameNumber!delayN^);
  850.                   if defined delay0 (
  851.                      echo      }
  852.                   )
  853.                   echo    }
  854.                   echo }
  855.                   ) >> JavaCode.tmp
  856.  
  857.                )
  858.             )
  859.  
  860.  
  861.             rem Separate the url's given in this img tag
  862.            if defined imgUrl (
  863.               set "imgUrl=[!imgUrl!"
  864.               set "imgUrl=!imgUrl:[url]=[url=nohref]!"
  865.               set "imgUrl=!imgUrl:][/url]=] [/url]!"
  866.               set "imgUrl=!imgUrl:[url=ÿ!"
  867.               set "imgUrl=!imgUrl:[/url]=ÿ!"
  868.               set "imgUrl= !imgUrl:ÿÿ=ÿ ÿ!"
  869.            )
  870.            set firstUrl=0
  871.            if defined delay0 set firstUrl=1
  872.            set urlNum=!firstUrl!
  873.            for /L %%J in (1,1,%maxUrlTagsInImage%) do if defined imgUrl (
  874.               for /F "tokens=1,2* delims=ÿ eol=ÿ" %%A in ("!imgUrl!") do (
  875.                  set "imgUrl[!urlNum!]=%%B" & set /A urlNum+=1 & set "imgUrl=%%C"
  876.               )
  877.            )
  878.  
  879.  
  880.            rem Process nested url tags as area shapes for imagemap
  881.            rem From: [url=addr1]shape1=x,y...|title1[/url][url=addr2]shape2=a,b...|title2[/url]...
  882.            rem To:   <area href="addr1" shape="shape1" coords="x,y..." title="title1">...
  883.  
  884.            set "imgHref="
  885.            set "imgMap="
  886.            set /A lastUrl=urlNum-1
  887.            for /L %%J in (!firstUrl!,1,!lastUrl!) do (
  888.  
  889.               rem From [url="question"?target:siteAddress]Description|Title[/url] to appropriate action/target:
  890.               rem "message": alert(), "question"?: if confirm(), new: target="_blank", popup: openWindow()
  891.               for /F "tokens=1* delims==]" %%D in ("!imgUrl[%%J]!") do for /F "tokens=1* delims=|" %%F in ("%%E") do (
  892.                  set "href=%%D" & set "description=%%F" & set "title=%%G"
  893.               )
  894.  
  895.               if defined href (
  896.                  set "href=!href:'=\'!"
  897.               ) else (
  898.                  set href=nohref
  899.               )
  900.               if "!href:~0,1!" equ "!quote!" (
  901.                  if "!href:~-1!" equ "!quote!" (
  902.                     set "href=javascript:alert('!href:~1,-1!')"
  903.                   ) else (
  904.                      set "href=!href:"?=ÿ!"
  905.                     for /F "tokens=1* delims=ÿ" %%i in ("!href:~1!") do (
  906.                         set "question=%%i"
  907.                         set "href=javascript:confirmAndOpen('!question:"=\"!','%%j')"
  908.                         call :IncludeJavaFunction confirmAndOpen
  909.                      )
  910.                   )
  911.                ) else if "!href!" neq "nohref" (
  912.                   set "href=javascript:openWindow('!href!')"
  913.                   call :IncludeJavaFunction openWindow
  914.                )
  915.  
  916.                if "!description!" equ " " set "description="
  917.                if not defined description ( rem No image parts: each url match a changing image
  918.                   if not defined imgHref (
  919.                      echo var img!nameNumber!Href = new Array(^);>> JavaCode.tmp
  920.                      set modifiers=!modifiers! onClick="eval(img!nameNumber!Href[i!nameNumber!]^)"
  921.                      set imgHref=true
  922.                   )
  923.                   if "!href!" neq "nohref" echo img!nameNumber!Href[%%J] = "!href:\=\\!";>> JavaCode.tmp
  924.                ) else ( rem Image parts: each url divide the unique image, or match part of a changing image
  925.                   set "control="
  926.                   if "!description:~4,1!" equ ":" set "control=!description:~0,4!" & set "description=!description:~5!"
  927.                   for /F "tokens=1* delims==" %%i in ("!description!") do (
  928.                      set imgMap=!imgMap!^<area shape="%%i" coords="%%j"
  929.                   )
  930.                   if "!fileNum!" equ "1" ( rem This part divide the unique image
  931.                      if "!href!" neq "nohref" set href=href="!href!"
  932.                      set "imgMap=!imgMap! !href!"
  933.                      if defined title (
  934.                         if /I "!title:~0,4!" neq "img:" (
  935.                            set imgMap=!imgMap! title="!title:"=^&#34;!"
  936.                         ) else (
  937.                            set imgMap=!imgMap! onMouseOver="document['img!nameNumber!'].src='!title:~4!'" onMouseOut="document['img!nameNumber!'].src='!imgAddr[0]:'=\'!'"
  938.                         )
  939.                      )
  940.                   ) else ( rem This part match the corresponding image or is an animation control
  941.                      if "!control!" equ "play" (
  942.                         set imgMap=!imgMap! onClick="img!nameNumber!play=-(img!nameNumber!play-1); cycle!nameNumber!();"
  943.                      ) else if "!control!" equ "slow" (
  944.                         set imgMap=!imgMap! onClick="img!nameNumber!delayN=Math.min(img!nameNumber!delayN+!stepN!,!endN!^);
  945.                        if defined step0 set imgMap=!imgMap!img!nameNumber!delay0=Math.min(img!nameNumber!delay0+!step0!,!end0!^);
  946.                        set imgMap=!imgMap!"
  947.                      ) else if "!control!" equ "fast" (
  948.                         set imgMap=!imgMap! onClick="img!nameNumber!delayN=Math.max(img!nameNumber!delayN-!stepN!,!startN!^);
  949.                        if defined step0 set imgMap=!imgMap!img!nameNumber!delay0=Math.max(img!nameNumber!delay0-!step0!,!start0!^);
  950.                        set imgMap=!imgMap!"
  951.                      ) else (
  952.                         set imgMap=!imgMap! onClick="if (i!nameNumber!==%%J) !href:\=\\!"
  953.                      )
  954.                   )
  955.                   set imgMap=!imgMap!^>
  956.                )
  957.             )
  958.  
  959.             if defined imgMap (
  960.                set /A nameNumber+=1
  961.                set segment=!segment!^<map name="map!nameNumber!"^>!imgMap!^</map^>
  962.                set modifiers=!modifiers! usemap="#map!nameNumber!"
  963.             )
  964.  
  965.             set segment=!segment!^<img!modifiers:~1! src="!imgAddr!"!imgCode!^>
  966.          )
  967.  
  968.          set "imgSeg=%%c"
  969.       )
  970.    )
  971. )
  972.  
  973.  
  974. rem Link to site, From: [url=siteAddress]description|title[/url]
  975. rem               To:   <a href="siteAddress" title="title">description</a>
  976. set "urlSeg=!segment:[url=ÿ!"
  977. if "!urlSeg!" neq "!segment!" (
  978.    rem Process links to sites
  979.    set "urlSeg=!urlSeg:[/url]=ÿ!"
  980.    set "urlSeg=!urlSeg:ÿÿ=ÿ ÿ!"
  981.    set "segment="
  982.    for /L %%i in (1,1,%maxUrlTags%) do if defined urlSeg (
  983.       if "!urlSeg:~0,1!" equ "ÿ" set "urlSeg= !urlSeg!"
  984.       for /F "tokens=1,2* delims=ÿ eol=ÿ" %%a in ("!urlSeg!") do (
  985.          if "%%a" neq " " set "segment=!segment!%%a"
  986.          if "%%b" neq "" (
  987.             for /F "tokens=1* delims==]" %%d in ("%%b") do for /F "tokens=1* delims=|" %%f in ("%%e") do (
  988.                set "href=%%d" & set "description=%%f" & set "title=%%g"
  989.             )
  990.  
  991.             if defined title set title= title="!title:"=^&#34;!"
  992.             if /I "!description:~0,7!" neq "button:" (
  993.                rem From [url="question"?target:siteAddress]plain:description to appropriate action/target:
  994.                rem "message": alert(), "question"?: if confirm(), new: target="_blank", popup: openWindow()
  995.                if "!href:~0,1!" equ "!quote!" (
  996.                   set "href=!href:'=\'!"
  997.                   if "!href:~-1!" equ "!quote!" (
  998.                      set "href=javascript:alert('!href:~1,-1!');"
  999.                   ) else (
  1000.                      set "href=!href:"?=ÿ!"
  1001.                     for /F "tokens=1* delims=ÿ" %%i in ("!href:~1!") do (
  1002.                         set "question=%%i"
  1003.                         set "href=javascript:confirmAndOpen('!question:"=\"!','%%j');"
  1004.                         call :IncludeJavaFunction confirmAndOpen
  1005.                      )
  1006.                   )
  1007.                   set "target="
  1008.                ) else if "!href:~0,4!" equ "new:" (
  1009.                   set "href=!href:~4!"
  1010.                   set target= target="_blank"
  1011.                ) else if "!href:~0,6!" equ "popup:" (
  1012.                   set target= onClick="openWindow('!href:'=\'!');return false;"
  1013.                   set "href=!href:~6!"
  1014.                   call :IncludeJavaFunction openWindow
  1015.                )
  1016.                set "plain="
  1017.                if /I "!description:~0,6!" equ "plain:" (
  1018.                   set plain= style="text-decoration:none"
  1019.                   set "description=!description:~6!"
  1020.                )
  1021.                set "segment=!segment!<a href="!href!"!target!!title!!plain!>!description!</a>"
  1022.             ) else (
  1023.                rem From [url="question"?target:siteAddress]button:Description to appropriate onClick="code" in each case
  1024.                set "href=!href:'=\'!"
  1025.                if "!href:~0,1!" equ "!quote!" (
  1026.                   if "!href:~-1!" equ "!quote!" (
  1027.                      set "onClick=alert('!href:~1,-1!')"
  1028.                   ) else (
  1029.                      set "href=!href:"?=ÿ!"
  1030.                     for /F "tokens=1* delims=ÿ" %%i in ("!href:~1!") do (
  1031.                         set "question=%%i"
  1032.                         set "onClick=confirmAndOpen('!question:"=\"!','%%j');return false;"
  1033.                         call :IncludeJavaFunction confirmAndOpen
  1034.                      )
  1035.                   )
  1036.                ) else (
  1037.                   set "onClick=openWindow('!href!');return false;"
  1038.                   call :IncludeJavaFunction openWindow
  1039.                )
  1040.                set "segment=!segment!<button type="button" onClick="!onClick!"!title!>!description:~7!</button>"
  1041.             )
  1042.          )
  1043.  
  1044.          set "urlSeg=%%c"
  1045.       )
  1046.    )
  1047. )
  1048.  
  1049.  
  1050. rem Color of text: from [color="colorValue" ...]text[/color] to <font color="colorValue" ...>text</font>
  1051. set "colorSeg=!segment:[/color]=</font>!"
  1052. if "!colorSeg!" neq "!segment!" (
  1053.    set "segment=!colorSeg:[color=<font color!"
  1054.    set "segment=!segment:"]=">!"
  1055. )
  1056.  
  1057. rem CSS style: from [style="param:value; ..."]text[/style] to <span style="param:value; ...">text</span>
  1058. set "styleSeg=!segment:[/style]=</span>!"
  1059. if "!styleSeg!" neq "!segment!" (
  1060.    set "segment=!styleSeg:[style=<span style!"
  1061.    set "segment=!segment:"]=">!"
  1062. )
  1063.  
  1064. rem Hypertext name: from [name="The_name"]text[/name] to <a name="The_name">text</a>
  1065. set "nameSeg=!segment:[/name]=</a>!"
  1066. if "!nameSeg!" neq "!segment!" (
  1067.    set "segment=!nameSeg:[name=<a name!"
  1068.    set "segment=!segment:"]=">!"
  1069. )
  1070.  
  1071. rem Line break (clear="value")
  1072. set "segment=!segment:[br]=<br>!"
  1073. if "!segment:[br clear=!" neq "!segment!" (
  1074.    set "segment=!segment:[br clear=<br clear!"
  1075.    set "segment=!segment:"]=">!"
  1076. )
  1077.  
  1078. rem Horizontal rule (with modifiers)
  1079. set "segment=!segment:[hr]=<hr>!"
  1080. if "!segment:[hr =!" neq "!segment!" (
  1081.    set "segment=!segment:[hr =<hr !"
  1082.    set "segment=!segment:"]=">!"
  1083. )
  1084.  
  1085. set "%1=!segment!"
  1086. exit /B
  1087.  
  1088.  
  1089. rem Include Java functions in JavaCode.tmp file (just once)
  1090.  
  1091. :IncludeJavaFunction funcName
  1092.  
  1093. if defined javaCode if "!javaCode:%1=!" neq "!javaCode!" exit /B
  1094. goto %1
  1095.  
  1096. :confirmAndOpen
  1097. (
  1098. echo function confirmAndOpen(question,url^) {
  1099. echo    if (confirm(question^)^) openWindow(url^);
  1100. echo }
  1101. ) >> JavaCode.tmp
  1102. set javaCode=!javaCode!,confirmAndOpen
  1103. if "!javaCode:openWindow=!" neq "!javaCode!" exit /B
  1104.  
  1105. :openWindow
  1106. (
  1107. echo function openWindow(url^) {
  1108. echo    if ( url.substr(0,4^) == "new:" ^) {
  1109. echo       window.open(url.substr(4^),'_blank'^);
  1110. echo    } else if (url.substr(0,6^) == "popup:" ^) {
  1111. echo       if (screen.width^) { w = screen.width*3/4; l = screen.width/8; } else { w = 500; l = 100; }
  1112. echo       if (screen.height^) { h = screen.height*3/4; t = screen.height/16; } else { h = 300; t = 50; }
  1113. echo       specs = "width="+w+",height="+h+",left="+l+",top="+t+",scrollbars=yes,resizable";
  1114. echo       window.open(url.substr(6^),"_blank",specs^);
  1115. echo    } else if (url !not!= "nohref"^) {
  1116. echo       window.open(url,'_self'^);  // document.location.href=url;
  1117. echo    }
  1118. echo }
  1119. ) >> JavaCode.tmp
  1120. set javaCode=!javaCode!,openWindow
  1121. exit /B
  1122.  
  1123.  
  1124. :selectFunctions
  1125. (
  1126. echo function oKD ( selNumber ^) {  // onKeyDown
  1127. echo    select = document.getElementById("s" + selNumber^);
  1128. echo    if (event.keyCode == 13^) {
  1129. echo       select.disabled = true;
  1130. echo       select.disabled = false;
  1131. echo       eval(select.options[select.selectedIndex].value^);
  1132. echo    } else if (event.keyCode == 27^) {
  1133. echo       select.disabled = true;
  1134. echo       select.disabled = false;
  1135. echo       select.size = 1;
  1136. echo    }
  1137. echo }
  1138.  
  1139. echo function oC ( selNumber ^) {  // onChange
  1140. echo    select = document.getElementById("s" + selNumber^);
  1141. echo    eval(select.options[select.selectedIndex].value^);
  1142. echo }
  1143.  
  1144. echo function OpenCloseMenu ( selNumber, selSize ^) {
  1145. echo    select = document.getElementById("s" + selNumber^);
  1146. echo    select.size = (select.size==1^)?selSize:1;
  1147. echo }
  1148. ) >> JavaCode.tmp
  1149.  
  1150. set javaCode=!javaCode!,selectFunctions
  1151. exit /B
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement