File: changebar.perl

package info (click to toggle)
latex2html 2015-debian1-1
  • links: PTS
  • area: main
  • in suites: stretch
  • size: 7,652 kB
  • ctags: 3,386
  • sloc: perl: 30,941; makefile: 429; sh: 155
file content (162 lines) | stat: -rw-r--r-- 4,885 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# CHANGEBAR.PERL by Nikos Drakos <nikos@cbl.leeds.ac.uk> 4-AUG-94
# Computer Based Learning Unit, University of Leeds.
#
# Extension to LaTeX2HTML to translate commands defined in 
# the changebar.sty file (c) 1990 by David B. Johnson 
# (dbj@titan.rice.edu). It also supports some commands from
# changebars.sty by Michael Fine and 
# Johannes Braams <J.L.Braams@research.ptt.nl>
#
#
# Modifications:
#
# nd = Nikos Drakos <nikos@cbl.leeds.ac.uk>
# hs = Herb Swan    <dprhws@edp.Arco.com>
# mg = Michel Goossens <goossens@cern.ch>
# rm = Ross Moore <ross@mpce.mq.edu.au>
#
# nd  4-AUG-94 - Created
# hs 20-DEC-95 - Removed arguments from chgbarwidth and chgbarsep
# mg 14-Jan-96 - added more commands for Braams's changebar package
# rm 10-Apr-96 - added version-control, using  \cbversion{..}

package main; 

sub do_cmd_chgbarbegin { &do_cmd_cbstart(@_) }
sub do_cmd_chgbarend { &do_cmd_cbend(@_) }

#  Recognise options to \usepackage{changebar} .

sub do_changebar_dvips {}
sub do_changebar_leftbars  { $cb_align = "left" if ($HTML_VERSION > 2.0);  }
sub do_changebar_rightbars { $cb_align = "right" if ($HTML_VERSION > 2.0); }



&ignore_commands(<<_IGNORED_CMDS_);
chgbarwidth
chgbarsep
driver
changebarwidth
changebarsep
changebargrey
deletebarwidth
outerbars
nochangebars
cb_at_barpoint # {} # {} # {}
_IGNORED_CMDS_



$cb_version = '';	# RRM  string for version control, initially empty.
$cb_align = '';		# RRM  alignment, empty for HTML 2.0 .

# style for displaying the version identifier string
$cbstyle = (($HTML_VERSION eq "2.0")? "I" : "SUP");

# regular expression for detecting \cbversion
$cbversion_rx = "\\\\cbversion<<\\d+>>[^<]+<<\\d+>>";

# regular expression for detecting nested changebars ending together
$cbend_rx = "(_change_\\w+_visible_mark>(<$cbstyle>[^<]*</$cbstyle>))?\\s*<BR>(<<\\d+>>)";


# RRM
# This routine is currently redundant, as the environments get processed
# before individual commands. However this may change with V97-NG.
#
sub do_cmd_cbversion{
    local($_) = @_;
    $cb_version = &missing_braces 
	unless ((s/$next_pair_rx[\s%]*/$cb_version=$2;''/eo)
	||(s/$next_pair_pr_rx[\s%]*/$cb_version=$2;''/eo));
    $_;
}


sub do_cmd_cbstart{
    local($cb_string)='';
    $cb_string = join('',"<$cbstyle>",$cbversion,"</$cbstyle>") if ($cb_version);
    join ('', &put_cb_icon('begin',2, $cb_string), @_[0]);
}

sub do_cmd_cbend{
    local($cb_string)='';
    $cb_string = join('',"<$cbstyle> ",$cbversion,"</$cbstyle>") if ($cb_version);
    join ('', &put_cb_icon('end',2, $cb_string), @_[0]);
}

sub do_cmd_cbdelete{
    local($cb_string)='';
    $cb_string = join('',"<$cbstyle>",$cbversion,"</$cbstyle>") if ($cb_version);
    join ('', &put_cb_icon('delete',2, $cb_string), @_[0]);
}

sub put_cb_icon{
    local($icon, $break, $string) = @_;
    local($cb_icon, $alignstr);
    local($brs) = (($break) ? "<BR>" : "" );
    local($bre) = "\n<BR>"; #(($break) ? "\n<BR>" : "");
    if ($cb_align =~ /r/) { $alignstr = "_right" } #unless ($icon =~ /del/); };
    eval "\$cb_icon = \$change_" . $icon . "$alignstr" . "_visible_mark";
    $cb_string = join('',"<$cbstyle>",$cbversion,"</$cbstyle>") if ($cb_version);
    if ($cb_align =~ /l/)    { "$brs$cb_icon$string$bre" }
    elsif ($cb_align =~ /r/) { "$brs$string$cb_icon$bre" }
    else { "$brs$cb_icon$string$bre" }
}

# RRM
# Look for a \cbversion{..} command as first thing in the environment.
# If found, use its argument for  $cb_version .
# RRM: no longer necessary, since \cbversion is now `wrap-deferred'.

sub do_env_changebar {
    &set_chgbar_preamble;
    local($_) = @_;
    local($next,$pat,$endcb) = ('','',2);
    local($endstr) = "<tex2html_change_end_visible_mark><$cbstyle>";
    local($keep) = $_;
    local($this_version) = $cb_version;

#    ($next,$pat) = &get_next_tex_cmd;
#    if ($next eq "cbversion") { 
#	s/$next_pair_rx/$cb_version=$2;''/eo; $keep = '';
#    } else { $_ = $keep }

    $_ = &translate_environments($_);

    # multiple ends of change-bars have icons on the same line.
    local($saveRS) = $/; undef $/;
    s/(($endstr[^<]*<\/$cbstyle>)\s*<BR>(<<\d+>>($cbversion_rx)?)?\s*$)/
	if ($`) {$1} else { $endcb = 0; $2.$3 }/egm;
    s/($cbend_rx\s*$)/ if ($`) { $1 } else { $endcb = 0; $2.$4 }/egm;
    $/ = $saveRS;


    if ($this_version) {
	join('', &put_cb_icon('begin',2, "<$cbstyle>$this_version</$cbstyle>")
	    , $_ , &put_cb_icon('end',$endcb, "<$cbstyle> $this_version</$cbstyle>"));
    } else {
	join('', &put_cb_icon('begin',2,""), $_ , &put_cb_icon('end',$endcb,""));
    }
}

$raw_arg_cmds{changebar} = 1;  # environment handles when to expand sub-environments

sub set_chgbar_preamble {
    $preamble .= "\\def\\cb\@barpoint#1#2#3{}\n"
    unless $preamble =~ /cb\@barpoint/;
}

&process_commands_wrap_deferred (<<_RAW_ARG_DEFERRED_CMDS_);
cbversion # {}
_RAW_ARG_DEFERRED_CMDS_


1;				# This must be the last line