[0001]
[0002]
[0003]
[0004]
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
[0037]
[0038]
[0039]
[0040]
[0041]
[0042]
[0043]
[0044]
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065]
[0066]
[0067]
[0068]
[0069]
[0070]
[0071]
[0072]
[0073]
[0074]
[0075]
[0076]
[0077]
[0078]
[0079]
[0080]
[0081]
[0082]
[0083]
[0084]
[0085]
[0086]
[0087]
[0088]
[0089]
[0090]
[0091]
[0092]
[0093]
[0094]
[0095]
[0096]
[0097]
[0098]
[0099]
[0100]
[0101]
[0102]
[0103]
[0104]
[0105]
[0106]
[0107]
[0108]
[0109]
[0110]
[0111]
[0112]
[0113]
[0114]
[0115]
[0116]
[0117]
[0118]
[0119]
[0120]
[0121]
[0122]
[0123]
[0124]
[0125]
[0126]
[0127]
[0128]
[0129]
[0130]
[0131]
[0132]
[0133]
[0134]
[0135]
[0136]
[0137]
[0138]
[0139]
[0140]
[0141]
[0142]
[0143]
[0144]
[0145]
[0146]
[0147]
[0148]
[0149]
[0150]
[0151]
[0152]
[0153]
[0154]
[0155]
[0156]
[0157]
[0158]
[0159]
[0160]
[0161]
[0162]
[0163]
[0164]
[0165]
[0166]
[0167]
[0168]
[0169]
[0170]
[0171]
[0172]
[0173]
[0174]
[0175]
[0176]
[0177]
[0178]
[0179]
[0180]
[0181]
[0182]
[0183]
[0184]
[0185]
[0186]
[0187]
[0188]
[0189]
[0190]
[0191]
[0192]
[0193]
[0194]
[0195]
[0196]
[0197]
[0198]
[0199]
[0200]
[0201]
[0202]
[0203]
[0204]
[0205]
[0206]
[0207]
[0208]
[0209]
[0210]
[0211]
[0212]
[0213]
[0214]
[0215]
[0216]
[0217]
[0218]
[0219]
[0220]
[0221]
[0222]
[0223]
[0224]
[0225]
[0226]
[0227]
[0228]
[0229]
[0230]
[0231]
[0232]
[0233]
[0234]
[0235]
[0236]
[0237]
[0238]
[0239]
[0240]
[0241]
[0242]
[0243]
[0244]
[0245]
[0246]
[0247]
[0248]
[0249]
[0250]
[0251]
[0252]
[0253]
[0254]
[0255]
[0256]
[0257]
[0258]
[0259]
[0260]
[0261]
[0262]
[0263]
[0264]
[0265]
[0266]
[0267]
[0268]
[0269]
[0270]
[0271]
[0272]
[0273]
[0274]
[0275]
[0276]
[0277]
[0278]
[0279]
[0280]
[0281]
[0282]
[0283]
[0284]
[0285]
[0286]
[0287]
[0288]
[0289]
[0290]
[0291]
[0292]
[0293]
[0294]
[0295]
[0296]
[0297]
[0298]
[0299]
[0300]
[0301]
[0302]
[0303]
[0304]
[0305]
[0306]
[0307]
[0308]
[0309]
[0310]
[0311]
[0312]
[0313]
[0314]
[0315]
[0316]
[0317]
[0318]
[0319]
[0320]
[0321]
[0322]
[0323]
[0324]
[0325]
[0326]
[0327]
[0328]
[0329]
[0330]
[0331]
[0332]
[0333]
[0334]
[0335]
[0336]
[0337]
[0338]
[0339]
[0340]
[0341]
[0342]
[0343]
[0344]
[0345]
[0346]
[0347]
[0348]
[0349]
[0350]
[0351]
[0352]
[0353]
[0354]
[0355]
[0356]
[0357]
[0358]
[0359]
[0360]
[0361]
[0362]
[0363]
[0364]
[0365]
[0366]
[0367]
[0368]
[0369]
[0370]
[0371]
[0372]
[0373]
[0374]
[0375]
[0376]
[0377]
[0378]
[0379]
[0380]
[0381]
[0382]
[0383]
[0384]
[0385]
[0386]
[0387]
[0388]
[0389]
[0390]
[0391]
[0392]
[0393]
[0394]
[0395]
[0396]
[0397]
[0398]
[0399]
[0400]
[0401]
[0402]
[0403]
[0404]
[0405]
[0406]
[0407]
[0408]
[0409]
[0410]
[0411]
[0412]
[0413]
[0414]
[0415]
[0416]
[0417]
[0418]
[0419]
[0420]
[0421]
[0422]
[0423]
[0424]
[0425]
[0426]
[0427]
[0428]
[0429]
[0430]
[0431]
[0432]
[0433]
[0434]
[0435]
[0436]
[0437]
[0438]
[0439]
[0440]
[0441]
[0442]
[0443]
[0444]
[0445]
[0446]
[0447]
[0448]
[0449]
[0450]
[0451]
[0452]
[0453]
[0454]
[0455]
[0456]
[0457]
[0458]
[0459]
[0460]
[0461]
[0462]
[0463]
[0464]
[0465]
[0466]
[0467]
[0468]
[0469]
[0470]
[0471]
[0472]
[0473]
[0474]
[0475]
[0476]
[0477]
[0478]
[0479]
[0480]
[0481]
[0482]
[0483]
[0484]
[0485]
[0486]
[0487]
[0488]
[0489]
[0490]
[0491]
[0492]
[0493]
[0494]
[0495]
[0496]
[0497]
[0498]
[0499]
[0500]
[0501]
[0502]
[0503]
[0504]
[0505]
[0506]
[0507]
[0508]
[0509]
[0510]
[0511]
[0512]
[0513]
[0514]
[0515]
[0516]
[0517]
[0518]
[0519]
[0520]
[0521]
[0522]
[0523]
[0524]
[0525]
[0526]
[0527]
[0528]
[0529]
[0530]
[0531]
[0532]
[0533]
[0534]
[0535]
[0536]
[0537]
[0538]
[0539]
[0540]
[0541]
[0542]
[0543]
[0544]
[0545]
[0546]
[0547]
[0548]
[0549]
[0550]
[0551]
[0552]
[0553]
[0554]
[0555]
[0556]
[0557]
[0558]
[0559]
[0560]
[0561]
[0562]
[0563]
[0564]
[0565]
[0566]
[0567]
[0568]
[0569]
[0570]
[0571]
[0572]
[0573]
[0574]
[0575]
[0576]
[0577]
[0578]
[0579]
[0580]
[0581]
[0582]
[0583]
[0584]
[0585]
[0586]
[0587]
[0588]
[0589]
[0590]
[0591]
[0592]
[0593]
[0594]
[0595]
[0596]
[0597]
[0598]
[0599]
[0600]
[0601]
[0602]
[0603]
[0604]
[0605]
[0606]
[0607]
[0608]
[0609]
[0610]
[0611]
[0612]
[0613]
[0614]
[0615]
[0616]
[0617]
[0618]
[0619]
[0620]
[0621]
[0622]
[0623]
[0624]
[0625]
[0626]
[0627]
[0628]
[0629]
[0630]
[0631]
[0632]
[0633]
[0634]
[0635]
[0636]
[0637]
[0638]
[0639]
[0640]
[0641]
[0642]
[0643]
[0644]
[0645]
[0646]
[0647]
[0648]
[0649]
[0650]
[0651]
[0652]
[0653]
[0654]
<!DOCTYPE html>
<!-- WASDOC AXP-2.0.0 (CGILIB AXP-2.0.1) -->
<!-- wasDOC Copyright (C) 2019,2020 Mark G.Daniel - Apache-2.0 licenced -->
<!-- 11-JUL-2020 09:12 -->
<noscript>NOTE: SOME FUNCTIONALITY EMPLOYS JAVASCRIPT</noscript>
<div id="erreport1" style="display:none;"></div>
<script>
function errorReport(string) {
   for (var cnt = 1; cnt <= 2; cnt++) {
      var err = document.getElementById('erreport'+cnt);
      err.style.display = 'block';
      err.innerHTML += string;
   }
}
</script>
<style type="text/css">
html { font-family: arial, verdana, sans-serif; font-size:12pt; margin:1em; }
h1 { font-size:124%; font-style:bold;
     margin-top:1em; margin-bottom:0.5em; }
h2 { font-size:120%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.4em; }
h3 { font-size:116%; font-style:bold;
     margin-top:1.0em; margin-bottom:0.3em; }
h4 { font-size:112%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.3em; }
h5 { font-size:112%; font-style:bold; 
     margin-top:1.1em; margin-bottom:0.3em; }
h6 { font-size:112%; font-style:bold; padding:0; margin:0; }

h1 .text { text-decoration:underline; }
h1 .numb { padding-right:0.8em; }
h1 .numb:empty { display:none; padding-right:0; }
h2 .numb { padding-right:0.8em; }
h2 .numb:empty { display:none; padding-right:0; }
h3 .numb { padding-right:0.8em; }
h3 .numb:empty { display:none; padding-right:0; }
h4 .numb { padding-right:0.8em; }
h4 .numb:empty { display:none; padding-right:0; }
h5 .numb { display:none; padding-right:0; }
h6 .numb { display:none; padding-right:0; }

kbd { font-family:monospace; }

noscript { font-size:1.2em; }

p { line-height:1.1em; margin-top:1em; margin-bottom:1em; }

.chunk { font-size:130%; text-decoration:underline; }
.head {}
.high {}
.bold { font-weight:bold; }
.center { text-align:center; }
.italic { font-style:italic; }
.left { text-align:left; }
.nowrap { white-space:nowrap; }
.prewrap { white-space:pre; }
.right { text-align:right; }
.strike { text-decoration:line-through; }
.under { text-decoration:underline; }

.backlight { background-color:#f2f2f2; }
.display0 { display:none; }

img { max-width:100%; }
.imglink { }

.link { }
.blank { }

.list { margin-bottom:1em; }
.list li { margin-top:0.5em; }
.list0 li { margin-top:0; }
.item {}

.tabl { border-collapse:collapse; text-align:left; margin:0.4em 2em 0.5em 2em; }
.tabu { border-collapse:collapse; text-align:right; margin:0.4em 2em 0.5em 2em; }

.tabr { vertical-align:top; }
.tabh { padding:0.2em 0 0 2em; margin:0; }
.tabd { padding:0.1em 0 0 2em; margin:0; }
.tabh:first-of-type, td:first-of-type { padding-left:0; }

.tabu .tabh,
.tabu .tabd { border:1px solid gray; padding:0.2em 0.3em 0.2em 0.3em; }
.tab0 { border:none; visibility:hidden; max-width:1em; 
        white-space:nowrap; overflow:hidden; }

.tabauto { margin-left:auto; margin-right:auto; }

.tabr:empty { height:0.2em; }
.tabu .tabh:empty, .tabu .tabd:empty { border:none; visibility:hidden; }

.error { font-size:110%; color:black; background-color:yellow;
         font-family:sans-serif; font-weight:bold; font-style:normal;
         width:95%; border:solid 1px gray; padding:0.5em 1em 0.5em 1em; }
.error::before { content:'\026a0\00a0'; }
.image { }
.page { width:98%; border:1px dashed gray; margin:1.5em 0 1.8em 0; }
.epage { width:98%; border:1px dashed black; margin:1.5em 0 1.8em 0; }
.monosp { font-family:monospace; }
.ppage { display:none; }
.simple { list-style-type:none; }
.valtop { vertical-align:top; }
.valmid { vertical-align:middle; }
.valbot { vertical-align:bottom; }

.code { border-style:solid; border-width:0 0 0 1px; padding-left:1em;
        font-family:monospace; white-space:pre; }
.block { }
.blockof { margin:0.4em 2em 0.5em 2em; }
.example { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
           margin-top:0.5em; margin-bottom:0.5em; white-space:pre; }
.indent { margin-left:2em; margin-right:2em; }
.noindent { margin-left:0; margin-right:0; }
.inblock { display:inline-block; }
.mono { white-space:pre; font-family:monospace; }
.note { margin:0.4em 2em 0.5em 2em; page-break-inside:avoid; }
.note h5 { margin-top:0 }
.note_hr { width:80%; border:1px solid gray; }
.prop { padding-left:1em; margin-top:0.5em; margin-bottom:0.5em; }
.quote { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
         margin-top:0.5em; margin-bottom:0.5em; }
.this { display:none; }

a:link,a:visited { color:black; text-decoration:none; }
a:hover,a:active { text-decoration:underline; }
a:focus { outline:0; } 

:target:before { content:''; display:block; height:0.1em; margin:-0.1em; }
a.link:link, a.link:visited,a.link:active 
{ color:midnightBlue; text-decoration:underline; text-decoration-style:solid; }

.TOC1cols1 { width:80%; max-width:80%; }
.TOC1cols2 { column-count:2; width:80%; max-width:80%; }
.TOC1cols3 { column-count:3; max-width:90%; max-width:90%; }
.TOC1cols4 { column-count:4; max-width:100%; max-width:100%; }
.TOC1table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC1table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC1table td+td { padding:0 0 0 0.5em; }
.TOC1table .numb { width:3em; max-width:3em; }
.TOC1table .sepr { width:5em; max-width:6em; overflow:hidden; }
.TOC1table .majr { font-weight:bold; }
.TOC1table .text { white-space:normal; }

/* These are due to Firefox (at least <= 76) recalcitrant multi-column handling.
   Web search "Split table into css columns, issue in Firefox" (stackoverflow).
   "Good grief, Charlie Brown!" */
 
.TOC1cols2 table,
.TOC1cols2 tbody,
.TOC1cols2 tr,
.TOC1cols3 table,
.TOC1cols3 tbody,
.TOC1cols3 tr,
.TOC1cols4 table,
.TOC1cols4 tbody,
.TOC1cols4 tr { display:block; padding:0; }

.TOC2cols1 { width:60%; max-width:60%; }
.TOC2cols2 { column-count:2; width:70%; max-width:70%; }
.TOC2cols3 { column-count:3; width:80%; max-width:80%; }
.TOC2cols4 { column-count:4; width:90%; max-width:90%; }
.TOC2table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC2table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC2table .numb { font-weight:bold; padding-right:0.5em; }
.TOC2table .text { width:100%; white-space:normal; }

/* see "recalcitrant" above */
.TOC2cols2 table,
.TOC2cols2 tbody,
.TOC2cols2 tr,
.TOC2cols3 table,
.TOC2cols3 tbody,
.TOC2cols3 tr,
.TOC2cols4 table,
.TOC2cols4 tbody,
.TOC2cols4 tr { display:block; padding:0; }

.NAVtable { margin:0.1em 0 0 2em; }
.NAVtable td { font-size:110%; font-weight:bold; padding:0; margin:0; }
.NAVtable a { padding:0 0.5em 0 0.5em; text-decoration:none; }

.IDXcols1 { width:80%; max-width:80%; }
.IDXcols2 { column-count:2; width:90%; max-width:90%; }
.IDXcols3 { column-count:3; width:95%; max-width:95%;  }
.IDXcols4 { column-count:4; width:100%; max-width:100%;  }
.IDXtable { margin:1em 0 1em 2em; white-space:nowrap; break-inside:auto; }
.IDXtable tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.IDXtable .alpha { font-weight:bold; min-width:2em; }
.IDXtable .text  { width:100%; white-space:normal; }
.IDXtable .para:before { content:'\00b6\00a0'; }

/* see "recalcitrant" above */
.IDXcols2 table,
.IDXcols2 tbody,
.IDXcols2 tr,
.IDXcols3 table,
.IDXcols3 tbody,
.IDXcols3 tr,
.IDXcols4 table,
.IDXcols4 tbody,
.IDXcols4 tr { display:block; padding:0; }

.insight { background-color:cyan; font-family:monospace;
           padding:0 0.2em 0 0.2em; margin:0 0.2em 0 0.2em;
           font-size:100%; font-style:normal; font-weight:normal;
           text-decoration:none; }

.wasdoc { font-family: "Lucida Console", Monaco, monospace; 
          letter-spacing:-0.07em; }

@media screen { .blank::after { content:"\2924"; } 
                .print { display:none; }
}

@media print {
   table { page-break-inside:avoid; }
   .noprint { display:none; }
   .page { border:none; page-break-after: always; }
   .epage { display:none; }
   .ppage { page-break-after:always; }
   .NAVtable { display:none; }
   .NAVprint { display:block!important; }
}

@page { margin:2cm 1cm 2cm 1cm;  }
</style>
<!-- source:0000_WASDOC.WASDOC -->

<style type="text/css">._button { border: 1px gray solid; border-radius:3px; padding:0.1em; margin:0.1em; font-size:90%; }</style>
<style type="text/css">._smiley::after { font-size:150%; vertical-align:middle; content:'\263a' }</style>
<style type="text/css">._frowny::after { font-size:150%; vertical-align:middle; content:'\2639' }</style>

<a id="0." href="#"></a>
<title>WASD Documentation Processor &ndash; Conditional Content</title>
<a id="5." href="#"></a>
<a id="5.conditionalcontent" href="#"></a>
<a id="conditionalcontent" href="#"></a>
<h1 class="head chunk">WASD Documentation Processor</h1>
<h1 class="head"><span class="numb">5.</span><span class="text">Conditional Content</span></h1>

<table class="TOC2table">
<tr><td><a href="wasdoc005.html#5.1.matchconditional"><span class="numb">5.1</span><span class="text">Match Conditional</span></a>
<tr><td><a href="wasdoc005.html#5.1.1.regexbasics"><span class="numb">5.1.1</span><span class="text">Regex Basics</span></a>
<tr><td><a href="wasdoc005.html#5.2.spawnconditional"><span class="numb">5.2</span><span class="text">Spawn Conditional</span></a>
<tr><td><a href="wasdoc005.html#5.3.timeconditional"><span class="numb">5.3</span><span class="text">Time Conditional</span></a>
</table>
</div>

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="wasdoc004.html#4.">&#8598;&#xFE0E;</a>
<td><a href="wasdoc000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="wasdoc006.html#6.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>

<p> <span class="high wasdoc">wasDOC</span> provides for content to be included and excluded based on
specified critera.
This has already been demonstrated when the document was described as
 <span class="high bold">static</span> (a file)
using a construct such as

<div class="blockof mono">This has already been demonstrated when the document was described as
|if|dynamic| |*dynamic| (a CGI script)
|else| |*static| (a file)
|endif|
using a construct such as</div>

as well as in the <a class="link" href="wasdoc000.html#0.documentformats">document prologue</a> where alternative
formats were suggested based on the current presentation.

<p> The mechanism is the very familiar <span class="high monosp">if</span>&ndash;<span class="high monosp">elif</span>&ndash;<span class="high monosp">else</span>&ndash;<span class="high monosp">endif</span>
structure, where tests using <span class="high monosp">if</span> and <span class="high monosp">elif</span> resolving to true or false,
control inclusion of related portions of the document.  Conditionals may be
nested.  A conditional may be negated by prefixing it with <span class="high monosp">!</span> (an
exclamation point).  A conditional structure may not span major sections
(<span class="high monosp">&verbar;1heading&verbar;</span>).

<table class="tabl">
<tr class="tabr under">
<th class="tabh">Condition
<th class="tabh">Comment
<tr class="tabr">
<tr class="tabr backlight">
<td class="tabd"><span class="high monosp">&verbar;apache&verbar;</span>
<td class="tabd">include if &hellip; Apache server
<tr class="tabr">
<td class="tabd"><span class="high monosp">&verbar;cgi=&lt;name&gt;[:&lt;keyword&gt;/&lt;regex&gt;]&verbar;</span>
<td class="tabd">&hellip; CGI variable **
<tr class="tabr backlight">
<td class="tabd"><span class="high monosp">&verbar;dynamic&verbar;</span>
<td class="tabd">&hellip; executing as CGI script
<tr class="tabr">
<td class="tabd"><span class="high monosp">&verbar;hide&verbar;</span>
<td class="tabd">&hellip; only if the query string contains <span class="high monosp">nohide=1</span>
<tr class="tabr backlight">
<td class="tabd"><span class="high monosp">&verbar;lnm=&lt;name&gt;[:&lt;keyword&gt;/&lt;regex&gt;]&verbar;</span>
<td class="tabd">&hellip; logical name value **
<tr class="tabr">
<td class="tabd"><span class="high monosp">&verbar;multi&verbar;</span>
<td class="tabd">&hellip; document presented in major-heading portions
<tr class="tabr backlight">
<td class="tabd"><span class="high monosp">&verbar;osu&verbar;</span>
<td class="tabd">&hellip; OSU server
<tr class="tabr">
<td class="tabd"><span class="high monosp">&verbar;single&verbar;</span>
<td class="tabd">&hellip; full document
<tr class="tabr backlight">
<td class="tabd"><span class="high monosp">&verbar;spawn=&lt;command&gt;[:&lt;keyword&gt;/&lt;regex&gt;]&verbar;</span>
<td class="tabd">&hellip; output from spawned command ** (see <a class="link" href="wasdoc005.html#5.2.spawnconditional">5.2 Spawn Conditional</a>)
<tr class="tabr">
<td class="tabd"><span class="high monosp">&verbar;static&verbar;</span>
<td class="tabd">&hellip; from a file (i.e. not a CGI script)
<tr class="tabr backlight">
<td class="tabd"><span class="high monosp">&verbar;syi=&lt;name&gt;[:&lt;keyword&gt;/&lt;regex&gt;]&verbar;</span>
<td class="tabd">&hellip; any system value that can be inserted ** (see <a class="link" href="wasdoc002.html#2.7.3.systemdata">2.7.3 System Data</a>)
<tr class="tabr">
<td class="tabd"><span class="high monosp">&verbar;time:&lt;pattern&gt;&verbar;</span>
<td class="tabd">&hellip; time value (see <a class="link" href="wasdoc005.html#5.3.timeconditional">5.3 Time Conditional</a>)
<tr class="tabr backlight">
<td class="tabd"><span class="high monosp">&verbar;wasd&verbar;</span>
<td class="tabd">&hellip; WASD server
<tr class="tabr">
<td class="tabd"><span class="high monosp">&verbar;FLAG[:&lt;keyword&gt;/&lt;regex&gt;]&verbar;</span>
<td class="tabd">&hellip; flag content ** (see <a class="link" href="wasdoc007.html#7.2.flags">7.2 FLAGs</a>)
<tr class="tabr backlight">
<td class="tabd"><span class="high monosp">&verbar;0&verbar;</span>
<td class="tabd">unconditional exclusion
<tr class="tabr">
<td class="tabd"><span class="high monosp">&verbar;1&verbar;</span>
<td class="tabd">unconditional inclusion
<tr class="tabr backlight">
<td class="tabd right" colspan="2"><sup>**</sup><span class="high italic">see <a class="link" href="wasdoc005.html#5.1.matchconditional">5.1 Match Conditional</a></span>

</table>

<p> Another example showing nested conditionals

<div class="blockof mono">|if|dynamic|
this dynamic document has been brought to you by the
|if|apache|
Apache
|elif|osu|
OSU
|elif|wasd|
WASD
|endif|
server executing on a
|if|syi=cluster=member| clustered |else| non-clustered |endif| \
|insert|syi=arch_name||.
|else|
this document is just from a flat, ol' file, originally generated on a
|if|syi=cluster=member| clustered |else| non-clustered |endif| \
|insert|syi=arch_name||.
|endif|</div>

and now in motion &hellip;
<span class="highinline" style="background-color:yellow;">this document is just from a flat, ol' file, originally generated on a
 non-clustered  Alpha.
</span>

<a id="5.0.0.0.0.1" href="#"></a>
<a id="5.conditionalkeywordmatch" href="#"></a>
<a id="conditionalkeywordmatch" href="#"></a>
<h6 class="head display0"><span class="text">Conditional keyword match</span></h6>
<a id="5.1" href="#"></a>
<a id="5.1.matchconditional" href="#"></a>
<a id="matchconditional" href="#"></a>
<h2 class="head"><span class="numb">5.1</span><span class="text">Match Conditional</span></h2>

<p> The simple conditions such as <span class="high monosp">&verbar;dynamic&verbar;</span> and <span class="high monosp">&verbar;multi&verbar;</span> allow fairly
&quot;flat&quot; documents to adapt presentation to basic variations in document access. 
To use <span class="high wasdoc">wasDOC</span> for more sophisticated dynamic documents more
sophisticated variants need to be supported.

<p> The <span class="high monosp">cgi</span>, <span class="high monosp">trnlnm</span> and <span class="high monosp">FLAG</span> conditions may all have the associated
value matched to a keyword or regular expression (see <a class="link" href="wasdoc005.html#5.1.1.regexbasics">5.1.1 Regex Basics</a>).

<p> In general, if the conditional <span class="high monosp">&lt;name&gt;</span> does not exist the following
document content is excluded.  If the name exists and no match specified then
the content is included.  When a colon-separated <span class="high monosp">&lt;keyword&gt;</span> or <span class="high monosp">&lt;regex&gt;</span>
is supplied the value is tested against the parameter.  If the keyword (or
phrase) occurs in the value then the following content is included, otherwise
excluded.  Likewise if the regular expression matches or does not match the
value.  Matching is case insensitive.

<p> This example provides something similar to the one above.

<div class="blockof mono">|if|dynamic|
This dynamic document served by\
|if|cgi=SERVER_SOFTWARE:WASD| WASD. |else| something |*other| than WASD. |endif|
|else|
This document is from a static file.
|endif|</div>

<p class="indent">
This document is from a static file.

<a id="5.1.0.0.0.1" href="#"></a>
<a id="5.1.conditionalregularexpressionmatch" href="#"></a>
<a id="conditionalregularexpressionmatch" href="#"></a>
<h6 class="head display0"><span class="text">Conditional regular expression match</span></h6>
<a id="5.1.1" href="#"></a>
<a id="5.1.1.regexbasics" href="#"></a>
<a id="regexbasics" href="#"></a>
<h3 class="head"><span class="numb">5.1.1</span><span class="text">Regex Basics</span></h3>

<p> A regular expression, or <span class="high bold">regex</span>, is a sequence of characters that define
a search pattern.  A detailed tutorial on regular expression capabilities and
usage is well beyond the scope of this document.  Many such hard-copy and
on-line documents are available.

<p class="indent"> <a class="link blank" target="_blank" href="http://en.wikipedia.org/wiki/Regular_expression">http://en.wikipedia.org/wiki/Regular_expression</a>

<p> A regular expression is differentiated from a keyword by a leading <span class="high monosp">^</span>
(caret) character.  Regex equivalent to the preceding example.

<div class="blockof mono">|if|dynamic| This dynamic document served by\
|if|cgi=SERVER_SOFTWARE:^.*WASD.*| WASD. |else| something |*other| than WASD. |endif|
|else| This document is from a static file. |endif|</div>

<p class="indent">
 This document is from a static file. 
<p> <span class="high wasdoc">wasDOC</span> regular expressions support the following elements.  Escape 
<span class="high wasdoc">wasDOC</span>-reserved characters (i.e. <span class="high monosp">&verbar;</span> and <span class="high monosp">\</span>).

<a id="5.1.1.0.1" href="#"></a>
<a id="5.1.1.operatoroverview" href="#"></a>
<a id="operatoroverview" href="#"></a>
<h5 class="head"><span class="text">Operator Overview</span></h5>

<table class="tabl nowrap">
<tr class="tabr under">
<th class="tabh">Description
<th class="tabh">Usage
<tr class="tabr">
<tr class="tabr">
<td class="tabd">Match-self Operator
<td class="tabd">Ordinary characters.
<tr class="tabr">
<td class="tabd">Match-any-character Operator
<td class="tabd">.
<tr class="tabr">
<td class="tabd">Concatenation Operator
<td class="tabd">Juxtaposition.
<tr class="tabr">
<td class="tabd">Repetition Operators
<td class="tabd">*  +  ? {}
<tr class="tabr">
<td class="tabd">Alternation Operator
<td class="tabd">&verbar;
<tr class="tabr">
<td class="tabd">List Operators
<td class="tabd">[...]  [^...]
<tr class="tabr">
<td class="tabd">Grouping Operators
<td class="tabd">(...)
<tr class="tabr">
<td class="tabd">Back-reference Operator
<td class="tabd">&#94;digit
<tr class="tabr">
<td class="tabd">Anchoring Operators
<td class="tabd">^  &dollar;
<tr class="tabr">
<td class="tabd">Backslash Operator
<td class="tabd">Escape meta-character; i.e.
&#94; ^ . &dollar; &verbar; [ (
</table>

<p> The following operators are used to match one, or in conjunction with the
repetition operators more, characters of the target string.  These single and
leading characters are reserved meta-characters and must be escaped using a
leading backslash (&quot;&#94;&quot;) if required as a literal character in the matching
pattern. <span class="high bold">Note</span> that this does not apply to the <span class="high italic">range</span> hyphen; to include a
hyphen in a range ensure the character is the first or last in the range.

<a id="5.1.1.0.2" href="#"></a>
<a id="5.1.1.matchingoperators" href="#"></a>
<a id="matchingoperators" href="#"></a>
<h5 class="head"><span class="text">Matching Operators</span></h5>

<table class="tabl nowrap">
<tr class="tabr under">
<th class="tabh">Expression
<th class="tabh">Purpose
<tr class="tabr">
<tr class="tabr">
<td class="tabd">^
<td class="tabd">Match the beginning of the line
<tr class="tabr">
<td class="tabd">.
<td class="tabd">Match any character
<tr class="tabr">
<td class="tabd">&dollar;
<td class="tabd">Match the end of the line
<tr class="tabr">
<td class="tabd">&verbar;
<td class="tabd">Alternation (or)
<tr class="tabr">
<td class="tabd">[abc]
<td class="tabd">Match only a, b or c
<tr class="tabr">
<td class="tabd">[^abc]
<td class="tabd">Match anything except a, b and c
<tr class="tabr">
<td class="tabd">[a-z0-9]
<td class="tabd">Match any character in the range a to z or 0 to 9
</table>

<p> Repetition operators control the extent, or number, of whatever the matching
operators match. These are also reserved meta-characters and must be escaped
using a leading backslash if required as a literal character.

<a id="5.1.1.0.3" href="#"></a>
<a id="5.1.1.repetitionoperators" href="#"></a>
<a id="repetitionoperators" href="#"></a>
<h5 class="head"><span class="text">Repetition Operators</span></h5>

<table class="tabl nowrap">
<tr class="tabr under">
<th class="tabh">Expression
<th class="tabh">Function
<tr class="tabr">
<tr class="tabr">
<td class="tabd">*
<td class="tabd">Match 0 or more times
<tr class="tabr">
<td class="tabd">+
<td class="tabd">Match 1 or more times
<tr class="tabr">
<td class="tabd">?
<td class="tabd">Match 1 or zero times
<tr class="tabr">
<td class="tabd">{n}
<td class="tabd">Match exactly n times
<tr class="tabr">
<td class="tabd">{n,}
<td class="tabd">Match at least n times
<tr class="tabr">
<td class="tabd">{n,m}
<td class="tabd">Match at least n but not more than m times
</table>

<a id="5.2" href="#"></a>
<a id="5.2.spawnconditional" href="#"></a>
<a id="spawnconditional" href="#"></a>
<h2 class="head"><span class="numb">5.2</span><span class="text">Spawn Conditional</span></h2>

<p> Output from a spawned command may be tested using keyword and regex matching
the same as other strings (see <a class="link" href="wasdoc002.html#2.7.1.spawnedcommand">2.7.1 Spawned Command</a>).  Output also can be
reused for further matching or output by specifying the <span class="high monosp">&amp;</span> (ampersand)
character instead of a command.  This will not only avoid additional overhead
but also presents the exact same data used for the conditional.

<div class="blockof block"><span class="high bold">This system has a C compiler available:</span>
 <br>
<div class="blockof mono backlight inblock noindent" style="padding:0.3em;">VSI C V7.4-002 on OpenVMS Alpha V8.4-2L1
</div>
</div>

<div class="blockof mono">|if|spawn=!-cc/version|
|*This system has a C compiler available:|
|else|
|*This system does not have a C compiler available:|
|endif| |^-
|mono-#*#::##3|
|insert|spawn=!&|
|!mono|</div>

<a id="5.3" href="#"></a>
<a id="5.3.timeconditional" href="#"></a>
<a id="timeconditional" href="#"></a>
<h2 class="head"><span class="numb">5.3</span><span class="text">Time Conditional</span></h2>

<p> The <span class="high monosp">time</span> conditional allows document content to change according to the
time of day, week, or even year.  It compares the supplied parameter to the
current system time in one of three ways.

<ol class="list">

<li class="item"> The supplied parameter is in the form &quot;1200-1759&quot;, which should
be read as &quot;twelve noon to five fifty-nine PM&quot; (i.e. as a time range in
minutes, generalized as <span class="high italic">hhmm-hhmm</span>), where the first is the start
time and the second the end time.  If the current time is within that range
(inclusive) the conditional returns true, otherwise false.  If the range
doesn't look correct false is always returned.

<div class="blockof mono">|if|time:0000-0000|
   <i>it's midnight</i>
|elif|time:0001-1159|
   <i>it's AM</i>
|elif|time:1200-1200|
   <i>it's noon</i>
|else|
   <i>it's PM</i>
|endif|</div>

<li class="item"> If the supplied parameter is a single digit (or series of digits) it is
compared to the VMS day of the week (1-Monday, 2-Tuesday &hellip; 7-Sunday).

<div class="blockof mono">|if|time:6,7|
   <i>it's the weekend</i>
|else|
   <i>it's the working week</i>
|endif|</div>

<li class="item"> If the supplied string is not in either of the formats described above
it is treated as a string match with a VMS comparision time (i.e.
<span class="high italic">yyyy-mm-dd hh-mm-ss.hh</span>) using C-RTL <span class="high italic">decc&dollar;match_wild()</span> or <span class="high monosp">^</span>regex).

<div class="blockof mono">|if|time:%%%%-07-*|
   <i>it's the month of July</i>
|endif|</div>

</ol>

<p> These are combined in the following example.

<p class="indent">
<div class="blockof block backlight inblock" style="padding:0.8em;"> At time of rendering it was <span class="highinsert bold">Saturday, July 11 09:12</span>
<br> Which makes it  <span class="high bold">the weekend</span>.
<br> And so many are <span class="high bold">not concerned</span> about the workplace. <span class="high _smiley">&nbsp;</span>
</div>

<div class="blockof mono">|^+ |if|dynamic| Currently it is |else| At time of rendering it was |endif|\
|insert*|time=%A, %B %d %H:%M|
// largely teased out into separate, continued lines for clarity
|^- Which makes it \
|if|time:6,7| |*the weekend||.
|^- And so many are |*not concerned| about the workplace. |'_smiley.\ |
|else| during the working week.\
|^- And as it's \
|if|time:0000-0859| early morning\
|elif|time:0900-1700| between 9AM and 5PM\
|else| late in the day \
|endif| also likely \
|if|!time:0900-1700| |*_not| |endif| |*working hours||.
|endif|</div>

<p class="indent"> <span class="high italic">Clear as mud?  Thought it might be.</span>
<!-- source:0600_NAVIGATE.WASDOC -->
<a id="5.3.0.0.0.1" href="#"></a>
<a id="5.3.documentnavigation2" href="#"></a>
<a id="documentnavigation2" href="#"></a>
<h6 class="head display0"><span class="text">Document Navigation 2</span></h6>

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="wasdoc004.html#4.">&#8598;&#xFE0E;</a>
<td><a href="wasdoc000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="wasdoc006.html#6.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>