Annotation of doc/gutshtml/SessionFou1.html, revision 1.2

1.2     ! bowersj2    1: <html>
        !             2: 
        !             3: <head>
        !             4: 
        !             5: <meta name=Title
        !             6: 
        !             7: content="Session Four: XML Handler (Simple tags, Globals, Multiple Targets, Style Files) (Guy)">
        !             8: 
        !             9: <meta http-equiv=Content-Type content="text/html; charset=macintosh">
        !            10: 
        !            11: <link rel=Edit-Time-Data href="Session%20Fou1_files/editdata.mso">
        !            12: 
        !            13: <title>Session Four: XML Handler (Simple tags, Globals, Multiple Targets, Style 
        !            14: 
        !            15: Files) (Guy)</title>
        !            16: 
        !            17: <style><!--
        !            18: 
        !            19: .MsoHeader
        !            20: 
        !            21: 	{tab-stops:center 3.0in right 6.0in;
        !            22: 
        !            23: 	font-size:10.0pt;
        !            24: 
        !            25: 	font-family:"Times New Roman";}
        !            26: 
        !            27: .MsoPlainText
        !            28: 
        !            29: 	{font-size:10.0pt;
        !            30: 
        !            31: 	font-family:"Courier New";}
        !            32: 
        !            33: .Section1
        !            34: 
        !            35: 	{page:Section1;}
        !            36: 
        !            37: .Section2
        !            38: 
        !            39: 	{page:Section2;}
        !            40: 
        !            41: -->
        !            42: 
        !            43: </style>
        !            44: 
        !            45: </head>
        !            46: 
        !            47: <body bgcolor=#FFFFFF link=blue vlink=purple class="Normal" lang=EN-US>
        !            48: 
        !            49: <div class=Section1> 
        !            50: 
        !            51:   <h2>Session Four: XML Handler (Simple tags, Globals, Multiple Targets, Style 
        !            52: 
        !            53:     Files) (Guy)</h2>
        !            54: 
        !            55:   <h3><a name="_Toc421867121">XML Files</a></h3>
        !            56: 
        !            57:   <p><span style='color:black'>All HTML / XML files are run through the lonxml 
        !            58: 
        !            59:     handler before being served to a user. This allows us to rewrite many portion 
        !            60: 
        !            61:     of a document and to support serverside tags. There are 2 ways to add new 
        !            62: 
        !            63:     tags to the xml parsing engine, either through LON-CAPA style files or by 
        !            64: 
        !            65:     writing Perl tag handlers for the desired tags. </span></p>
        !            66: 
        !            67:   <p><span style='color:black'><b>Global Variables</b></span></p>
        !            68: 
        !            69:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !            70: 
        !            71:     <i>$Apache::lonxml::debug</i></span><span
        !            72: 
        !            73: style='color:black'> - debugging control </span></p>
        !            74: 
        !            75:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !            76: 
        !            77:     <i>@Apache::lonxml::pwd</i></span><span
        !            78: 
        !            79: style='color:black'> - path to the directory containing the file currently being 
        !            80: 
        !            81:     processed </span></p>
        !            82: 
        !            83:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !            84: 
        !            85:     <i>@Apache::lonxml::outputstack</i></span><span
        !            86: 
        !            87: style='color:black'> </span></p>
        !            88: 
        !            89:   <p><span style='color:black'><i>$Apache::lonxml::redirection</i></span><span
        !            90: 
        !            91: style='color:black'> - these two are used for capturing a subset of the output 
        !            92: 
        !            93:     for later processing, don't touch them directly use &amp;startredirection 
        !            94: 
        !            95:     and &amp;endredirection </span></p>
        !            96: 
        !            97:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !            98: 
        !            99:     <i>$Apache::lonxml::import</i></span><span
        !           100: 
        !           101: style='color:black'> - controls whether the &lt;import&gt; tag actually does anything 
        !           102: 
        !           103:     </span></p>
        !           104: 
        !           105:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           106: 
        !           107:     <i>@Apache::lonxml::extlinks</i></span><span
        !           108: 
        !           109: style='color:black'> - a list of URLs that the user is allowed to look at because 
        !           110: 
        !           111:     of the current resource (images, and links) </span></p>
        !           112: 
        !           113:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           114: 
        !           115:     <i>$Apache::lonxml::metamode</i></span><span
        !           116: 
        !           117: style='color:black'> - some output is turned off, the meta target wants a specific 
        !           118: 
        !           119:     subset, use &lt;output&gt; to guarentee that the catianed data will be in 
        !           120: 
        !           121:     the parsing output </span></p>
        !           122: 
        !           123:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           124: 
        !           125:     <i>$Apache::lonxml::evaluate</i></span><span
        !           126: 
        !           127: style='color:black'> - controls whether run::evaluate actually derefences variable 
        !           128: 
        !           129:     references </span></p>
        !           130: 
        !           131:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           132: 
        !           133:     <i>%Apache::lonxml::insertlist</i></span><span
        !           134: 
        !           135: style='color:black'> - data structure for edit mode, determines what tags can 
        !           136: 
        !           137:     go into what other tags </span></p>
        !           138: 
        !           139:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           140: 
        !           141:     <i>@Apache::lonxml::namespace</i></span><span
        !           142: 
        !           143: style='color:black'> - stores the list of tag namespaces used in the insertlist.tab 
        !           144: 
        !           145:     file that are currently active, used only in edit mode. </span></p>
        !           146: 
        !           147:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           148: 
        !           149:     <i>$Apache::lonxml::registered</i></span><span
        !           150: 
        !           151: style='color:black'> - set to 1 once the remote has been updated to know what 
        !           152: 
        !           153:     resource we are looking at. </span></p>
        !           154: 
        !           155:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           156: 
        !           157:     <i>$Apache::lonxml::request</i></span><span
        !           158: 
        !           159: style='color:black'> - current Apache request object, or undef </span></p>
        !           160: 
        !           161:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           162: 
        !           163:     <i>$Apache::lonxml::curdepth</i></span><span
        !           164: 
        !           165: style='color:black'> - current depth of the overall parse depth. Will be a string 
        !           166: 
        !           167:     like: 2_3_1 (first tag in the third second level tag in the second toplevel 
        !           168: 
        !           169:     tag). It gets set by callsub, and can be used in Perl tag implementations. 
        !           170: 
        !           171:     It relies upon the internal globals: <i>@Apache::lonxml::depthcounter</i></span><span
        !           172: 
        !           173: style='color:black'>, <i>$Apache::lonxml::depth</i></span><span
        !           174: 
        !           175: style='color:black'>, <i>$Apache::lonxml::olddepth</i></span><span
        !           176: 
        !           177: style='color:black'> </span></p>
        !           178: 
        !           179:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           180: 
        !           181:     <i>$Apache::lonxml::prevent_entity_encode</i></span><span
        !           182: 
        !           183: style='color:black'> - By default the xmlparser will try to rencode any 8-bit 
        !           184: 
        !           185:     characters into HTMLEntity Codes, If this is set to a true value it will be 
        !           186: 
        !           187:     prevented. </span></p>
        !           188: 
        !           189:   <p><span style='color:black'>In common usage, <i>$Apache::lonxml::prevent_entity_encode</i></span><span
        !           190: 
        !           191: style='color:black'>, <i>$Apache::lonxml::evaluate</i></span><span
        !           192: 
        !           193: style='color:black'>, <i>$Apache::lonxml::metamode</i></span><span
        !           194: 
        !           195: style='color:black'>, <i>$Apache::lonxml::import</i></span><span
        !           196: 
        !           197: style='color:black'>, should never be set to a value directly, but rather incremented 
        !           198: 
        !           199:     when you want the effect on, and decremented when you want the effect off. 
        !           200: 
        !           201:     </span></p>
        !           202: 
        !           203:   <p><span style='color:black'><b>Notable Perl subroutines</b></span></p>
        !           204: 
        !           205:   <p><span style='color:black'>If not specified these functions are in Apache::lonxml 
        !           206: 
        !           207:     </span></p>
        !           208: 
        !           209:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           210: 
        !           211:     <i>xmlparse</i></span><span
        !           212: 
        !           213: style='color:black'> - see the XMLPARSE figure - also not callable from inside 
        !           214: 
        !           215:     a tag, if one needs to restart parsing, either create add a new LCParser to 
        !           216: 
        !           217:     the parser stack parser using the newparser function, or call inner_xmlparser, 
        !           218: 
        !           219:     see the xmlparse function in scripttag.pm </span></p>
        !           220: 
        !           221:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           222: 
        !           223:     <i>recurse</i></span><span
        !           224: 
        !           225: style='color:black'> - acts just like <i>xmlparse</i></span><span
        !           226: 
        !           227: style='color:black'>, except it doesn't do the style definition check it always 
        !           228: 
        !           229:     calls <i>callsub</i></span><span style='color:black'> </span></p>
        !           230: 
        !           231:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           232: 
        !           233:     <i>callsub</i></span><span
        !           234: 
        !           235: style='color:black'> - callsub looks if a perl subroutine is defined for the current 
        !           236: 
        !           237:     tag and calls. Otherwise it just returns the tag as it was read in. It also 
        !           238: 
        !           239:     will throw on a default editing interface unless the tag has a defined subroutine 
        !           240: 
        !           241:     that either returns something or requests that call sub not add the editing 
        !           242: 
        !           243:     interface. </span></p>
        !           244: 
        !           245:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           246: 
        !           247:     <i>afterburn</i></span><span
        !           248: 
        !           249: style='color:black'> - called on the output of xmlparse, it can add highlights, 
        !           250: 
        !           251:     anchors, and links to regular expersion matches to the output. </span></p>
        !           252: 
        !           253:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           254: 
        !           255:     <i>register_insert</i></span><span
        !           256: 
        !           257: style='color:black'> - builds the %Apache::lonxml::insertlist structure of what 
        !           258: 
        !           259:     tags can have what other tags inside. </span></p>
        !           260: 
        !           261:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           262: 
        !           263:     <i>whichuser</i></span><span
        !           264: 
        !           265: style='color:black'> - returns a list of $symb, $courseid, $domain, $name that 
        !           266: 
        !           267:     is correct for calls to lonnet functions for this setup. Uses form.grade_ 
        !           268: 
        !           269:     parameters, if the user is allowed to mgr in the course </span></p>
        !           270: 
        !           271:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           272: 
        !           273:     <i>setup_globals</i></span><span
        !           274: 
        !           275: style='color:black'> - initializes all lonxml globals when xmlparse is called. 
        !           276: 
        !           277:     If you intend to create a new target you will likely need to tweak how the 
        !           278: 
        !           279:     globals are setup upon start up. </span></p>
        !           280: 
        !           281:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           282: 
        !           283:     <i>init_safespace</i></span><span
        !           284: 
        !           285: style='color:black'> - creates Holes to external functions, creates some global 
        !           286: 
        !           287:     variables, and set the permitted operators of the global Safespace intepreter. 
        !           288: 
        !           289:     </span></p>
        !           290: 
        !           291:   <p><span style='color:black'><b>Functions Tag Handlers can use</b></span></p>
        !           292: 
        !           293:   <p><span style='color:black'>If not specified these functions are in Apache::lonxml 
        !           294: 
        !           295:     </span></p>
        !           296: 
        !           297:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           298: 
        !           299:     <i>debug</i></span><span
        !           300: 
        !           301: style='color:black'> - a function to call to printout debugging messages. Will 
        !           302: 
        !           303:     only print when Apache::lonxml::debug is set to 1 </span></p>
        !           304: 
        !           305:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           306: 
        !           307:     <i>warning</i></span><span
        !           308: 
        !           309: style='color:black'> - a function to use for warning messages. The message will 
        !           310: 
        !           311:     appear at the top of a resource when it is viewed in construction space only. 
        !           312: 
        !           313:     </span></p>
        !           314: 
        !           315:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           316: 
        !           317:     <i>error</i></span><span
        !           318: 
        !           319: style='color:black'> - a function to use for error messages. The message will 
        !           320: 
        !           321:     appear at the top of a resource when it is viewed in construction space, and 
        !           322: 
        !           323:     will message the resource author and course instructor, while informing the 
        !           324: 
        !           325:     student that an error has occured otherwise. </span></p>
        !           326: 
        !           327:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           328: 
        !           329:     <i>get_all_text</i></span><span
        !           330: 
        !           331: style='color:black'> - 2 args, tag to look for (need to use /tag to look for an 
        !           332: 
        !           333:     end tag) and a HTML::TokeParser reference, it will repedelyt get text from 
        !           334: 
        !           335:     the TokeParser until the requested tag is found. It will return all of the 
        !           336: 
        !           337:     document it pulled form the TokeParser. (See Apache::scripttag::start_script 
        !           338: 
        !           339:     for an example of usage.) </span></p>
        !           340: 
        !           341:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           342: 
        !           343:     <i>get_param</i></span><span
        !           344: 
        !           345: style='color:black'> - 4 arguments, first is a scaler sting of the argument needed, 
        !           346: 
        !           347:     second is a reference to the parser arguments stack, third is a reference 
        !           348: 
        !           349:     to the Safe space, and fourth is an optional &quot;context&quot; value. This 
        !           350: 
        !           351:     subroutine allows a tag to get a tag argument, after being interpolated inside 
        !           352: 
        !           353:     the Safe space. This should be used if the tag might use a safe space variable 
        !           354: 
        !           355:     reference for the tag argument. (See Apache::scripttag::start_script for an 
        !           356: 
        !           357:     example.) This version only handles scalar variables. </span></p>
        !           358: 
        !           359:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           360: 
        !           361:     <i>get_param_var</i></span><span
        !           362: 
        !           363: style='color:black'> - 4 arguments, first is a scaler sting of the argument needed, 
        !           364: 
        !           365:     second is a reference to the parser arguments stack, third is a reference 
        !           366: 
        !           367:     to the Safe space, and fourth is an optional &quot;context&quot; value. This 
        !           368: 
        !           369:     subroutine allows a tag to get a tag argument, after being interpolated inside 
        !           370: 
        !           371:     the Safe space. This should be used if the tag might use a safe space variable 
        !           372: 
        !           373:     reference for the tag argument. (See Apache::scripttag::start_script for an 
        !           374: 
        !           375:     example.) This version can handle list or hash variables properly. </span></p>
        !           376: 
        !           377:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           378: 
        !           379:     <i>description</i></span><span
        !           380: 
        !           381: style='color:black'> - 1 argument, the token object. This will return the textual 
        !           382: 
        !           383:     decription of the current tag from the insertlist.tab file. </span></p>
        !           384: 
        !           385:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           386: 
        !           387:     <i>whichuser</i></span><span
        !           388: 
        !           389: style='color:black'> - 0 arguments. This will take a look at the current environment 
        !           390: 
        !           391:     setting and return the current $symb, $courseid, $udom, $uname. You should 
        !           392: 
        !           393:     always use this function if you want to determine who the current user is. 
        !           394: 
        !           395:     (Since a instructor might be trying to view a students version of a resource.) 
        !           396: 
        !           397:     </span></p>
        !           398: 
        !           399:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           400: 
        !           401:     <i>inner_xmlparse</i></span><span
        !           402: 
        !           403: style='color:black'> - 6 arguments, the target, an array pointer to the current 
        !           404: 
        !           405:     stack of tags, and array pointer to the current stack of tag arguments, an 
        !           406: 
        !           407:     array pointer to the current stack of LCParser's, a pointer to the current 
        !           408: 
        !           409:     Safe space, a pointer to the hash of current style definitions </span></p>
        !           410: 
        !           411:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           412: 
        !           413:     <i>newparser</i></span><span
        !           414: 
        !           415: style='color:black'> - 3 args, first is a reference to the parser stack, second 
        !           416: 
        !           417:     should be a reference to a string scaler containg the text the newparser should 
        !           418: 
        !           419:     run over, third should be a scaler of the directory path the file the parser 
        !           420: 
        !           421:     is parsing was in. (See Apache::scripttag::start_import for an example.) </span></p>
        !           422: 
        !           423:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           424: 
        !           425:     <i>register</i></span><span
        !           426: 
        !           427: style='color:black'> - should be called in a file's BEGIN block. 2 arguments, 
        !           428: 
        !           429:     a scaler string, and a list of strings. This allows a file to register what 
        !           430: 
        !           431:     tags it handles, and what the namespace of those tags are. Example: </span></p>
        !           432: 
        !           433:   <p><span style='font-family:"Courier New";color:black'>sub BEGIN {</span></p>
        !           434: 
        !           435:   <p><span style='font-family:"Courier New";color:black'>&nbsp; &amp;Apache::lonxml::register('Apache::scripttag',('script','display'));</span></p>
        !           436: 
        !           437:   <p><span style='font-family:"Courier New";color:black'>}</span></p>
        !           438: 
        !           439:   <p><span style='color:black'>Would tell xmlparse that in Apache::scripttag it 
        !           440: 
        !           441:     can find handlers for &lt;script&gt; and &lt;display&gt;, if one regsiters 
        !           442: 
        !           443:     a tag that was already registered the previous one is remembered and will 
        !           444: 
        !           445:     be restored on a deregister. </span></p>
        !           446: 
        !           447:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           448: 
        !           449:     <i>deregister</i></span><span
        !           450: 
        !           451: style='color:black'> - used to remove a previously registered tag implementation. 
        !           452: 
        !           453:     It will restore the previous registration if there was one. </span></p>
        !           454: 
        !           455:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           456: 
        !           457:     <i>startredirection</i></span><span
        !           458: 
        !           459: style='color:black'> - used when a tag wants to save a portion of the document 
        !           460: 
        !           461:     for its end tag to use, but wants the intervening document to be normally 
        !           462: 
        !           463:     processed. (See Apache::scripttag::start_window for an example.) </span></p>
        !           464: 
        !           465:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           466: 
        !           467:     <i>endredirection</i></span><span
        !           468: 
        !           469: style='color:black'> - used to stop preventing xmlparse from hiding output. The 
        !           470: 
        !           471:     return value is everthing that xmlparse has processed since the corresponding 
        !           472: 
        !           473:     startredirection. (See Apache::scripttag::end_window for an example.) </span></p>
        !           474: 
        !           475:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           476: 
        !           477:     <i>Apache::run::evaluate</i></span><span
        !           478: 
        !           479: style='color:black'> - 3 args, first a string, second a reference to the Safe 
        !           480: 
        !           481:     space, 3 a string to be evaluated before the first arg. This subroutine will 
        !           482: 
        !           483:     do variable interpolation and simple function interpolations on the first 
        !           484: 
        !           485:     argument. (See Apache::lonxml::inner_xmlparse for an example.) </span></p>
        !           486: 
        !           487:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           488: 
        !           489:     <i>Apache::run::run</i></span><span
        !           490: 
        !           491: style='color:black'> - 2 args, first a string, second a reference to the Safe 
        !           492: 
        !           493:     space. This handles passing the passed string into the Safe space for evaluation 
        !           494: 
        !           495:     and then returns the result. (See Apache::scripttag::start_script for an example.)</span></p>
        !           496: 
        !           497:   <h3><a name="_Toc421867122">Style Files</a></h3>
        !           498: 
        !           499:   <p><span style='color:black'> <img width=432 height=255
        !           500: 
        !           501: src="Session%20Fou1_files/image002.jpg" v:shapes="_x0000_i1025"> </span></p>
        !           502: 
        !           503:   <p><span style='font-size:14.0pt;color:black'><b>Fig. 2.4.1</b></span><span
        !           504: 
        !           505: style='font-size:14.0pt;color:black'> Ð Using a style file</span></p>
        !           506: 
        !           507:   <p><span style='color:black'><b>Style File specific tags</b></span></p>
        !           508: 
        !           509:   <p><span style='color:black'><b>&lt;definetag&gt;</b></span><span
        !           510: 
        !           511: style='color:black'> - 2 arguments, <i>name</i></span><span style='color:black'> 
        !           512: 
        !           513:     name of new tag being defined, if proceeded with a / defining an end tag, 
        !           514: 
        !           515:     required; <i>parms</i></span><span style='color:black'> parameters of the 
        !           516: 
        !           517:     new tag, the value of these parameters can be accesed by $parametername. </span></p>
        !           518: 
        !           519:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           520: 
        !           521:     <b>&lt;render&gt;</b></span><span
        !           522: 
        !           523: style='color:black'> - define what the new tag does for a non meta target </span></p>
        !           524: 
        !           525:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           526: 
        !           527:     <b>&lt;meta&gt;</b></span><span
        !           528: 
        !           529: style='color:black'> - define what the new tag does for a meta target </span></p>
        !           530: 
        !           531:   <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        !           532: 
        !           533:     <b>&lt;tex&gt; / &lt;web&gt; / &lt;latexsource&gt;</b></span><span style='color:black'> 
        !           534: 
        !           535:     - define what a new tag does for a specific no meta target, all data inside 
        !           536: 
        !           537:     a &lt;render&gt; is render to all targets except when surrounded by a specific 
        !           538: 
        !           539:     target tags.</span><span style='font-size:16.0pt;color:black'> </span></p>
        !           540: 
        !           541:   <p class=MsoHeader> <img width=432 height=243
        !           542: 
        !           543: src="Session%20Fou1_files/image005.png" v:shapes="_x0000_i1026"> </p>
        !           544: 
        !           545:   <p><span style='font-size:14.0pt'><b>Fig. 2.4.2</b></span><span
        !           546: 
        !           547: style='font-size:14.0pt'> Ð The parser</span></p>
        !           548: 
        !           549:   <h3><a name="_Toc421867123">HTML::LCParser - Alternative HTML::Parser interface</a></h3>
        !           550: 
        !           551:   <p class=MsoPlainText>SYNOPSIS</p>
        !           552: 
        !           553:   <p class=MsoPlainText>&nbsp;require HTML::LCParser;</p>
        !           554: 
        !           555:   <p class=MsoPlainText>&nbsp;$p = HTML::LCParser-&gt;new(&quot;index.html&quot;) 
        !           556: 
        !           557:     || die &quot;Can't open: $!&quot;;</p>
        !           558: 
        !           559:   <p class=MsoPlainText>&nbsp;while (my $token = $p-&gt;get_token) {</p>
        !           560: 
        !           561:   <p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp; #...</p>
        !           562: 
        !           563:   <p class=MsoPlainText>&nbsp;}</p>
        !           564: 
        !           565:   <p class=MsoPlainText>DESCRIPTION</p>
        !           566: 
        !           567:   <p class=MsoPlainText>The C&lt;HTML::LCParser&gt; is an alternative interface 
        !           568: 
        !           569:     to the</p>
        !           570: 
        !           571:   <p class=MsoPlainText>C&lt;HTML::Parser&gt; class.&nbsp; It is an C&lt;HTML::PullParser&gt; 
        !           572: 
        !           573:     subclass.</p>
        !           574: 
        !           575:   <p class=MsoPlainText>The following methods are available:</p>
        !           576: 
        !           577:   <p class=MsoPlainText>* $p = HTML::LCParser-&gt;new( $file_or_doc );</p>
        !           578: 
        !           579:   <p class=MsoPlainText>The object constructor argument is either a file name, 
        !           580: 
        !           581:     a file handle</p>
        !           582: 
        !           583:   <p class=MsoPlainText>object, or the complete document to be parsed.</p>
        !           584: 
        !           585:   <p class=MsoPlainText>If the argument is a plain scalar, then it is taken as 
        !           586: 
        !           587:     the name of a</p>
        !           588: 
        !           589:   <p class=MsoPlainText>file to be opened and parsed.&nbsp; If the file can't 
        !           590: 
        !           591:     be opened for</p>
        !           592: 
        !           593:   <p class=MsoPlainText>reading, then the constructor will return an undefined 
        !           594: 
        !           595:     value and $!</p>
        !           596: 
        !           597:   <p class=MsoPlainText>will tell you why it failed.</p>
        !           598: 
        !           599:   <p class=MsoPlainText>If the argument is a reference to a plain scalar, then 
        !           600: 
        !           601:     this scalar is</p>
        !           602: 
        !           603:   <p class=MsoPlainText>taken to be the literal document to parse.&nbsp; The value 
        !           604: 
        !           605:     of this</p>
        !           606: 
        !           607:   <p class=MsoPlainText>scalar should not be changed before all tokens have been 
        !           608: 
        !           609:     extracted.</p>
        !           610: 
        !           611:   <p class=MsoPlainText>Otherwise the argument is taken to be some object that 
        !           612: 
        !           613:     the</p>
        !           614: 
        !           615:   <p class=MsoPlainText>C&lt;HTML::LCParser&gt; can read() from when it needs 
        !           616: 
        !           617:     more data.&nbsp; Typically</p>
        !           618: 
        !           619:   <p class=MsoPlainText>it will be a filehandle of some kind.&nbsp; The stream 
        !           620: 
        !           621:     will be read() until</p>
        !           622: 
        !           623:   <p class=MsoPlainText>EOF, but not closed.</p>
        !           624: 
        !           625:   <p class=MsoPlainText>It also will turn attr_encoded on by default.</p>
        !           626: 
        !           627:   <p class=MsoPlainText>* $p-&gt;get_token</p>
        !           628: 
        !           629:   <p class=MsoPlainText>This method will return the next I&lt;token&gt; found 
        !           630: 
        !           631:     in the HTML document,</p>
        !           632: 
        !           633:   <p class=MsoPlainText>or C&lt;undef&gt; at the end of the document.&nbsp; The 
        !           634: 
        !           635:     token is returned as an</p>
        !           636: 
        !           637:   <p class=MsoPlainText>array reference.&nbsp; The first element of the array 
        !           638: 
        !           639:     will be a (mostly)</p>
        !           640: 
        !           641:   <p class=MsoPlainText>single character string denoting the type of this token: 
        !           642: 
        !           643:     &quot;S&quot; for start</p>
        !           644: 
        !           645:   <p class=MsoPlainText>tag, &quot;E&quot; for end tag, &quot;T&quot; for text, 
        !           646: 
        !           647:     &quot;C&quot; for comment, &quot;D&quot; for</p>
        !           648: 
        !           649:   <p class=MsoPlainText>declaration, and &quot;PI&quot; for process instructions.&nbsp; 
        !           650: 
        !           651:     The rest of the array</p>
        !           652: 
        !           653:   <p class=MsoPlainText>is the same as the arguments passed to the corresponding 
        !           654: 
        !           655:     HTML::Parser</p>
        !           656: 
        !           657:   <p class=MsoPlainText>v2 compatible callbacks (see L&lt;HTML::Parser&gt;).&nbsp; 
        !           658: 
        !           659:     In summary, returned</p>
        !           660: 
        !           661:   <p class=MsoPlainText>tokens look like this:</p>
        !           662: 
        !           663:   <p class=MsoPlainText>&nbsp; [&quot;S&quot;,&nbsp; $tag, $attr, $attrseq, $text, 
        !           664: 
        !           665:     $line]</p>
        !           666: 
        !           667:   <p class=MsoPlainText>&nbsp; [&quot;E&quot;,&nbsp; $tag, $text, $line]</p>
        !           668: 
        !           669:   <p class=MsoPlainText>&nbsp; [&quot;T&quot;,&nbsp; $text, $is_data, $line]</p>
        !           670: 
        !           671:   <p class=MsoPlainText>&nbsp; [&quot;C&quot;,&nbsp; $text, $line]</p>
        !           672: 
        !           673:   <p class=MsoPlainText>&nbsp; [&quot;D&quot;,&nbsp; $text, $line]</p>
        !           674: 
        !           675:   <p class=MsoPlainText>&nbsp; [&quot;PI&quot;, $token0, $text, $line]</p>
        !           676: 
        !           677:   <p class=MsoPlainText>where $attr is a hash reference, $attrseq is an array 
        !           678: 
        !           679:     reference and</p>
        !           680: 
        !           681:   <p class=MsoPlainText>the rest are plain scalars.</p>
        !           682: 
        !           683:   <p class=MsoPlainText>* $p-&gt;unget_token($token,...)</p>
        !           684: 
        !           685:   <p class=MsoPlainText>If you find out you have read too many tokens you can 
        !           686: 
        !           687:     push them back,</p>
        !           688: 
        !           689:   <p class=MsoPlainText>so that they are returned the next time $p-&gt;get_token 
        !           690: 
        !           691:     is called.</p>
        !           692: 
        !           693:   <p class=MsoPlainText>* $p-&gt;get_tag( [$tag, ...] )</p>
        !           694: 
        !           695:   <p class=MsoPlainText>This method returns the next start or end tag (skipping 
        !           696: 
        !           697:     any other</p>
        !           698: 
        !           699:   <p class=MsoPlainText>tokens), or C&lt;undef&gt; if there are no more tags in 
        !           700: 
        !           701:     the document.&nbsp; If</p>
        !           702: 
        !           703:   <p class=MsoPlainText>one or more arguments are given, then we skip tokens until 
        !           704: 
        !           705:     one of the</p>
        !           706: 
        !           707:   <p class=MsoPlainText>specified tag types is found.&nbsp; For example:</p>
        !           708: 
        !           709:   <p class=MsoPlainText>&nbsp;&nbsp; $p-&gt;get_tag(&quot;font&quot;, &quot;/font&quot;);</p>
        !           710: 
        !           711:   <p class=MsoPlainText>will find the next start or end tag for a font-element.</p>
        !           712: 
        !           713:   <p class=MsoPlainText>The tag information is returned as an array reference 
        !           714: 
        !           715:     in the same form</p>
        !           716: 
        !           717:   <p class=MsoPlainText>as for $p-&gt;get_token above, but the type code (first 
        !           718: 
        !           719:     element) is</p>
        !           720: 
        !           721:   <p class=MsoPlainText>missing. A start tag will be returned like this:</p>
        !           722: 
        !           723:   <p class=MsoPlainText>&nbsp; [$tag, $attr, $attrseq, $text]</p>
        !           724: 
        !           725:   <p class=MsoPlainText>The tagname of end tags are prefixed with &quot;/&quot;, 
        !           726: 
        !           727:     i.e. end tag is</p>
        !           728: 
        !           729:   <p class=MsoPlainText>returned like this:</p>
        !           730: 
        !           731:   <p class=MsoPlainText>&nbsp; [&quot;/$tag&quot;, $text]</p>
        !           732: 
        !           733:   <p class=MsoPlainText>* $p-&gt;get_text( [$endtag] )</p>
        !           734: 
        !           735:   <p class=MsoPlainText>This method returns all text found at the current position. 
        !           736: 
        !           737:     It will</p>
        !           738: 
        !           739:   <p class=MsoPlainText>return a zero length string if the next token is not text.&nbsp; 
        !           740: 
        !           741:     The</p>
        !           742: 
        !           743:   <p class=MsoPlainText>optional $endtag argument specifies that any text occurring 
        !           744: 
        !           745:     before the</p>
        !           746: 
        !           747:   <p class=MsoPlainText>given tag is to be returned. All entities are unmodified.</p>
        !           748: 
        !           749:   <p class=MsoPlainText>The $p-&gt;{textify} attribute is a hash that defines 
        !           750: 
        !           751:     how certain tags can</p>
        !           752: 
        !           753:   <p class=MsoPlainText>be treated as text.&nbsp; If the name of a start tag matches 
        !           754: 
        !           755:     a key in this</p>
        !           756: 
        !           757:   <p class=MsoPlainText>hash then this tag is converted to text.&nbsp; The hash 
        !           758: 
        !           759:     value is used to</p>
        !           760: 
        !           761:   <p class=MsoPlainText>specify which tag attribute to obtain the text from.&nbsp; 
        !           762: 
        !           763:     If this tag</p>
        !           764: 
        !           765:   <p class=MsoPlainText>attribute is missing, then the upper case name of the 
        !           766: 
        !           767:     tag enclosed in</p>
        !           768: 
        !           769:   <p class=MsoPlainText>brackets is returned, e.g. &quot;[IMG]&quot;.&nbsp; The 
        !           770: 
        !           771:     hash value can also be a</p>
        !           772: 
        !           773:   <p class=MsoPlainText>subroutine reference.&nbsp; In this case the routine is 
        !           774: 
        !           775:     called with the</p>
        !           776: 
        !           777:   <p class=MsoPlainText>start tag token content as its argument and the return 
        !           778: 
        !           779:     value is treated</p>
        !           780: 
        !           781:   <p class=MsoPlainText>as the text.</p>
        !           782: 
        !           783:   <p class=MsoPlainText>The default $p-&gt;{textify} value is:</p>
        !           784: 
        !           785:   <p class=MsoPlainText>&nbsp; {img =&gt; &quot;alt&quot;, applet =&gt; &quot;alt&quot;}</p>
        !           786: 
        !           787:   <p class=MsoPlainText>This means that &lt;IMG&gt; and &lt;APPLET&gt; tags are 
        !           788: 
        !           789:     treated as text, and that</p>
        !           790: 
        !           791:   <p class=MsoPlainText>the text to substitute can be found in the ALT attribute.</p>
        !           792: 
        !           793:   <p class=MsoPlainText>* $p-&gt;get_trimmed_text( [$endtag] )</p>
        !           794: 
        !           795:   <p class=MsoPlainText>Same as $p-&gt;get_text above, but will collapse any sequences 
        !           796: 
        !           797:     of white</p>
        !           798: 
        !           799:   <p class=MsoPlainText>space to a single space character.&nbsp; Leading and trailing 
        !           800: 
        !           801:     white space is</p>
        !           802: 
        !           803:   <p class=MsoPlainText>removed.</p>
        !           804: 
        !           805:   <p class=MsoPlainText>EXAMPLES</p>
        !           806: 
        !           807:   <p class=MsoPlainText>This example extracts all links from a document.&nbsp; 
        !           808: 
        !           809:     It will print one</p>
        !           810: 
        !           811:   <p class=MsoPlainText>line for each link, containing the URL and the textual 
        !           812: 
        !           813:     description</p>
        !           814: 
        !           815:   <p class=MsoPlainText>between the &lt;A&gt;...&lt;/A&gt; tags:</p>
        !           816: 
        !           817:   <p class=MsoPlainText>&nbsp; use HTML::LCParser;</p>
        !           818: 
        !           819:   <p class=MsoPlainText>&nbsp; $p = HTML::LCParser-&gt;new(shift||&quot;index.html&quot;);</p>
        !           820: 
        !           821:   <p class=MsoPlainText>&nbsp; while (my $token = $p-&gt;get_tag(&quot;a&quot;)) 
        !           822: 
        !           823:     {</p>
        !           824: 
        !           825:   <p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my $url = $token-&gt;[1]{href} 
        !           826: 
        !           827:     || &quot;-&quot;;</p>
        !           828: 
        !           829:   <p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my $text = $p-&gt;get_trimmed_text(&quot;/a&quot;);</p>
        !           830: 
        !           831:   <p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &quot;$url\t$text\n&quot;;</p>
        !           832: 
        !           833:   <p class=MsoPlainText>&nbsp; }</p>
        !           834: 
        !           835:   <p class=MsoPlainText>This example extract the &lt;TITLE&gt; from the document:</p>
        !           836: 
        !           837:   <p class=MsoPlainText>&nbsp; use HTML::LCParser;</p>
        !           838: 
        !           839:   <p class=MsoPlainText>&nbsp; $p = HTML::LCParser-&gt;new(shift||&quot;index.html&quot;);</p>
        !           840: 
        !           841:   <p class=MsoPlainText>&nbsp; if ($p-&gt;get_tag(&quot;title&quot;)) {</p>
        !           842: 
        !           843:   <p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my $title = $p-&gt;get_trimmed_text;</p>
        !           844: 
        !           845:   <p class=MsoPlainText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &quot;Title: $title\n&quot;;</p>
        !           846: 
        !           847:   <p class=MsoPlainText>&nbsp; }</p>
        !           848: 
        !           849: </div>
        !           850: 
        !           851: <br
        !           852: 
        !           853: clear=ALL style='page-break-before:always;'>
        !           854: 
        !           855: <div class=Section2> </div>
        !           856: 
        !           857: </body>
        !           858: 
        !           859: </html>
        !           860: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.