blob: 995c9521eeeea0a5d6d302fc5d70196a449e5a60 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
use strict;
use warnings;
package Clownfish::File;
use Clownfish::Util qw( verify_args );
use Carp;
our %new_PARAMS = ( source_class => undef, );
sub new {
my ( $either, %args ) = @_;
verify_args( \%new_PARAMS, %args ) or confess $@;
my $package = ref($either) || $either;
return $either->_new( $args{source_class} );
}
1;
__END__
__POD__
=head1 NAME
Clownfish::File - Structured representation of the contents of a
Clownfish source file.
=head1 DESCRIPTION
An abstraction representing a file which contains Clownfish code.
=head1 METHODS
=head2 new
my $file_obj = Clownfish::File->new(
source_class => 'Crustacean::Lobster', # required
);
=over
=item * B<source_class> - The class name associated with the source file,
regardless of how what classes are defined in the source file. Example: If
source_class is "Foo::Bar", that implies that the source file could be found
at 'Foo/Bar.cfh' within the source directory and that the output C header file
should be 'Foo/Bar.h' within the target include directory.
=back
=head2 add_block
$file_obj->add_block($block);
Add an element to the blocks array. The block must be either a
Clownfish::Class, a Clownfish::Parcel, or a Clownfish::CBlock.
=head2 blocks
my $blocks = $file->blocks;
Return all blocks as an arrayref.
=head2 classes
my $classes = $file->classes;
Return all Clownfish::Class blocks from the file as an arrayref.
=head2 get_modified set_modified
Accessors for the file's "modified" property, which is initially false.
=head2 get_source_class
Accessor.
=head2 c_path h_path cfh_path
# '/path/to/Source/Class.c', etc.
my $c_path = $file->c_path('/path/to');
my $h_path = $file->h_path('/path/to');
my $cfh_path = $file->cfh_path('/path/to');
Given a base directory, return a path name derived from the File's
source_class with the specified extension.
=head2 guard_name
# e.g. "H_CRUSTACEAN_LOBSTER"
my $guard_name = $file->guard_name
Return a string used for an include guard in a C header, unique per file.
=head2 guard_start
Return a string opening the include guard.
=head2 guard_close
Return a string closing the include guard. Other classes count on being able
to match this string.
=cut