1# bdefinitions.perl
2#    by Philippe Chauvat <philippe@chauvat.eu>
3# This file is designed to support the builing of Bacula (http://www.bacula.org) and/or
4# Bacula Enterprise Edition (http://www.baculasystems.com) manuals.
5# Support of the bdefinitions.sty Bacula package
6# ======================================================================
7# Does not require any package => do_require_package('') ;
8
9
10
11# Package Options
12#No package options
13#sub do_bdefinitions_option {}
14
15# ======================================================================
16sub bnext_arg { # Modifies $_
17    #
18    # This is a whole duplicate of the x_next_arg function
19    # defined in the graphics-support.perl file.
20    # I renamed it to be:
21    # a) consistent with the other definitions
22    # b) be sure there will be no conflict with anything else.
23    my $arg;
24    &missing_braces unless ((s/$next_pair_pr_rx/$arg=$2;''/e)
25			    ||(s/$next_pair_rx/$arg=$2;''/e));
26    $arg;
27}
28
29sub do_cmd_bfilename {
30    local($_)=@_;
31    my $file = &bnext_arg();
32    &styled_text_chunk('','','','','','bfilename',@_) ;
33}
34sub bfilename {
35    local($btext)= @_ ;
36    join('','<span class="bfilename">', $btext, '</span>') ;
37}
38
39sub do_cmd_btable {
40    local($_)=@_;
41    my $file = &bnext_arg();
42    &styled_text_chunk('','','','','','btable',@_) ;
43}
44sub btable {
45    local($btext)= @_ ;
46    join('','<span class="btable">', $btext, '</span>') ;
47}
48
49sub do_cmd_bdirectoryname {
50    local($_)=@_;
51    my $file = &bnext_arg();
52    &styled_text_chunk('','','','','','bdirectoryname',@_) ;
53}
54sub bdirectoryname {
55    local($btext)= @_ ;
56    join('','<span class="bdirectoryname">', $btext, '</span>') ;
57}
58
59sub do_cmd_bdirectory {
60    local($_)=@_;
61    my $file = &bnext_arg() ;
62     &styled_text_chunk('','','','','','bdirectory',@_) ;
63}
64sub bdirectory {
65    local($btext)= @_ ;
66    join(' ',eval("&bdirectoryname(\$btext)"),'directory') ;
67}
68
69sub do_cmd_bdirectivename {
70    local($_)=@_;
71    my $file = &bnext_arg();
72    &styled_text_chunk('','','','','','bdirectivename',@_) ;
73}
74sub bdirectivename {
75    local($btext)=@_;
76    join('','<span class="bdirectivename">', $btext, '</span>') ;
77}
78sub do_cmd_bdirective {
79    local($_)=@_;
80    my $file = &bnext_arg() ;
81    &styled_text_chunk('','','','','','bdirective',@_) ;
82}
83sub bdirective {
84    local($btext)= @_ ;
85    join(' ',eval("&bdirectivename(\$btext)"),'directive') ;
86}
87
88sub do_cmd_bPool {
89    join('','<span class="bresourcename">','Pool','</span>',$_[0]) ;
90}
91sub do_cmd_bConsole {
92    join('','<span class="bresourcename">','Console','</span>',$_[0]) ;
93}
94sub do_cmd_bCatalog {
95    join('','<span class="bresourcename">','Catalog','</span>',$_[0]) ;
96}
97sub do_cmd_bJob     {
98    join('','<span class="bresourcename">','Job','</span>',$_[0]) ;
99}
100sub do_cmd_bVolume  {
101    join('','<span class="bresourcename">','Volume','</span>',$_[0]) ;
102}
103sub do_cmd_bDevice  {
104    join('','<span class="bresourcename">','Device','</span>',$_[0]) ;
105}
106sub do_cmd_bFileSet {
107    join('','<span class="bresourcename">','FileSet','</span>',$_[0]) ;
108}
109sub do_cmd_bStorage {
110    join('','<span class="bresourcename">','Storage','</span>',$_[0]) ;
111}
112sub do_cmd_bJobId {
113    join('','<span class="bresourcename">','JobId','</span>',$_[0]) ;
114}
115sub do_cmd_bClient {
116    join('','<span class="bresourcename">','Client','</span>',$_[0]) ;
117}
118sub do_cmd_bDirector {
119    join('','<span class="bdaemon">','Director','</span>',$_[0]) ;
120}
121sub do_cmd_bconsolename {
122    join('','<span class="btool">','bconsole','</span>',$_[0]) ;
123}
124sub do_cmd_bconsole {
125    join('',bbacula(),'<span class="bcommandname">',' ','Console','</span>',$_[0]) ;
126}
127sub do_cmd_bstructurename {
128    local($_)=@_;
129    my $file = &bnext_arg();
130    &styled_text_chunk('','','','','','bstructurename',@_) ;
131}
132sub bstructurename {
133    local($btext)= @_ ;
134    join('','<span class="bstructurename">',$btext,'</span>') ;
135}
136sub do_cmd_bstructure {
137    local($_)=@_;
138    my $mybstructure = &bnext_arg() ;
139    &styled_text_chunk('','','','','','bstructure',@_) ;
140}
141sub bstructure {
142    local($btext)= @_ ;
143    join(' ',eval("&bstructurename(\$btext)"),'structure') ;
144}
145sub do_cmd_bresourcename {
146    local($_)=@_;
147    my $file = &bnext_arg();
148    &styled_text_chunk('SPAN','CLASS="bresourcename"','','','','',@_) ;
149}
150sub bresourcename {
151    local($mybresource) = @_ ;
152    join('','<span class="bresourcename">',$mybresource,'</span>') ;
153}
154sub bstatus {
155    local($mybstatus) = @_ ;
156    join('','<span class="bstatus">',$mybstatus,'</span>') ;
157}
158sub bjobtype {
159    local($mybjobtype) = @_ ;
160    join('','<span class="bjobtype">',$mybjobtype,'</span>') ;
161}
162sub do_cmd_bresource {
163    local($_)=@_;
164    my $file = &bnext_arg() ;
165    &styled_text_chunk('','','','','','bresource',@_) ;
166}
167sub bresource {
168    local($btext)= @_ ;
169    join(' ',eval("&bresourcename(\$btext)"),'resource') ;
170}
171sub do_cmd_bresources {
172    local($_)=@_;
173    my $file = &bnext_arg() ;
174    &styled_text_chunk('','','','','','bresources',@_) ;
175}
176sub bresources {
177    local($btext)= @_ ;
178    join('',eval("&bresource(\$btext)"),'s') ;
179}
180sub do_cmd_bresourceq {
181    local($_)=@_;
182    my $file = &bnext_arg() ;
183    &styled_text_chunk('','','','','','bresourceq',@_) ;
184}
185sub bresourceq {
186    local($btext)= @_ ;
187    $btext = join('',$btext,"'s") ;
188    join(' ',eval("&bresourcename(\$btext)"),'resource') ;
189}
190sub do_cmd_bcommandname {
191    local($_)=@_;
192    my $file = &bnext_arg();
193    &styled_text_chunk('','','','','','bcommandname',@_) ;
194}
195sub bcommandname {
196    local($mybcommand) = @_ ;
197    join('','<span class="bcommandname">',$mybcommand,'</span>') ;
198}
199sub do_cmd_bcommand {
200    local($_)=@_;
201    my $file = &bnext_arg() ;
202    &styled_text_chunk('','','','','','bcommand',@_) ;
203}
204sub bcommand {
205    local($btext)= @_ ;
206    join('',eval("&bcommandname(\$btext)"),' command') ;
207}
208sub do_cmd_btool {
209    local($_)=@_;
210    my $tool = &bnext_arg() ;
211    &styled_text_chunk('','','','','','btool',@_) ;
212}
213sub btool {
214    local($btext) = @_;
215    print "PCT: btool: text: $text\n" if ($VERBOSITY > 10) ;
216    join('','<span class="btool">',$btext,'</span>') ;
217}
218sub do_cmd_bbracket {
219    local($_)=@_;
220    my $bracket = &bnext_arg() ;
221    &styled_text_chunk('','','','','','bbracket',@_) ;
222}
223sub bbracket {
224    local($btext)= @_ ;
225    join('','<span class="bbracket">&lt;',$btext,'&gt;</span>') ;
226}
227sub do_cmd_bvalue {
228    local($_)=@_;
229    my $value = &bnext_arg();
230    &styled_text_chunk('','','','','','bvalue',@_) ;
231}
232sub bvalue {
233    local($btext) = @_;
234    join('','<span class="bvalue">',$btext,'</span>') ;
235}
236sub do_cmd_bhighlight {
237    local($_)=@_;
238    my $value = &bnext_arg();
239    &styled_text_chunk('','','','','','bhighlight',@_) ;
240}
241sub bhighlight {
242    local($btext) = @_;
243    join('','<span class="bhighlight">',$btext,'</span>') ;
244}
245sub do_cmd_bkeyword {
246    local($_)=@_;
247    my $value = &bnext_arg();
248    &styled_text_chunk('','','','','','bkeyword',@_) ;
249}
250##
251## bkeyword is defined the same as bvalue
252sub bkeyword {
253    local($btext) = @_;
254    join('','<span class="bvalue">',$btext,'</span>') ;
255}
256sub do_cmd_bdefaultvalue {
257    local($_)=@_;
258    my $value = &bnext_arg();
259    &styled_text_chunk('','','','','','bdefaultvalue',@_) ;
260}
261sub bdefaultvalue {
262    local($btext) = @_;
263    join('','<span class="bdefaultvalue">',$btext,'</span>') ;
264}
265sub do_cmd_bacula {
266    local($_)=@_;
267    my $bbacula = &bnext_arg();
268    &styled_text_chunk('','','','','','bbacula',@_) ;
269}
270sub bbacula {
271    local($_)=@_;
272    join('','<span class="bbacula">','Bacula','</span>') ;
273}
274sub do_cmd_baculasystems{
275    join('','<a class="baculasystems" href="http://www.baculasystems.com">','Bacula Systems','</a>',$_[0]);
276}
277sub do_cmd_bweb{
278    join('','<span class="bweb">BWeb</span>',$_[0]);
279}
280sub do_cmd_mssql{
281    join('','<span class="bsqltool">MSSQL</span>',$_[0]);
282}
283sub do_cmd_postgresql {
284    join('','<span class="bsqltool">PostgreSQL</span>',$_[0]);
285}
286sub do_cmd_mysql {
287    join('','<span class="bsqltool">MySQL</span>',$_[0]);
288}
289sub do_cmd_sqlite {
290    join('','<span class="bsqltool">SQLite</span>',$_[0]);
291}
292
293sub do_cmd_bnextpage {
294    # We don't do nothing with it..
295}
296sub do_cmd_byesorno {
297    join('','<span class="byesorno">&lt;yes|no&gt;</span>',$_[0]);
298}
299sub do_cmd_bzeroone {
300    join('','<span class="bzeroone">&lt;0|1&gt;</span>',$_[0]);
301}
302sub do_cmd_gt {
303    join('',"&gt;",$_[0]);
304}
305sub do_cmd_lt {
306    join('',"&lt;",$_[0]);
307}
308#
309# Manual names
310sub buildmanualname {
311    local($mymanual) = @_ ;
312    my $bacula = bbacula() ;
313    my $bedition = &do_cmd_beditionname() ;
314    join('','<span class="bmanualname">',$bacula,' ',$bedition,' ',$mymanual,'</span>');
315}
316sub do_cmd_bmainman {
317    $mybuild = buildmanualname("Main manual") ;
318    join('',$mybuild,$_[0]);
319}
320sub do_cmd_bconsoleman {
321    $mybuild = buildmanualname("Console manual") ;
322    join('',$mybuild,$_[0]);
323}
324sub do_cmd_bdevelman {
325    $mybuild = buildmanualname("Developer's manual") ;
326    join('',$mybuild,$_[0]);
327}
328sub do_cmd_butilityman {
329    $mybuild = buildmanualname("Utility Programs manual") ;
330    join('',$mybuild,$_[0]);
331}
332#
333#sub do_cmd_bproblemsman {
334#    &do_cmd_bproblemman() ;
335#}
336sub do_cmd_bproblemman {
337    $mybuild = buildmanualname("Problems Resolution guide") ;
338    join('',$mybuild,$_[0]);
339}
340sub do_cmd_bmiscman {
341    $mybuild = buildmanualname("Miscellaneous guide") ;
342    join('',$mybuild,$_[0]);
343}
344
345sub do_cmd_bregistered {
346    join('',"&reg;",$_[0]);
347}
348sub do_cmd_bstar {
349    join('',"&starf;",$_[0]);
350}
351sub do_cmd_vb {
352    join('',"&#124;",$_[0]);
353}
354sub url {
355    local($burl) = @_ ;
356    join('','<a href="',$burl,'">',$burl,'</a>') ;
357}
358sub do_cmd_bcopyright {
359    join('',"&copy;",$_[0]);
360}
361sub do_cmd_byear {
362    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) ;
363    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
364    $year += 1900 ;
365    join('',$year,$_[0]);
366}
367sub do_cmd_btitlelogo {
368    print "PCT: ALERT! do_cmd_btitlelogo: Is this used ?\n" ;
369    join('',
370	 # Logo and documentation title
371	 '<div class="bsys_topclass" id="bsys_topid">',
372	 '<img alt="BaculaSystems Logo" id="bsys_logo" src="blogo-header.png" />',
373	 '<img alt="BaculaSystems Documentation text" id="bsys_doctitle" src="btitle-header.png" />',
374	 '</div>',
375	 # Breadcrumbs and search field
376	 '<div class="bsys_breadnsearchclass" id="bsys_breadnsearchid">',
377	 '<div class="bsys_searchclass" id="bsys_searchid">',
378	 '<span class="bsys_searchtitleclass" id="bsys_searchtitleid">Search</span>',
379	 '<input class="bsys_searchfieldclass" id="bsys_searchfieldid" type="text" value="Type your text here" />',
380	 '</div>',
381	 '<div class="bsys_breadcrumbsclass" id="bsys_breadcrumbsid">',
382	 '<p class="bsys_breadcrumbscontentclass" id="bsys_breadcrumbscontentid">Main</p>',
383	 '</div>',
384	 '</div>',
385	 $_[0]) ;
386}
387
388sub do_cmd_bru{
389    join('','<span class="btool">bru</span>',$_[0]) ;
390}
391
392sub do_cmd_bdump {
393    join('','<span class="btool">dump</span>',$_[0]) ;
394}
395sub do_cmd_tar {
396    join('','<span class="btool">tar</span>',$_[0]) ;
397}
398
399sub do_cmd_mtx {
400    join('','<span class="btool">mtx</span>',$_[0]) ;
401}
402
403sub do_cmd_mtxchanger {
404    join('','<span class="btool">mtx-changer</span>',$_[0]) ;
405}
406
407sub do_cmd_bat {
408    join('',eval("&bacs('BAT')"),$_[0]) ;
409}
410#
411# Acronyms
412sub bacs {
413    local($bkey)=@_ ;
414    print "PCT: bacs: key: >$bkey< @_\n" if ($VERBOSITY > 20) ;
415    join('','<a class="bacronyms" href="Acronyms.html#', eval("&make_acronym_id(\$bkey)"),'">',$bkey,"</a>") ;
416}
417sub do_cmd_acs {
418    local($_)=@_;
419    &styled_text_chunk('','','','','','bacs',$_[0]) ;
420}
421sub bacsp {
422    local($bkey) = @_ ;
423    join('','<a class="bacronyms" href="Acronyms.html#',eval("&make_acronym_id($bkey)"),'">',$bkey,'s</a>') ; #,$_[0]) ;
424}
425sub do_cmd_acsp {
426    local($_)=@_;
427    my $bkey = &bnext_arg();
428    &styled_text_chunk('','','','','','bacsp',$_[0]) ;
429}
430sub bac {
431    local($bkey)=@_;
432    my $bvalue = $bkey ;
433    if ($bacronyms{$bkey}{'displayed'} == 0) {
434	print "PCT: bac: never displayed: $bkey\n" if ($VERBOSITY > 10) ;
435	$bacronyms{$bkey}{'displayed'} = 1 ;
436	$bvalue = join('',$bacronyms{$bkey}{'value'},' (',$bkey,')') ;
437    }
438    join('','<a class="bacronyms" href="Acronyms.html#', eval("&make_acronym_id(\$bkey)"), '">', $bvalue, '</a>') ;
439}
440sub do_cmd_ac {
441    local($_)=@_;
442    my $bkey = &bnext_arg();
443    &styled_text_chunk('','','','','','bac',@_) ;
444}
445sub bacp {
446    local($bkey)=@_;
447    my $bvalue = join('',$bkey,'s') ;
448    if ($bacronyms{$bkey}{'displayed'} == 0) {
449	print "PCT: do_cmd_acp: never displayed: $bkey\n" if ($VERBOSITY > 10) ;
450	$bacronyms{$bkey}{'displayed'} = 1 ;
451	$bvalue = join('',$bacronyms{$bkey}{'value'},'s (', $bkey,'s)') ;
452    }
453    join('','<a class="bacronyms" href="Acronyms.html#',eval("&make_acronym_id(\$bkey)"),'">', $bvalue, '</a>') ;
454}
455sub do_cmd_acp {
456    local($_)=@_;
457    &styled_text_chunk('','','','','','bacp',@_) ;
458}
459
460sub bacl {
461    local($bkey)=@_;
462    print "PCT: do_cmd_acl: key: $bkey\n" if ($VERBOSITY > 5) ;
463    my $bvalue = $bacronyms{$bkey}{'value'} ;
464    print "PCT: do_cmd_acl: val: $bvalue\n" if ($VERBOSITY > 5) ;
465    join('','<a class="bacronyms" href="Acronyms.html#', eval("&make_acronym_id(\$bkey)"), '">', $bvalue, '</a>') ;
466}
467sub do_cmd_acl {
468    local($_)=@_;
469    my $bkey = &bnext_arg();
470    &styled_text_chunk('','','','','','bacl',@_) ;
471}
472
473sub baclp {
474    local($bkey)=@_;
475    my $bvalue = $bacronyms{$bkey}{'value'} ;
476    join('','<a class="bacronyms" href="Acronyms.html#', eval("&make_acronym_id(\$bkey)"),'">',$bvalue,'s</a>') ;
477}
478sub do_cmd_aclp {
479    local($_)=@_;
480    &styled_text_chunk('','','','','','baclp',@_) ;
481}
482sub make_acronym_id {
483    local($bkey) = @_ ;
484    $bacronyms{$bkey}{'seen'} = 1 ;
485    print "PCT: make_acronym_id: $bkey seen\n" if ($VERBOSITY > 10) ;
486    join('','bacronyms_',lc($bkey)) ;
487}
488#
489# Images
490sub bcompute_image {
491    local($bclass,$bfilename,$blabel,$bcaption,$bsize) = @_ ;
492    &anchor_label($blabel,$CURRENT_FILE,$_);
493    join('','<div class="',$bclass,'">',"\n",
494	 '<a name="',$blabel,'">',"\n",
495	 '<img class="',$bclass,'" src="',$bfilename,'" ',$bsize,'>',"\n",
496	 '<div class="caption">',"\n",
497	 '<span class="',$bclass,'">',$bcaption,'</span>',"\n",
498	 '</div>',"\n",
499	 '</a>',"\n",
500	 '</div>',$_) ;
501}
502# Horizontal image
503sub do_cmd_bimageH {
504    local($_) = @_ ;
505    # bimageH[an optional width]{image_filename}{caption to display}{label to use}
506    print "do_cmd_bimageH: $_\n" if ($VERBOSITY > 20) ;
507    local($bwidth,$bfilename,$bcaption,$blabel) ;
508    $bwidth = &get_next_optional_argument() ;
509    $bfilename = join('','../../images/',&bnext_arg(),'.png') ;
510    $bcaption = &bnext_arg() ;
511    $blabel = &bnext_arg() ;
512    print "do_cmd_bimageH: Width = $bwidth\tFile = $bfilename\tCaption = $bcaption\tLabel = $blabel\n" if ($VERBOSITY > 100) ;
513    if ($bwidth ne "") {
514	print "do_cmd_bimageH: bwidth: $bwidth\n" if ($VERBOSITY > 200) ;
515	if ($bwidth =~ /\[(.*)\\linewidth\]/) {
516	    print "do_cmd_bimageH: ratio = $1\n" if ($VERBOSITY > 100) ;
517	    $bwidth = $1 * 100 ;
518	    $bwidth = join('','style="width: ',$bwidth,'%;"') ;
519	}
520    }
521    print "do_cmd_bimageH: bwidth: $bwidth\n" if ($VERBOSITY > 10) ;
522    &bcompute_image("bimageH",$bfilename,$blabel,$bcaption,$bwidth) ;
523}
524#
525# Images with no orientation
526sub do_cmd_bimageN {
527    local($_) = @_ ;
528    # bimageN[an optional width]{image_filename}{caption to display}{label to use}
529    print "do_cmd_bimageN: $_\n" if ($VERBOSITY > 20) ;
530    local($bwidth,$bfilename,$bcaption,$blabel) ;
531    $bwidth = &get_next_optional_argument() ;
532    $bfilename = join('','../../images/',&bnext_arg(),'.png') ;
533    $bcaption = &bnext_arg() ;
534    $blabel = &bnext_arg() ;
535    print "do_cmd_bimageN: Width = $bwidth\tFile = $bfilename\tCaption = $bcaption\tLabel = $blabel\n" if ($VERBOSITY > 10) ;
536    if ($bwidth ne "") {
537	print "do_cmd_bimageN: bwidth: $bwidth\n" if ($VERBOSITY > 10) ;
538	if ($bwidth =~ /\[(.*)\\linewidth\]/) {
539	    $bwidth = join('','style="width: ',$1 * 100,'%;"') ;
540	}
541    }
542    print "do_cmd_bimageN: bwidth: $bwidth\n" if ($VERBOSITY > 10) ;
543    &bcompute_image("bimageN",$bfilename,$blabel,$bcaption,$bwidth) ;
544}
545
546#
547# Images with no orientation
548sub do_cmd_bimageV {
549    local($_) = @_ ;
550    # bimageV[an optional height]{image_filename}{caption to display}{label to use}
551    print "do_cmd_bimageV: $_\n" if ($VERBOSITY > 20) ;
552    local($bheight,$bfilename,$bcaption,$blabel) ;
553    $bheight = &get_next_optional_argument() ;
554    $bfilename = join('','../../images/',&bnext_arg(),'.png') ;
555    $bcaption = &bnext_arg() ;
556    $blabel = &bnext_arg() ;
557    print "do_cmd_bimageV: Height = $bheight\tFile = $bfilename\tCaption = $bcaption\tLabel = $blabel\n" if ($VERBOSITY > 10) ;
558    #
559    # As we are in HTML, we can not calculate anything based on "linewidth". So either an absolute dimension is specified
560    # and everything is fine
561    # or no dimension or a relative dimension is provided and we are in trouble => no width no height.
562    if ($bheight ne "" and $bheight !~ /\\/) {
563	$bheight = join('','style: "height: ',$bheight,';"') ;
564    }
565    else {
566	$bheight = "" ;
567    }
568    print "do_cmd_bimageV: bheight: $bheight\n" if ($VERBOSITY > 10) ;
569    &bcompute_image("bimageV",$bfilename,$blabel,$bcaption,$bheight) ;
570}
571
572sub do_cmd_textcolor {
573    local($_) = @_ ;
574    my $bcolor = &bnext_arg() ;
575    my $btext = &bnext_arg() ;
576    print "PCT: do_cmd_textcolor: color: $bcolor - text: $btext\n" if ($VERBOSITY > 10) ;
577    join('',$btext,$_) ;
578}
579
580sub do_cmd_vref {
581    local($_) = @_ ;
582    #
583    # The only arg is the label name
584    my $blabel=&bnext_arg() ;
585    print "PCT: do_cmd_vref: label: $blabel\n" if ($VERBOSITY > 10) ;
586    if (my $bfilename = $ref_files{$blabel}) {
587	if ($bfilename ne $CURRENT_FILE) {
588	    $burl = join('',$bfilename,'#',$blabel) ;
589	}
590	else {
591	    $burl = join('','#',$blabel) ;
592	}
593    }
594    else {
595	$burl = join('','__TO_BE_REPLACED_WITH_HTML_FILENAME__','#',$blabel) ;
596    }
597    print "PCT: do_cmd_vref: ref_files: " . $ref_files{$blabel} . "\n\turl: $burl\n\tlabel: $blabel\n\tcaption: " .$captions{$blabel}."\n\tfilename: $bfilename\n\n" if ($VERBOSITY > 10) ;
598    join('','(<a class="bref" href="',$burl,'" alt="',$captions{$blabel},'" >here</a>)',$_) ;
599}
600
601sub do_cmd_bref {
602    local($_) = @_ ;
603    my $burl = &bnext_arg();
604    my $btext=&bnext_arg() ;
605    print "\nPCT: do_cmd_bref: text: $btext - url: $burl\n" if ($VERBOSITY > 2) ;
606    if ($burl !~ /http(s?):/) {
607	if (my $bfilename = $ref_files{$burl}) {
608	    if ($bfilename ne $CURRENT_FILE) {
609		$burl = join('',$bfilename,'#',$burl) ;
610	    }
611	    else {
612		$burl = join('','#',$burl) ;
613	    }
614	}
615    }
616    join('','<a class="bref" href="',$burl,'">',$btext,'</a>',$_) ;
617}
618
619sub do_cmd_bfootref {
620    local($_) = @_ ;
621    &do_cmd_bref($_) ;
622}
623
624sub do_cmd_textrightarrow {
625    join('',"&#8594;",$_[0]);
626}
627
628sub do_cmd_bilink {
629     local($_) = @_;
630     local($btext) ;
631     local($blink) = &get_next_optional_argument() ;
632     $btext = &missing_braces unless
633 	((s/$next_pair_pr_rx/$btext = $2; ''/eo)
634	 ||(s/$next_pair_rx/$btext = $2; ''/eo));
635     print "PCT: bilink: btext: $btext --- blink: $blink\n" if ($VERBOSITY > 3) ;
636     &bprocess_ref("bilink",$btext) ;
637}
638sub do_cmd_bxdlink {
639    # \bxdlink}[4]{\href{../#3/#3}{\textbf{#1}} (#4 \vref{#3-#2})}
640    # Format is bxdlink{Mail Command in the Messages Resource}{blb:mailcommand}{main}{chapter}
641    local($_) = @_ ;
642    local($btext,$blabel,$bmanual,$bwhat,$text) ;
643    $btext = &bnext_arg() ;
644    $blabel = &bnext_arg() ;
645    $bmanual = &bnext_arg() ;
646    $bwhat = &bnext_arg() ;
647    #
648    # There is only one case we know where we are
649    my $blinkedfile = "__TO_BE_REPLACED_WITH_HTML_FILENAME__" ;
650    if ($bmanual eq $FILE) {
651	$blinkedfile = $CURRENT_FILE ;
652    }
653    join('','<a class="bxdlink" href="../',$bmanual,'/',$blinkedfile,'#',$blabel,'">',$btext,'</a>',$_) ;
654}
655
656
657sub do_cmd_bvalueddirective {
658    local($_)=@_;
659    my $bdirectivename = &bnext_arg();
660    my $bvalue = &bnext_arg();
661    join('','<span class="bdirectivename">',$bdirectivename,'</span>',' = ','<span class="bvalue">',$bvalue,'</span>',$_) ;
662}
663
664sub do_cmd_bxlink {
665    # Format is bxlink{Mail Command in the Messages Resource}{blb:mailcommand}{main}{chapter}
666    local($_) = @_ ;
667    local($btext,$blabel,$bmanual,$bwhat,$text) ;
668    $btext = &bnext_arg() ;
669    $blabel = &bnext_arg() ;
670    $bmanual = &bnext_arg() ;
671    $bwhat = &bnext_arg() ;
672    #
673    # There is only one case we know where we are
674    my $blinkedfile = "__TO_BE_REPLACED_WITH_HTML_FILENAME__" ;
675    if ($bmanual eq $FILE) {
676	$blinkedfile = $CURRENT_FILE ;
677    }
678    join('','<a class="bxlink" href="../',$bmanual,'/',$blinkedfile,'#',$blabel,'">',$btext,' ',$bwhat,'</a>',$_) ;
679}
680
681sub do_cmd_label {
682    local($_) = @_;
683    local($label);
684    print "do_cmd_label: converting $FILE to $CURRENT_FILE\n" if ($VERBOSITY > 5) ;
685    $label = &missing_braces unless (
686	(s/$next_pair_pr_rx\n?/$label = $2;''/eo)
687	||(s/$next_pair_rx\n?/$label = $2;''/eo));
688    &anchor_label($label,$CURRENT_FILE,$_);
689    $label =~ s/<[^>]*>//go;
690    $label =~ s/$label_rx/_/g;
691    if ($ref_files{$label} ne $CURRENT_FILE) {
692        $ref_files{$label} = $CURRENT_FILE;
693        $noresave{$label} = 0; $changed = 1;
694	print "PCT: do_cmd_label: ref_files: ". $ref_files{$label} . "\n" if ($VERBOSITY > 10) ;
695    }
696    print "<LABEL: $label>\n\t ref_files: ". $ref_files{$label} . "\n" if ($VERBOSITY > 3);
697    join('',"<A class=\"blabel\" NAME=\"$label\">$anchor_mark</A>",$_);
698}
699
700# This is used by external style files ...
701sub bprocess_ref {
702    local($class, $btext) = @_;
703    $btext = &balance_inner_tags($btext)
704	if $btext =~ (/<\/([A-Z]+)>($math_verbatim_rx.*)<\1>/);
705    $btext = &translate_environments($btext);
706    $btext = &simplify(&translate_commands($btext))
707	if ($btext =~ /\\/ );
708    local($breference,$id);
709    local($pretag) = &get_next_optional_argument;
710    $pretag = &translate_commands($pretag) if ($pretag =~ /\\/);
711    $breference = &missing_braces unless (
712	(s/$next_pair_pr_rx/($id, $breference) = ($1, $2);''/eo)
713	||(s/$next_pair_rx/($id, $breference) = ($1, $2);''/eo));
714    if ($breference) {
715	$breference =~ s/<[^>]*>//go ; #RRM: Remove any HTML tags
716	$breference =~ s/$label_rx/_/g;	# replace non alphanumeric characters
717
718	$symbolic_labels{"$pretag$breference$id"} = $btext if ($btext);
719	if (($symbolic_labels{$pretag.$breference})&&!($btext)) {
720	    $btext = $symbolic_labels{$pretag.$breference}
721	}
722	$btext = ( (!$btext && $breference) || $btext);
723
724	print "\nLINK: Reference: $breference --- btext: $btext\n" if ($VERBOSITY > 3);
725	# The quotes around the HREF are inserted later
726	my $localfile = "" ;
727	if ($ref_files{$breference}) {
728	    $localfile = $ref_files{$breference} ;
729	}
730	join('','<a class="',$class,'" href=',$localfile,'#',$breference,'>',$btext,'</a>', $_);
731    }
732    else {
733	print "Cannot find label argument after <$last_word>\n" if $last_word;
734	$after_label . $_;
735    }
736}
737#
738# Quotes
739sub do_cmd_bog {
740    join('','<span class="bleftquote">','_left_quote_','</span>',$_[0]) ;
741}
742sub do_cmd_cog {
743    join('','<span class="brightquote">','_right_quote_','</span>',$_[0]) ;
744}
745
746sub do_cmd_babove {
747    join('','&ge;',$_[0]) ;
748}
749
750sub do_cmd_bwebdoc {
751    local($_) = @_;
752    local($label);
753    $label = &missing_braces unless (
754	(s/$next_pair_pr_rx\n?/$label = $2;''/eo)
755	||(s/$next_pair_rx\n?/$label = $2;''/eo));
756    &anchor_label($label,$CURRENT_FILE,$_);
757}
758
759sub do_cmd_bmathequation {
760    local($_) = @_;
761    local($bequation);
762    $bequation = &missing_braces unless (
763	(s/$next_pair_pr_rx\n?/$bequation = $2;''/eo)
764	||(s/$next_pair_rx\n?/$bequation = $2;''/eo));
765    $bequation =~ s/_([^\s]+)/<sub>\1<\/sub>/g ;
766    $bequation =~ s/\n//g ;
767    $bequation = join("\n",'__bbmathequation__',$bequation,'__bemathequation__') ;
768    print "PCT: bmathequation: equation: $bequation\n" if ($VERBOSITY > 10) ;
769    join('',$bequation,$_) ;
770}
771
772sub do_cmd_leqslant {
773    join('',' &le; ',$_[0]);
774}
775
776
777# ======================================================================
7781;
779