sorry i forgot to mention one thing. when i'm in a source and try to
add an object with file/form. i get the following error
FORM is not a sub-item of OBJE
FILE is not a sub-item of OBJE

here is essentially the code i'm running
$ged = Gedcom->new(grammar_version => 5.5 );
$record=$ged->add_source();
$obje=$record->add("obje");
$obje->add("form", "png");
$obje->add("file", "somefile");

thanks for any additional advice.
nate

On 1/23/06, Paul Johnson <[EMAIL PROTECTED]> wrote:
> On Thu, Jan 12, 2006 at 06:15:17PM -0700, Nate Fuhriman wrote:
>
> > I am using gedcom.pm to create a simple gedcom editing program. it's
> > basically a thin layer to allow a user access to gedcom files. I am having
> some
> > problems though and was wondering if anybody out there could help.
>
> Looks like that'll be me then ;-)
>
> > how do I automatically find out if I can have multiple items. IE I can
> have
> > many FAMS tags but only one SEX tag. I have tried using $record->max but
> > that always fails as an invalid call.
>
> Yes.  You'll need to get into the actual grammar object to get this
> information.  I don't have a proper API to this, so there is a
> possibility that things might change, but something like the following
> should give you the information you want:
>
>     $record->{grammar}->valid_items->{$tag}[0]{min}
>     $record->{grammar}->valid_items->{$tag}[0]{max}
>
> Here, $record is the parent record, and $tag the name of the tag you are
> interested in.  For example:
>
>     my $i = $ged->get_individual("I8");
>     print $i->{grammar}->valid_items->{NAME}[0]{max};
>     print $i->{grammar}->valid_items->{SEX}[0]{max};
>
> The call to $i->{grammar}->valid_items returns a hash reference, the
> keys of which are the names of all the valid items for that record.  The
> values are arrays of hashes, each hash containing the grammar, the min
> and the max.  There is an array of hashes because the same tag can refer
> to more than one grammar.  This is the case with NOTEs for example,
> which can either be inline or can point to a note record.  It is safe
> (at the moment) to just look at the first record since where there are
> multiple records, the min and max are always the same.  The docs (and
> maybe even the source) to Gedcom::Grammar may shed a little light on
> this.
>
> > how do I properly link external documents to SOUR. I have a gedcom file
> that
> > was created with PAF that shows
> > 1   OBJE hello
> > 2     FORM png
> > 2     FILE page1.png
> > 2     NOTE some description
> > but gedcom.pm says that form, file and note are not valid tags for obje.
> is
> > there a different way? sample code maybe?
>
> I'm afraid you'll need to be a little more explicit in describing this,
> or better still send some minimal GEDCOM file, since it "works for me".
>
> Here's the GEDCOM file I tested it with.  This was created by Gedcom.pm
> and I just added your four lines.
>
> 0 HEAD
> 1   SOUR Gedcom.pm
> 2     NAME Gedcom.pm
> 2     VERS 1.1502
> 2     CORP Paul Johnson
> 3       ADDR http://www.pjcj.net
> 2     DATA
> 3       COPR Copyright 1998-2005, Paul Johnson ([EMAIL PROTECTED])
> 1   NOTE
> 2     CONT This output was generated by Gedcom.pm.
> 2     CONT Gedcom.pm is Copyright 1999-2005, Paul Johnson ([EMAIL PROTECTED])
> 2     CONT Version 1.1502 - 20th December 2005
> 2     CONT
> 2     CONT Gedcom.pm is free.  It is licensed under the same terms as Perl
> itself.
> 2     CONT
> 2     CONT The latest version of Gedcom.pm should be available from my
> homepage:
> 2     CONT http://www.pjcj.net
> 1   GEDC
> 2     VERS 5.5
> 2     FORM LINEAGE-LINKED
> 1   DATE Mon Jan 23 12:31:25 2006
> 1   CHAR ANSEL
> 1   SUBM @SUBM1@
>
> 0 @SUBM1@ SUBM
> 1   NAME Paul Johnson
> 1   OBJE hello
> 2     FORM png
> 2     FILE page1.png
> 2     NOTE some description
>
> 0 TRLR
>
> > how do I setup the CONT tag? if I add a note it just goes on a single
> line.
>
> Take a look at the code in Gedcom::new, which creates the GEDCOM file
> above.  Basically, you just add CONT records to a NOTE record.
>
> > This probably leads to another point of confusion I have. It looks like
> some
> > tags (NOTE,PLAC) allow data to be put to them and have sub tags. is there
> a
> > way to automatically recognize this?
>
> Yes.  This is a pain, I think, since it means that I need to have
> separate methods to return the value associated with a tag or the
> record.
>
> Again, I don't have a proper API for this, but the information is
> available.  (And I have just noticed that I don't give any warning if a
> value is provided where none is expected.)  You can access the
> information so:
>
>     my $i = $ged->get_individual("I1");
>     print "NOTE  [", exists $i->get_record("note")->{grammar}{value}, "]\n";
>     print "BIRT  [", exists $i->get_record("birt")->{grammar}{value}, "]\n";
>
> If the "value" key is present in the grammar, then a value is allowed,
> otherwise it is not.
>
> > Thanks in advance.
> > Nate
> >
> > FYI once I have the program working I'm more than happy to share. :)
>
> I look forward to it.  Sorry for the delayed reply.
>
> --
> Paul Johnson - [EMAIL PROTECTED]
> http://www.pjcj.net
>

Reply via email to