1: package Apache::lonxml;
2:
3: use strict;
4: use HTML::TokeParser;
5: use Safe;
6: use Apache::Constants qw(:common);
7: use Apache::lontexconvert;
8:
9:
10: #======================================================= Main subroutine: xmlparse
11:
12: sub xmlparse {
13:
14: my ($target,$content_file_string,%style_for_target) = @_;
15: my $pars = HTML::TokeParser->new(\$content_file_string);
16: my $currentstring = '';
17: my $finaloutput = '';
18: my $newarg = '';
19: my $tempostring = '';
20: my $tempocont = '';
21: my $safeeval = new Safe;
22:
23: #------------------------- Redefinition of the target in the case of compound target
24: ($target, my @tenta) = split('&&',$target);
25: #------------------------------ Stack definition (in stack we have all current tags)
26:
27: my @stack = ();
28: my @parstack = ();
29:
30: #------------------------------------------ Parse input string (content_file_string)
31:
32: my $token;
33:
34: while ($token = $pars->get_token) {
35: if ($token->[0] eq 'T') {
36: $finaloutput .= $token->[1];
37: $tempocont .= $token->[1];
38: } elsif ($token->[0] eq 'S') {
39: #------------------------------------------------------------------ add tag to stack
40: push (@stack,$token->[1]);
41: #---------------------------------------------- add parameters list to another stack
42: map {$tempostring .= "$_=$token->[2]->{$_},"} @{$token->[3]};
43: push (@parstack,$tempostring);
44: $tempostring = '';
45: $tempocont = '';
46:
47: if (exists $style_for_target{$token->[1]}) {
48:
49: #--------------------------------------------------------- use style file definition
50:
51: $newarg = $style_for_target{$token->[1]};
52:
53: if (index($newarg,'script') != -1 ) {
54: my $pat = HTML::TokeParser->new(\$newarg);
55: my $tokenpat;
56: my $partstring = '';
57: my $oustring = '';
58: my $outputstring;
59:
60: while ($tokenpat = $pat->get_token) {
61: if ($tokenpat->[0] eq 'T') {
62: $oustring .= $tokenpat->[1];
63: } elsif ($tokenpat->[0] eq 'S') {
64: if ($tokenpat->[1] eq 'script') {
65: while ($tokenpat = $pat->get_token and $tokenpat->[1] ne 'script') {
66: if ($tokenpat->[0] eq 'S') {
67: $partstring .= $tokenpat->[4];
68: } elsif ($tokenpat->[0] eq 'T') {
69: $partstring .= $tokenpat->[1];
70: } elsif ($tokenpat->[0] eq 'E') {
71: $partstring .= $tokenpat->[2];
72: }
73: }
74:
75: map {$partstring =~ s/\$$_/$token->[2]->{$_}/g; } @{$token->[3]};
76:
77: &run($partstring,$safeeval);
78: $partstring = '';
79: } elsif ($tokenpat->[1] eq 'evaluate') {
80: $outputstring = &evaluate($tokenpat->[2]{expression},$safeeval);
81: $oustring .= $outputstring;
82: } else {
83: $oustring .= $tokenpat->[4];
84: }
85: } elsif ($tokenpat->[0] eq 'E' and $tokenpat->[1] ne 'evaluate') {
86: $oustring .= $tokenpat->[1];
87: }
88: }
89: $newarg = $oustring;
90: } else {
91: map {$newarg =~ s/\$$_/$token->[2]->{$_}/g; } @{$token->[3]};
92: }
93: $finaloutput .= $newarg;
94: } else {
95: #----------------------------------------------------- use default definition of tag
96: my $sub="start_$token->[1]";
97:
98: {
99: no strict 'refs';
100: if (defined (&$sub)) {
101: $currentstring = &$sub($target,$token,\@parstack);
102: $finaloutput .= $currentstring;
103: $currentstring = '';
104: } else {
105: $finaloutput .= $token->[4];
106: }
107: use strict 'refs';
108: }
109: }
110: } elsif ($token->[0] eq 'E') {
111: pop @stack;
112: unless (exists $style_for_target{$token->[1]}) {
113: my $sub="end_$token->[1]";
114: {
115: no strict 'refs';
116: if (defined (&$sub)) {
117: $currentstring = &$sub($target,$token,\@parstack);
118: $finaloutput .= $currentstring;
119: $currentstring = '';
120: } else {
121: $finaloutput .= $token->[4];
122: }
123: use strict 'refs';
124: }
125: }
126: #------------------------------------------------------- end tag from the style file
127: if (exists $style_for_target{'/'."$token->[1]"}) {
128: $newarg = $style_for_target{'/'."$token->[1]"};
129: my @very_temp = split(',',@parstack[$#parstack]);
130: map {my @ret= split('=',$_); $newarg =~ s/\$$ret[0]/$ret[1]/g; } @very_temp;
131: $finaloutput .= $newarg;
132: }
133: pop @parstack;
134: }
135: }
136: return $finaloutput;
137: }
138:
139:
140: #================================================================== style subroutine
141:
142: sub styleparser {
143:
144: my ($target,$content_style_string) = @_;
145:
146: #------------------------------------------------ target redefinition (if necessary)
147:
148: my @target_string = '';
149: my $element;
150:
151: ($element,@target_string) = split ('&&',$target);
152:
153: map {$content_style_string =~ s/\<(.*)$_\>/\<$1$element\>/g; } @target_string;
154:
155: $target = $element;
156:
157: #------------------------------------------------- create a table for defined target
158: #---------------------------------------------- from the information from Style File
159:
160: my @value_style = ();
161: my $current_key = '';
162: my $current_value = '';
163:
164: my $pstyle = HTML::TokeParser->new(\$content_style_string);
165:
166: my $stoken;
167:
168: while ($stoken = $pstyle->get_token) {
169: #---------------------------------------------------------- start for tag definition
170: if ($stoken->[0] eq 'S' and $stoken->[1] eq 'definetag') {
171: #------------------------------------------------------------------- new key in hash
172: $current_key = $stoken->[2]{name};
173: if ($target eq 'meta') {
174: #-------------------------------------------------- reserved for the metadate output
175:
176:
177: } else {
178: #-------------------------------------------------------------------- outtext output
179: while ($stoken = $pstyle->get_token and $stoken->[1] ne 'outtext') {
180: }
181: while ($stoken = $pstyle->get_token and $stoken->[0] ne 'S') {
182: $current_value .= $stoken->[1];
183: }
184: while ($stoken->[1] ne 'definetag') {
185: if ($stoken->[0] eq 'S' and $stoken->[1] eq $target) {
186: while ($stoken = $pstyle->get_token) {
187: if ($stoken->[1] ne $target) {
188: if ($stoken->[0] eq 'S') {
189: $current_value .= $stoken->[4];
190: }
191: if ($stoken->[0] eq 'E') {
192: $current_value .= $stoken->[2];
193: }
194: if ($stoken->[0] eq 'T') {
195: $current_value .= $stoken->[1];
196: }
197: } else {
198: last;
199: }
200: }
201: } elsif ($stoken->[0] eq 'S' and $stoken->[1] ne $target) {
202: while ($stoken = $pstyle->get_token and $stoken->[0] ne 'E') {
203: }
204: }
205:
206: while ($stoken = $pstyle->get_token) {
207: if ($stoken->[0] eq 'T') {
208: $current_value .= $stoken->[1];
209: }
210: if ($stoken->[0] eq 'E') {
211: last;
212: }
213: if ($stoken->[0] eq 'S') {
214: last;
215: }
216: }
217:
218: }
219: }
220:
221: }
222: push (@value_style,lc $current_key,$current_value);
223: $current_key = '';
224: $current_value = '';
225:
226: }
227:
228: my %style_for_target = @value_style;
229:
230: #-------------------------------------------------------------------- check printing
231: # while (($current_key,$current_value) = each %style_for_target) {
232: # print "$current_key => $current_value\n";
233: # }
234:
235: return %style_for_target;
236:
237: }
238:
239:
240:
241: #=============================================================== Subroutine definition
242: #--------------------------------------------------------------------------------- Run
243: sub evaluate {
244: my ($expression,$safeeval) = @_;
245: return $safeeval->reval($expression);
246: }
247:
248: sub run {
249: my ($code,$safeeval) = @_;
250: $safeeval->reval($code);
251: }
252:
253: #===================================================================== TAG SUBROUTINES
254: #----------------------------------------------------------------------------- <m> tag
255: sub start_m {
256: my ($target,$token) = @_;
257: my $currentstring = '';
258: if ($target eq 'web') {
259: $currentstring = "\$out = lontexconvert::converted(\$in = '\$'.\"";
260: } elsif ($target eq 'tex') {
261: $currentstring = "\$";
262: }
263: return $currentstring;
264: }
265: sub end_m {
266: my ($target,$token) = @_;
267: my $currentstring = '';
268: if ($target eq 'web') {
269: $currentstring = "\".'\$') ";
270: } elsif ($target eq 'tex') {
271: $currentstring = "\$";
272: }
273: return $currentstring;
274: }
275: #-------------------------------------------------------------------------- <html> tag
276: sub start_html {
277: my ($target,$token) = @_;
278: my $currentstring = '';
279: if ($target eq 'web') {
280: $currentstring = $token->[4];
281: }
282: return $currentstring;
283: }
284: sub end_html {
285: my ($target,$token) = @_;
286: my $currentstring = '';
287: if ($target eq 'web') {
288: $currentstring = $token->[2];
289: }
290: return $currentstring;
291: }
292: #-------------------------------------------------------------------------- <head> tag
293: sub start_head {
294: my ($target,$token) = @_;
295: my $currentstring = '';
296: if ($target eq 'web') {
297: $currentstring = $token->[4];
298: }
299: return $currentstring;
300: }
301: sub end_head {
302: my ($target,$token) = @_;
303: my $currentstring = '';
304: if ($target eq 'web') {
305: $currentstring = $token->[2];
306: }
307: return $currentstring;
308: }
309: #--------------------------------------------------------------------------- <map> tag
310: sub start_map {
311: my ($target,$token) = @_;
312: my $currentstring = '';
313: if ($target eq 'web') {
314: $currentstring = $token->[4];
315: }
316: return $currentstring;
317: }
318: sub end_map {
319: my ($target,$token) = @_;
320: my $currentstring = '';
321: if ($target eq 'web') {
322: $currentstring = $token->[2];
323: }
324: return $currentstring;
325: }
326: #------------------------------------------------------------------------ <applet> tag
327: sub start_applet {
328: my ($target,$token) = @_;
329: my $currentstring = '';
330: if ($target eq 'web') {
331: $currentstring = $token->[4];
332: }
333: return $currentstring;
334: }
335: sub end_applet {
336: my ($target,$token) = @_;
337: my $currentstring = '';
338: if ($target eq 'web') {
339: $currentstring = $token->[2];
340: }
341: return $currentstring;
342: }
343: #------------------------------------------------------------------------ <select> tag
344: sub start_select {
345: my ($target,$token) = @_;
346: my $currentstring = '';
347: if ($target eq 'web') {
348: $currentstring = $token->[4];
349: }
350: return $currentstring;
351: }
352: sub end_select {
353: my ($target,$token) = @_;
354: my $currentstring = '';
355: if ($target eq 'web') {
356: $currentstring = $token->[2];
357: }
358: return $currentstring;
359: }
360: #------------------------------------------------------------------------ <option> tag
361: sub start_option {
362: my ($target,$token) = @_;
363: my $currentstring = '';
364: if ($target eq 'web') {
365: $currentstring = $token->[4];
366: }
367: return $currentstring;
368: }
369: sub end_option {
370: my ($target,$token) = @_;
371: my $currentstring = '';
372: if ($target eq 'web') {
373: $currentstring = $token->[2];
374: }
375: return $currentstring;
376: }
377: #------------------------------------------------------------------------- <input> tag
378: sub start_input {
379: my ($target,$token) = @_;
380: my $currentstring = '';
381: if ($target eq 'web') {
382: $currentstring = $token->[4];
383: }
384: return $currentstring;
385: }
386: sub end_input {
387: my ($target,$token) = @_;
388: my $currentstring = '';
389: if ($target eq 'web') {
390: $currentstring = $token->[2];
391: }
392: return $currentstring;
393: }
394: #---------------------------------------------------------------------- <textarea> tag
395: sub start_textarea {
396: my ($target,$token) = @_;
397: my $currentstring = '';
398: if ($target eq 'web') {
399: $currentstring = $token->[4];
400: }
401: return $currentstring;
402: }
403: sub end_textarea {
404: my ($target,$token) = @_;
405: my $currentstring = '';
406: if ($target eq 'web') {
407: $currentstring = $token->[2];
408: }
409: return $currentstring;
410: }
411: #-------------------------------------------------------------------------- <form> tag
412: sub start_form {
413: my ($target,$token) = @_;
414: my $currentstring = '';
415: if ($target eq 'web') {
416: $currentstring = $token->[4];
417: }
418: return $currentstring;
419: }
420: sub end_form {
421: my ($target,$token) = @_;
422: my $currentstring = '';
423: if ($target eq 'web') {
424: $currentstring = $token->[2];
425: }
426: return $currentstring;
427: }
428: #------------------------------------------------------------------------- <title> tag
429: sub start_title {
430: my ($target,$token) = @_;
431: my $currentstring = '';
432: if ($target eq 'web') {
433: $currentstring = $token->[4];
434: }
435: return $currentstring;
436: }
437: sub end_title {
438: my ($target,$token) = @_;
439: my $currentstring = '';
440: if ($target eq 'web') {
441: $currentstring = $token->[2];
442: }
443: return $currentstring;
444: }
445: #-------------------------------------------------------------------------- <meta> tag
446: sub start_meta {
447: my ($target,$token) = @_;
448: my $currentstring = '';
449: if ($target eq 'web') {
450: $currentstring = $token->[4];
451: }
452: return $currentstring;
453: }
454: sub end_meta {
455: my ($target,$token) = @_;
456: my $currentstring = '';
457: if ($target eq 'web') {
458: $currentstring = $token->[2];
459: }
460: return $currentstring;
461: }
462: #-------------------------------------------------------------------------- <body> tag
463: sub start_body {
464: my ($target,$token) = @_;
465: my $currentstring = '';
466: if ($target eq 'web') {
467: $currentstring = $token->[4];
468: } elsif ($target eq 'tex') {
469: $currentstring = " \\begin{document} ";
470: }
471: return $currentstring;
472: }
473: sub end_body {
474: my ($target,$token) = @_;
475: my $currentstring = '';
476: if ($target eq 'web') {
477: $currentstring = $token->[2];
478: } elsif ($target eq 'tex') {
479: $currentstring = " \\end{document}";
480: }
481: return $currentstring;
482: }
483: #------------------------------------------------------------------------ <center> tag
484: sub start_center {
485: my ($target,$token) = @_;
486: my $currentstring = '';
487: if ($target eq 'web') {
488: $currentstring = $token->[4];
489: } elsif ($target eq 'tex') {
490: $currentstring = " \\begin{center} ";
491: }
492: return $currentstring;
493: }
494: sub end_center {
495: my ($target,$token) = @_;
496: my $currentstring = '';
497: if ($target eq 'web') {
498: $currentstring = $token->[2];
499: } elsif ($target eq 'tex') {
500: $currentstring = " \\end{center}";
501: }
502: return $currentstring;
503: }
504: #----------------------------------------------------------------------------- <b> tag
505: sub start_b {
506: my ($target,$token) = @_;
507: my $currentstring = '';
508: if ($target eq 'web') {
509: $currentstring = $token->[4];
510: } elsif ($target eq 'tex') {
511: $currentstring = " {\\bf ";
512: }
513: return $currentstring;
514: }
515: sub end_b {
516: my ($target,$token) = @_;
517: my $currentstring = '';
518: if ($target eq 'web') {
519: $currentstring = $token->[2];
520: } elsif ($target eq 'tex') {
521: $currentstring = "}";
522: }
523: return $currentstring;
524: }
525: #------------------------------------------------------------------------ <strong> tag
526: sub start_strong {
527: my ($target,$token) = @_;
528: my $currentstring = '';
529: if ($target eq 'web') {
530: $currentstring = $token->[4];
531: } elsif ($target eq 'tex') {
532: $currentstring = " {\\bf ";
533: }
534: return $currentstring;
535: }
536: sub end_strong {
537: my ($target,$token) = @_;
538: my $currentstring = '';
539: if ($target eq 'web') {
540:
541: $currentstring = $token->[2];
542: } elsif ($target eq 'tex') {
543: $currentstring = "}";
544: }
545: return $currentstring;
546: }
547: #---------------------------------------------------------------------------- <h1> tag
548: sub start_h1 {
549: my ($target,$token) = @_;
550: my $currentstring = '';
551: if ($target eq 'web') {
552: $currentstring .= $token->[4];
553: } elsif ($target eq 'tex') {
554: $currentstring .= "\\chapter{ ";
555: }
556: return $currentstring;
557: }
558: sub end_h1 {
559: my ($target,$token) = @_;
560: my $currentstring = '';
561: if ($target eq 'web') {
562: $currentstring .= $token->[2];
563: } elsif ($target eq 'tex') {
564: $currentstring .= "}";
565: }
566: return $currentstring;
567: }
568: #---------------------------------------------------------------------------- <h2> tag
569: sub start_h2 {
570: my ($target,$token) = @_;
571: my $currentstring = '';
572: if ($target eq 'web') {
573: $currentstring .= $token->[4];
574: } elsif ($target eq 'tex') {
575: $currentstring .= "\\section{ ";
576: }
577: return $currentstring;
578: }
579: sub end_h2 {
580: my ($target,$token) = @_;
581: my $currentstring = '';
582: if ($target eq 'web') {
583: $currentstring .= $token->[2];
584: } elsif ($target eq 'tex') {
585: $currentstring .= "}";
586: }
587: return $currentstring;
588: }
589: #---------------------------------------------------------------------------- <h3> tag
590: sub start_h3 {
591: my ($target,$token) = @_;
592: my $currentstring = '';
593: if ($target eq 'web') {
594: $currentstring .= $token->[4];
595: } elsif ($target eq 'tex') {
596: $currentstring .= "\\subsection{ ";
597: }
598: return $currentstring;
599: }
600: sub end_h3 {
601: my ($target,$token) = @_;
602: my $currentstring = '';
603: if ($target eq 'web') {
604: $currentstring .= $token->[2];
605: } elsif ($target eq 'tex') {
606: $currentstring .= "}";
607: }
608: return $currentstring;
609: }
610: #---------------------------------------------------------------------------- <h4> tag
611: sub start_h4 {
612: my ($target,$token) = @_;
613: my $currentstring = '';
614: if ($target eq 'web') {
615: $currentstring .= $token->[4];
616: } elsif ($target eq 'tex') {
617: $currentstring .= "\\subsubsection{ ";
618: }
619: return $currentstring;
620: }
621: sub end_h4 {
622: my ($target,$token) = @_;
623: my $currentstring = '';
624: if ($target eq 'web') {
625: $currentstring .= $token->[2];
626: } elsif ($target eq 'tex') {
627: $currentstring .= "}";
628: }
629: return $currentstring;
630: }
631: #---------------------------------------------------------------------------- <h5> tag
632: sub start_h5 {
633: my ($target,$token) = @_;
634: my $currentstring = '';
635: if ($target eq 'web') {
636: $currentstring .= $token->[4];
637: } elsif ($target eq 'tex') {
638: $currentstring .= "\\paragraph{ ";
639: }
640: return $currentstring;
641: }
642: sub end_h5 {
643: my ($target,$token) = @_;
644: my $currentstring = '';
645: if ($target eq 'web') {
646: $currentstring .= $token->[2];
647: } elsif ($target eq 'tex') {
648: $currentstring .= "}";
649: }
650: return $currentstring;
651: }
652: #---------------------------------------------------------------------------- <h6> tag
653: sub start_h6 {
654: my ($target,$token) = @_;
655: my $currentstring = '';
656: if ($target eq 'web') {
657: $currentstring .= $token->[4];
658: } elsif ($target eq 'tex') {
659: $currentstring .= "\\subparagraph{ ";
660: }
661: return $currentstring;
662: }
663: sub end_h6 {
664: my ($target,$token) = @_;
665: my $currentstring = '';
666: if ($target eq 'web') {
667: $currentstring .= $token->[2];
668: } elsif ($target eq 'tex') {
669: $currentstring .= "}";
670: }
671: return $currentstring;
672: }
673: #-------------------------------------------------------------------------- <cite> tag
674: sub start_cite {
675: my ($target,$token) = @_;
676: my $currentstring = '';
677: if ($target eq 'web') {
678: $currentstring .= $token->[4];
679: } elsif ($target eq 'tex') {
680: $currentstring .= "{ \\it ";
681: }
682: return $currentstring;
683: }
684: sub end_cite {
685: my ($target,$token) = @_;
686: my $currentstring = '';
687: if ($target eq 'web') {
688: $currentstring .= $token->[2];
689: } elsif ($target eq 'tex') {
690: $currentstring .= "}";
691: }
692: return $currentstring;
693: }
694: #----------------------------------------------------------------------------- <i> tag
695: sub start_i {
696: my ($target,$token) = @_;
697: my $currentstring = '';
698: if ($target eq 'web') {
699: $currentstring .= $token->[4];
700: } elsif ($target eq 'tex') {
701: $currentstring .= "{ \\it ";
702: }
703: return $currentstring;
704: }
705: sub end_i {
706: my ($target,$token) = @_;
707: my $currentstring = '';
708: if ($target eq 'web') {
709: $currentstring .= $token->[2];
710: } elsif ($target eq 'tex') {
711: $currentstring .= "}";
712: }
713: return $currentstring;
714: }
715: #----------------------------------------------------------------------- <address> tag
716: sub start_address {
717: my ($target,$token) = @_;
718: my $currentstring = '';
719: if ($target eq 'web') {
720: $currentstring .= $token->[4];
721: } elsif ($target eq 'tex') {
722: $currentstring .= "{ \\it ";
723: }
724: return $currentstring;
725: }
726: sub end_address {
727: my ($target,$token) = @_;
728: my $currentstring = '';
729: if ($target eq 'web') {
730: $currentstring .= $token->[2];
731: } elsif ($target eq 'tex') {
732: $currentstring .= "}";
733: }
734: return $currentstring;
735: }
736: #--------------------------------------------------------------------------- <dfn> tag
737: sub start_dfn {
738: my ($target,$token) = @_;
739: my $currentstring = '';
740: if ($target eq 'web') {
741: $currentstring .= $token->[4];
742: } elsif ($target eq 'tex') {
743: $currentstring .= "{ \\it ";
744: }
745: return $currentstring;
746: }
747: sub end_dfn {
748: my ($target,$token) = @_;
749: my $currentstring = '';
750: if ($target eq 'web') {
751: $currentstring .= $token->[2];
752: } elsif ($target eq 'tex') {
753: $currentstring .= "}";
754: }
755: return $currentstring;
756: }
757: #---------------------------------------------------------------------------- <tt> tag
758: sub start_tt {
759: my ($target,$token) = @_;
760: my $currentstring = '';
761: if ($target eq 'web') {
762: $currentstring .= $token->[4];
763: } elsif ($target eq 'tex') {
764: $currentstring .= "{ \\tt ";
765: }
766: return $currentstring;
767: }
768: sub end_tt {
769: my ($target,$token) = @_;
770: my $currentstring = '';
771: if ($target eq 'web') {
772: $currentstring .= $token->[2];
773: } elsif ($target eq 'tex') {
774: $currentstring .= "}";
775: }
776: return $currentstring;
777: }
778: #---------------------------------------------------------------------------- <kbd> tag
779: sub start_kbd {
780: my ($target,$token) = @_;
781: my $currentstring = '';
782: if ($target eq 'web') {
783: $currentstring .= $token->[4];
784: } elsif ($target eq 'tex') {
785: $currentstring .= "{ \\tt ";
786: }
787: return $currentstring;
788: }
789: sub end_kbd {
790: my ($target,$token) = @_;
791: my $currentstring = '';
792: if ($target eq 'web') {
793: $currentstring .= $token->[2];
794: } elsif ($target eq 'tex') {
795: $currentstring .= "}";
796: }
797: return $currentstring;
798: }
799: #-------------------------------------------------------------------------- <code> tag
800: sub start_code {
801: my ($target,$token) = @_;
802: my $currentstring = '';
803: if ($target eq 'web') {
804: $currentstring .= $token->[4];
805: } elsif ($target eq 'tex') {
806: $currentstring .= "{ \\tt ";
807: }
808: return $currentstring;
809: }
810: sub end_code {
811: my ($target,$token) = @_;
812: my $currentstring = '';
813: if ($target eq 'web') {
814: $currentstring .= $token->[2];
815: } elsif ($target eq 'tex') {
816: $currentstring .= "}";
817: }
818: return $currentstring;
819: }
820: #---------------------------------------------------------------------------- <em> tag
821: sub start_em {
822: my ($target,$token) = @_;
823: my $currentstring = '';
824: if ($target eq 'web') {
825: $currentstring .= $token->[4];
826: } elsif ($target eq 'tex') {
827: $currentstring .= "{ \\emph ";
828: }
829: return $currentstring;
830: }
831: sub end_em {
832: my ($target,$token) = @_;
833: my $currentstring = '';
834: if ($target eq 'web') {
835: $currentstring .= $token->[2];
836: } elsif ($target eq 'tex') {
837: $currentstring .= "}";
838: }
839: return $currentstring;
840: }
841: #----------------------------------------------------------------------------- <q> tag
842: sub start_q {
843: my ($target,$token) = @_;
844: my $currentstring = '';
845: if ($target eq 'web') {
846: $currentstring .= $token->[4];
847: } elsif ($target eq 'tex') {
848: $currentstring .= "{ \\emph ";
849: }
850: return $currentstring;
851: }
852: sub end_q {
853: my ($target,$token) = @_;
854: my $currentstring = '';
855: if ($target eq 'web') {
856: $currentstring .= $token->[2];
857: } elsif ($target eq 'tex') {
858: $currentstring .= "}";
859: }
860: return $currentstring;
861: }
862: #----------------------------------------------------------------------------- <p> tag
863: sub start_p {
864: my ($target,$token) = @_;
865: my $currentstring = '';
866: if ($target eq 'web') {
867: $currentstring .= $token->[4];
868: } elsif ($target eq 'tex') {
869: $currentstring .= "{\\par ";
870: }
871: return $currentstring;
872: }
873: sub end_p {
874: my ($target,$token) = @_;
875: my $currentstring = '';
876: if ($target eq 'web') {
877: $currentstring .= $token->[2];
878: } elsif ($target eq 'tex') {
879: $currentstring .= " }";
880: }
881: return $currentstring;
882: }
883: #---------------------------------------------------------------------------- <br> tag
884: sub start_br {
885: my ($target,$token) = @_;
886: my $currentstring = '';
887: if ($target eq 'web') {
888: $currentstring .= $token->[4];
889: } elsif ($target eq 'tex') {
890: $currentstring .= "\\\\";
891: }
892: return $currentstring;
893: }
894: sub end_br {
895: my ($target,$token) = @_;
896: my $currentstring = '';
897: if ($target eq 'web') {
898: $currentstring .= $token->[2];
899: }
900: return $currentstring;
901: }
902: #--------------------------------------------------------------------------- <big> tag
903: sub start_big {
904: my ($target,$token) = @_;
905: my $currentstring = '';
906: if ($target eq 'web') {
907: $currentstring .= $token->[4];
908: } elsif ($target eq 'tex') {
909: $currentstring .= "{\\large ";
910: }
911: return $currentstring;
912: }
913: sub end_big {
914: my ($target,$token) = @_;
915: my $currentstring = '';
916: if ($target eq 'web') {
917: $currentstring .= $token->[2];
918: } elsif ($target eq 'tex') {
919: $currentstring .= " }";
920: }
921: return $currentstring;
922: }
923: #------------------------------------------------------------------------- <small> tag
924: sub start_small {
925: my ($target,$token) = @_;
926: my $currentstring = '';
927: if ($target eq 'web') {
928: $currentstring .= $token->[4];
929: } elsif ($target eq 'tex') {
930: $currentstring .= "{\\footnotesize ";
931: }
932: return $currentstring;
933: }
934: sub end_small {
935: my ($target,$token) = @_;
936: my $currentstring = '';
937: if ($target eq 'web') {
938: $currentstring .= $token->[2];
939: } elsif ($target eq 'tex') {
940: $currentstring .= " }";
941: }
942: return $currentstring;
943: }
944: #---------------------------------------------------------------------- <basefont> tag
945: sub start_basefont {
946: my ($target,$token) = @_;
947: my $currentstring = '';
948: if ($target eq 'web') {
949: $currentstring = $token->[4];
950: }
951: return $currentstring;
952: }
953: #-------------------------------------------------------------------------- <font> tag
954: sub start_font {
955: my ($target,$token) = @_;
956: my $currentstring = '';
957: if ($target eq 'web') {
958: $currentstring = $token->[4];
959: }
960: return $currentstring;
961: }
962: sub end_font {
963: my ($target,$token) = @_;
964: my $currentstring = '';
965: if ($target eq 'web') {
966: $currentstring = $token->[2];
967: }
968: return $currentstring;
969: }
970: #------------------------------------------------------------------------ <strike> tag
971: sub start_strike {
972: my ($target,$token) = @_;
973: my $currentstring = '';
974: if ($target eq 'web') {
975: $currentstring .= $token->[4];
976: } elsif ($target eq 'tex') {
977: $currentstring .= "{\\underline ";
978: }
979: return $currentstring;
980: }
981: sub end_strike {
982: my ($target,$token) = @_;
983: my $currentstring = '';
984: if ($target eq 'web') {
985: $currentstring .= $token->[2];
986: } elsif ($target eq 'tex') {
987: $currentstring .= " }";
988: }
989: return $currentstring;
990: }
991: #----------------------------------------------------------------------------- <s> tag
992: sub start_s {
993: my ($target,$token) = @_;
994: my $currentstring = '';
995: if ($target eq 'web') {
996: $currentstring .= $token->[4];
997: } elsif ($target eq 'tex') {
998: $currentstring .= "{\\underline ";
999: }
1000: return $currentstring;
1001: }
1002: sub end_s {
1003: my ($target,$token) = @_;
1004: my $currentstring = '';
1005: if ($target eq 'web') {
1006: $currentstring .= $token->[2];
1007: } elsif ($target eq 'tex') {
1008: $currentstring .= " }";
1009: }
1010: return $currentstring;
1011: }
1012: #--------------------------------------------------------------------------- <sub> tag
1013: sub start_sub {
1014: my ($target,$token) = @_;
1015: my $currentstring = '';
1016: if ($target eq 'web') {
1017: $currentstring .= $token->[4];
1018: } elsif ($target eq 'tex') {
1019: $currentstring .= "\$_{ ";
1020: }
1021: return $currentstring;
1022: }
1023: sub end_sub {
1024: my ($target,$token) = @_;
1025: my $currentstring = '';
1026: if ($target eq 'web') {
1027: $currentstring .= $token->[2];
1028: } elsif ($target eq 'tex') {
1029: $currentstring .= " }\$";
1030: }
1031: return $currentstring;
1032: }
1033: #--------------------------------------------------------------------------- <sup> tag
1034: sub start_sup {
1035: my ($target,$token) = @_;
1036: my $currentstring = '';
1037: if ($target eq 'web') {
1038: $currentstring .= $token->[4];
1039: } elsif ($target eq 'tex') {
1040: $currentstring .= "\$^{ ";
1041: }
1042: return $currentstring;
1043: }
1044: sub end_sup {
1045: my ($target,$token) = @_;
1046: my $currentstring = '';
1047: if ($target eq 'web') {
1048: $currentstring .= $token->[2];
1049: } elsif ($target eq 'tex') {
1050: $currentstring .= " }\$";
1051: }
1052: return $currentstring;
1053: }
1054: #---------------------------------------------------------------------------- <hr> tag
1055: sub start_hr {
1056: my ($target,$token) = @_;
1057: my $currentstring = '';
1058: if ($target eq 'web') {
1059: $currentstring .= $token->[4];
1060: } elsif ($target eq 'tex') {
1061: $currentstring .= "\\hline ";
1062: }
1063: return $currentstring;
1064: }
1065: #----------------------------------------------------------------------------- <a> tag
1066: sub start_a {
1067: my ($target,$token) = @_;
1068: my $currentstring = '';
1069: if ($target eq 'web') {
1070: $currentstring .= $token->[4];
1071: } elsif ($target eq 'tex') {
1072: }
1073: return $currentstring;
1074: }
1075: sub end_a {
1076: my ($target,$token,$stackref) = @_;
1077: my $currentstring = '';
1078: if ($target eq 'web') {
1079: $currentstring .= $token->[2];
1080: } elsif ($target eq 'tex') {
1081: my $tempor_var = $stackref->[$#$stackref];
1082: if (index($tempor_var,'name') != -1 ) {
1083: $tempor_var =~ s/name=([^,]*),/$1/g;
1084: $currentstring .= " \\label{$tempor_var}";
1085: } elsif (index($tempor_var,'href') != -1 ) {
1086: $tempor_var =~ s/href=([^,]*),/$1/g;
1087: $currentstring .= " \\ref{$tempor_var}";
1088: }
1089: }
1090: return $currentstring;
1091: }
1092: #---------------------------------------------------------------------------- <li> tag
1093: sub start_li {
1094: my ($target,$token,$stackref) = @_;
1095: my $currentstring = '';
1096: if ($target eq 'web') {
1097: $currentstring = $token->[4];
1098: } elsif ($target eq 'tex') {
1099: my $tempor_var = $stackref->[$#$stackref-1];
1100: if (index($tempor_var,'circle') != -1 ) {
1101: $currentstring .= " \\item[o] ";
1102: } elsif (index($tempor_var,'square') != -1 ) {
1103: $currentstring .= " \\item[$\Box$] ";
1104: } else {
1105: $currentstring .= " \\item ";
1106: }
1107: }
1108: return $currentstring;
1109: }
1110: sub end_li {
1111: my ($target,$token) = @_;
1112: my $currentstring = '';
1113: if ($target eq 'web') {
1114: $currentstring = $token->[2];
1115: }
1116: return $currentstring;
1117: }
1118: #----------------------------------------------------------------------------- <u> tag
1119: sub start_u {
1120: my ($target,$token) = @_;
1121: my $currentstring = '';
1122: if ($target eq 'web') {
1123: $currentstring .= $token->[4];
1124: } elsif ($target eq 'tex') {
1125: $currentstring .= "{\\underline ";
1126: }
1127: return $currentstring;
1128: }
1129: sub end_u {
1130: my ($target,$token) = @_;
1131: my $currentstring = '';
1132: if ($target eq 'web') {
1133: $currentstring .= $token->[2];
1134: } elsif ($target eq 'tex') {
1135: $currentstring .= " }";
1136: }
1137: return $currentstring;
1138: }
1139: #---------------------------------------------------------------------------- <ul> tag
1140: sub start_ul {
1141: my ($target,$token) = @_;
1142: my $currentstring = '';
1143: if ($target eq 'web') {
1144: $currentstring = $token->[4];
1145: } elsif ($target eq 'tex') {
1146: $currentstring = " \\begin{itemize} ";
1147: }
1148: return $currentstring;
1149: }
1150: sub end_ul {
1151: my ($target,$token) = @_;
1152: my $currentstring = '';
1153: if ($target eq 'web') {
1154: $currentstring = $token->[2];
1155: } elsif ($target eq 'tex') {
1156: $currentstring = " \\end{itemize}";
1157: }
1158: return $currentstring;
1159: }
1160: #-------------------------------------------------------------------------- <menu> tag
1161: sub start_menu {
1162: my ($target,$token) = @_;
1163: my $currentstring = '';
1164: if ($target eq 'web') {
1165: $currentstring = $token->[4];
1166: } elsif ($target eq 'tex') {
1167: $currentstring = " \\begin{itemize} ";
1168: }
1169: return $currentstring;
1170: }
1171: sub end_menu {
1172: my ($target,$token) = @_;
1173: my $currentstring = '';
1174: if ($target eq 'web') {
1175: $currentstring = $token->[2];
1176: } elsif ($target eq 'tex') {
1177: $currentstring = " \\end{itemize}";
1178: }
1179: return $currentstring;
1180: }
1181: #--------------------------------------------------------------------------- <dir> tag
1182: sub start_dir {
1183: my ($target,$token) = @_;
1184: my $currentstring = '';
1185: if ($target eq 'web') {
1186: $currentstring = $token->[4];
1187: } elsif ($target eq 'tex') {
1188: $currentstring = " \\begin{itemize} ";
1189: }
1190: return $currentstring;
1191: }
1192: sub end_dir {
1193: my ($target,$token) = @_;
1194: my $currentstring = '';
1195: if ($target eq 'web') {
1196: $currentstring = $token->[2];
1197: } elsif ($target eq 'tex') {
1198: $currentstring = " \\end{itemize}";
1199: }
1200: return $currentstring;
1201: }
1202: #---------------------------------------------------------------------------- <ol> tag
1203: sub start_ol {
1204: my ($target,$token) = @_;
1205: my $currentstring = '';
1206: if ($target eq 'web') {
1207: $currentstring = $token->[4];
1208: } elsif ($target eq 'tex') {
1209: $currentstring = " \\begin{enumerate} ";
1210: }
1211: return $currentstring;
1212: }
1213: sub end_ol {
1214: my ($target,$token) = @_;
1215: my $currentstring = '';
1216: if ($target eq 'web') {
1217: $currentstring = $token->[2];
1218: } elsif ($target eq 'tex') {
1219: $currentstring = " \\end{enumerate}";
1220: }
1221: return $currentstring;
1222: }
1223: #---------------------------------------------------------------------------- <dl> tag
1224: sub start_dl {
1225: my ($target,$token) = @_;
1226: my $currentstring = '';
1227: if ($target eq 'web') {
1228: $currentstring = $token->[4];
1229: } elsif ($target eq 'tex') {
1230: $currentstring = " \\begin{description} ";
1231: }
1232: return $currentstring;
1233: }
1234: sub end_dl {
1235: my ($target,$token) = @_;
1236: my $currentstring = '';
1237: if ($target eq 'web') {
1238: $currentstring = $token->[2];
1239: } elsif ($target eq 'tex') {
1240: $currentstring = " \\end{description}";
1241: }
1242: return $currentstring;
1243: }
1244: #---------------------------------------------------------------------------- <dt> tag
1245: sub start_dt {
1246: my ($target,$token) = @_;
1247: my $currentstring = '';
1248: if ($target eq 'web') {
1249: $currentstring = $token->[4];
1250: } elsif ($target eq 'tex') {
1251: $currentstring = "\\item[ ";
1252: }
1253: return $currentstring;
1254: }
1255: sub end_dt {
1256: my ($target,$token) = @_;
1257: my $currentstring = '';
1258: if ($target eq 'web') {
1259: $currentstring = $token->[2];
1260: } elsif ($target eq 'tex') {
1261: $currentstring = "]";
1262: }
1263: return $currentstring;
1264: }
1265: #---------------------------------------------------------------------------- <dd> tag
1266: sub start_dd {
1267: my ($target,$token) = @_;
1268: my $currentstring = '';
1269: if ($target eq 'web') {
1270: $currentstring = $token->[4];
1271: }
1272: return $currentstring;
1273: }
1274: sub end_dd {
1275: my ($target,$token) = @_;
1276: my $currentstring = '';
1277: if ($target eq 'web') {
1278: $currentstring = $token->[2];
1279: }
1280: return $currentstring;
1281: }
1282: #------------------------------------------------------------------------- <table> tag
1283: sub start_table {
1284: my ($target,$token) = @_;
1285: my $currentstring = '';
1286: if ($target eq 'web') {
1287: $currentstring = $token->[4];
1288: } elsif ($target eq 'tex') {
1289: $currentstring = " \\begin{tabular} ";
1290: }
1291: return $currentstring;
1292: }
1293: sub end_table {
1294: my ($target,$token) = @_;
1295: my $currentstring = '';
1296: if ($target eq 'web') {
1297: $currentstring = $token->[2];
1298: } elsif ($target eq 'tex') {
1299: $currentstring = " \\end{tabular}";
1300: }
1301: return $currentstring;
1302: }
1303:
1304: 1;
1305: __END__
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>