There are about 5 object-oriented parsers, all with their own
effectively identical but differently spelt versions of pidl(),
pidl_hdr(), indent(), and deindent(). With this commit we add a base
class that they can all use.
The ultimate aim is to be able to add some debugging instrumentation
that benefits all[1] the parsers.
[1] The parsers (e.g. Samba::ServerNDR) which use global scope rather
than objects will not be affected.
The versions of the functions in this file follow the most
sophisticated versions of the soon-to-be subclasses. For example, the
pidl() function avoids spurious whitespace and puts #define at column
0, following the Python parser.
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
--- /dev/null
+# Superclass for IDL structure generators
+# GPL3
+
+package Parse::Pidl::Base;
+
+use strict;
+use warnings;
+
+use Parse::Pidl qw(fatal warning error);
+
+use vars qw($VERSION);
+$VERSION = '0.01';
+
+sub indent {
+ my $self = shift;
+ $self->{tabs} .= "\t";
+}
+
+sub deindent {
+ my $self = shift;
+ $self->{tabs} = substr($self->{tabs}, 1);
+}
+
+sub pidl {
+ my ($self, $txt) = @_;
+ if ($txt) {
+ if ($txt !~ /^#/) {
+ $self->{res} .= $self->{tabs};
+ }
+ $self->{res} .= $txt;
+ }
+ $self->{res} .= "\n";
+}
+
+
+sub pidl_hdr {
+ my ($self, $txt) = @_;
+ $self->{res_hdr} .= "$txt\n";
+}
+
+
+sub pidl_both {
+ my ($self, $txt) = @_;
+ $self->{res} .= "$txt\n";
+ $self->{res_hdr} .= "$txt\n";
+}