=encoding utf8

=head1 NAME

Math::Formula::Config::INI - load/save formulas to file as INI

=head1 INHERITANCE

 Math::Formula::Config::INI
   is a Math::Formula::Config

=head1 SYNOPSIS

  my $context = Math::Formula::Content->new(name => 'test');
  my $config  = Math::Formula::Config::INI->new(directory => $dir);

  $config->save($context);
  my $context = $config->load('test');

=head1 DESCRIPTION

Save and load a L<Math::Formula::Context|Math::Formula::Context> to INI files.  The INI file
is not too complex.

You need to have installed B<Config::INI>.  That module is not in the
dependencies of this packages, because we do not want to add complications
to the main code.

Extends L<"DESCRIPTION" in Math::Formula::Config|Math::Formula::Config/"DESCRIPTION">.

=head1 METHODS

Extends L<"METHODS" in Math::Formula::Config|Math::Formula::Config/"METHODS">.

=head2 Constructors

Extends L<"Constructors" in Math::Formula::Config|Math::Formula::Config/"Constructors">.

=over 4

=item $class-E<gt>B<new>(%options)

Inherited, see L<Math::Formula::Config/"Constructors">

=back

=head2 Attributes

Extends L<"Attributes" in Math::Formula::Config|Math::Formula::Config/"Attributes">.

=over 4

=item $obj-E<gt>B<directory>()

Inherited, see L<Math::Formula::Config/"Attributes">

=item $obj-E<gt>B<path_for>($file)

Inherited, see L<Math::Formula::Config/"Attributes">

=back

=head2 Actions

Extends L<"Actions" in Math::Formula::Config|Math::Formula::Config/"Actions">.

=over 4

=item $obj-E<gt>B<load>($name, %options)

Load a L<Math::Formula::Context|Math::Formula::Context> for an INI file.
Improves base, see L<Math::Formula::Config/"Actions">

 -Option  --Default
  filename  <directory/$name.ini>

=over 2

=item filename => FILENAME

=back

=item $obj-E<gt>B<save>($context, %options)

Serialize the C<$context> to INI files, as storage or to be edited by hand.
This is a useful method when default configuration templates need to be generated.
Improves base, see L<Math::Formula::Config/"Actions">

 -Option  --Default
  filename  $context->name .ini

=over 2

=item filename => STRING

Save under a different filename than derived from the name of the context.

=back

=back

=head1 DETAILS

According to L<https://en.wikipedia.org/wiki/INI_file>, INI files only support strings
and numbers.  To stay as close as possible to that description, everything else is
put between double quotes (also the booleans).

Only the quoted data may contain attributes.

B<. Example>

  name    = test
  version = 1
  created = "2023-02-26T20:07:54+0000"
  updated = "2023-02-26T20:07:54+0000"
  mf_version = 0

  [formulas]
  expr2 = "\"abc\".size + 3k"; returns='MF::INTEGER'
  fakes = "false"
  dinertime = "18:05:07"
  expr1 = "1 + 2 * 3"
  string = abc
  some_truth = "true"

=head1 DIAGNOSTICS

=over 4

=item Error: Save directory '$dir' does not exist

Z<>

=item Error: Save directory required

Z<>

=item Warning: cannot (yet) save CODE, skipped '$name'

Z<>

=back

=head1 SEE ALSO

This module is part of Math-Formula version 0.17,
built on August 17, 2025. Website: F<http://perl.overmeer.net/CPAN/>

=head1 LICENSE

For contributors see file ChangeLog.

This software is copyright (c) 2023-2025 by Mark Overmeer.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

