Locale-KeyedText ---------------------------------------------------------------------- 2005-11-11 Darren Duncan * Locale-KeyedText Release 1.6_4 (SVN r1049). * This distribution now reqires Perl versions >= 5.8.7, up from 5.8.1. * Completed fundamental rewrite of KeyedText.pm, such that it can now do everything that the pre-rewrite release 1.6.2 could, and has been executed to confirm that it works. * Restored the 2 as_string() methods that release 1.6_3 removed, under the new names as_debug_string(); their output is now better formatted. * Reworked translate_message() to use a single for-loop rather than 2 nested for-loops. * Split up the translate_message() method 6 ways, into itself, and the new get_set_member_combinations() method, and these Translator utility submethods: template_module_is_loaded(), load_template_module(), get_template_text_from_loaded_module(), interpolate_vars_into_template_text(). This split should make it a lot easier to test or extend a core functionality of Locale::KeyedText. * Fixed a bug in BUILD() that caused a thrown exception when new() was legitimately invoked without a 'msg_vars' argument. * Reformatted all package declarations from 'package Foo; {' to '{ package Foo;', so the correct semantics occur where only declarations inside the braces belong to the package. * Changed how Text Templates work such that variable names to be interpolated must now appear inside "<>" instead of "{}". * Other small documentation updates. * Added new /examples subdirectory in this distribution, which contains 2 example programs 'inverter1' and 'inverter2'. The same code, sans bug fixes and minor changes, had previously comprised the 'EXAMPLE PROGRAM' POD sections of KeyedText.pm in release 1.6.2, that release 1.6_3 removed. The examples are all executed and are known to work. * Note that, while Locale::KeyedText can be proven to work by manually executing the example programs, the automated test suite in /t still does not yet execute anything; such a change is pending. * Removed several TODO items, which are now satisfied. 2005-10-27 Darren Duncan * Locale-KeyedText Release 1.6_3 (SVN r996). * This release exists only to test some large pending changes for this and other distributions against the CPAN infrastructure, to ensure it indexes properly and the documentation is extracted as expected. * The core modules (KeyedText.pm) have been rewritten from scratch, both code and documentation, though the new version was strongly influenced by the the previous release, and a lot of the documentation was copied over with few changes. They are definitely incompatible with previous releases 1.6.2 and below. A few more unstable releases may follow that are numbered 1.6_x, after which the 1.7.0 release will be next stable one, still incompatible with 1.6.2. It is anticipated that all post-1.7.0 releases will be backwards compatible with 1.7.0. * "Locale::KeyedText" no longer has any functions and exists just as the namesake of this distribution; the new_message() and new_translator() wrapper functions are gone. You now just use the previously-wrapped functions Locale::KeyedText::Message->new() and Locale::KeyedText::Translator->new() instead. * Both new() constructor functions now take named arguments instead of positional ones, which should make it easier to add functionality to Locale::KeyedText later if one wants to. But all object methods still take positional arguments like before. * Changed what kinds of strings are valid to store in the Message Key, names of Message Variables, and elements of Set Names and Member Names; each can now be any defined and non-empty string. Also, values of Message Variables can be anything at all including references to objects. Also, the Translator constructor arguments must now always be array refs, even if either has just a single element. * All constructors and methods now throw exceptions on bad input, rather than returning undef. * Renamed all the accessor methods to be more terse, as follows: get_message_key() -> get_msg_key(), get_message_variable[|s]() -> get_msg_var[|s](), get_template_[set|member]_names() -> get_[set|member]_names(). * Removed both as_string() methods; they will be replaced later. * Added new external dependencies on 'only', 'Readonly', Class::Std, Class::Std::Utils. * Locale::KeyedText is now implemented as inside-out objects, so the privacy of its attributes is now enforced. Also, KeyedText.pm itself now has BUILD() methods internally instead of new() functions. * Removed the whole test suite but the compilation test; it will be replaced later. As such, the new Locale::KeyedTest has not yet been proven to actually work. * Chopped out all the ReadMe file parts that were redundant with KeyedText.pm's own POD. All that remains now is the PREFACE, KEEPING UP TO DATE, and SUPPORT sections. More changes may be pending. * Rewrote the TODO file. Most of its items will be addressed by 1.7.0. 2005-09-28 Darren Duncan * Locale-KeyedText Release 1.6.2 (SVN r878). * New code file versions are: KeyedText.pm 1.6.2. * From now on, any ordinary 'use [|only ]Foo' statements that appear within *.pm files will be located in different places than before; the 'use' statements for modules that do not export anything, particularly object oriented modules, will appear near the top of the file, above all package declarations, but just below the use-pragma statements; the 'use' statements for modules whose exported functions we are using will be placed just below the declarations of each package in which the relevant exported functions are used. * Removed any line-trailing whitespace from all distribution files. * Reformatted all code by swapping various string quoting delimiters. * Updated KeyedText.pm to replace all of its 'unless' conditionals with equivalent 'if' conditionals. * Updated KeyedText.pm to rename all of its 'foreach' loops to 'for'. * Updated KeyedText.pm to move its 2 for-loop labels upwards to their own lines, and likewise with 2 switch statement labels. * Updated KeyedText.pm to reformat all 5 regular expressions so that they use the /x flag. * Reformatted all code to change any "if( ... ) {" to "if (...) {". * Added named constant $EMPTY_STR to KeyedText.pm. * In KeyedText.pm, renamed 2 code labels from LOOP to INPUT_LINE. * Reformatted all code so that any uses of the named unary operators [defined|ref] no longer have parenthesis around their argument. * In KeyedText.pm, split up 3 multi-statement lines so each statement is on its own line. * Updated KeyedText.pm to replace 8 " or return ...;" each with "return ... if ;". * Updated KeyedText.pm to replace 4 " [and|or] [next|last] ...;" with "[next|last] ... if ..." like with 'return'. * Updated KeyedText.pm to rearrange 7 conditional 'die' statements so they have postfix-if conditionals. * Reformatted all code, in KeyedText.pm and t_LKT_Util.pm, so that any uses of the built-in operators or functions named [bless|chomp|join] no longer have parenthesis around their argument lists; either the parens were just removed, or they were moved to surround both the operator/function name and its arguments. * Reformatted all code so that every occurance of the string concatenation operator (.) has a space between the operator and each of its 2 arguments, rather than their all being in contact. Also reformatted any lines that are split on this operator so the operator appears at the start of the second line, rather than the end of the first line. * Reformatted all of the code comments at the top of KeyedText.pm, where its object property names, and constant values, are declared, so that all comment lines don't exceed the 75 character line length. * In KeyedText.pm and t_LKT_Util.pm, reformatted (3,1) cascading ternary statements into aligned columns. * In KeyedText.pm split up every remaining code, code comment, and POD line that exceeded 75 characters, so they now all fit in that space, with the sole exception being the example code in the 2 'EXAMPLE PROGRAM' POD sections, which are still too wide. * Other miscellaneous code line alignments and splitting. 2005-09-12 Darren Duncan * Locale-KeyedText Release 1.6.1 (SVN r808). * New code file versions are: KeyedText.pm 1.6.1. * Updated all POD-containing files to re-wrap any non-indented POD paragraphs to a 75 character width, which is 5 less than the 80 character width they were wrapped to before. This change should make it easier to copy and paste a diff or patch of this documentation into an email message, where it is quoted at least once, without any line wrapping occurring. Likewise, these standard documentation files were re-wrapped to 75 characters: ReadMe, INSTALL, LGPL|GPL, Changes, TODO. * Revised this Changes file to replace all detail entries for releases 1.04 thru 1.6.0 with a significant release list for the same period; also added references to when all 'Rosetta developer release' (#s 1-3) were. 2005-09-08 Darren Duncan * Locale-KeyedText Release 1.6.0 (SVN r787), containing Locale::KeyedText 1.6.0, was released on CPAN. This is the first release of this distribution and its modules for which they had 3-part version numbers, rather than floating point version numbers. * These were the current versions cited by the public announcement for Rosetta/SQL-Routine developer release #3. 2005-06-14 Darren Duncan * Locale-KeyedText Release 1.05, containing Locale::KeyedText 1.05, was released on CPAN. This is the last release of this distribution and its modules for which they had floating point version numbers, rather than 3-part version numbers. 2005-04-03 Darren Duncan * Locale-KeyedText Release 1.03, containing Locale::KeyedText 1.03, was released on CPAN. * These were the current versions cited by the public announcement for SQL-Routine/Rosetta developer release #2. 2004-09-23 Darren Duncan * Locale-KeyedText Release 1.00, containing Locale::KeyedText 1.00, was released on CPAN. This is the first release of this module following its official registration on the Perl 5 Module List. 2004-09-23 Darren Duncan The next version of the Module List will list the following module: modid: Locale::KeyedText DSLIP: RdpOl description: Refer to user messages in programs by keys userid: DUNCAND (Darren Duncan) chapterid: 13 (Internationalization_Locale) enteredby: KSTAR (Kurt D. Starsinic) enteredon: Thu Sep 23 18:35:01 2004 GMT The resulting entry will be: Locale:: ::KeyedText RdpOl Refer to user messages in programs by keys DUNCAND 2004-08-31 Darren Duncan * Locale-KeyedText Release 0.07, containing Locale::KeyedText 0.07, was released on CPAN. This is the last release of this module prior to its official registration on the Perl 5 Module List. 2004-08-05 Darren Duncan * Locale-KeyedText Release 0.06, containing Locale::KeyedText 0.06, was released on CPAN. * These were the current versions cited by the public announcement for Rosetta/SQL-SyntaxModel developer release #1. 2004-01-15 Darren Duncan * Locale-KeyedText Release 0.01, containing Locale::KeyedText 0.01, was released on CPAN. This is the first release of any distribution to contain Locale::KeyedText. This is the first release of any distribution for which some of the existing work that became the Locale-KeyedText distribution was in the form of executable code, and not just design documentation. 2003-09-29 Darren Duncan * Began active code development on the proposed Locale::KeyedText module. * Module based on a template created by h2xs 1.18. 2003-06-03 Darren Duncan * Rosetta Release 0.11 was released on CPAN. This is the first release of any distribution where the proposal documentation for Locale::KeyedText uses that name for it; it was renamed from Rosetta::Locale. 2003-05-28 Darren Duncan * Rosetta Release 0.10 was released on CPAN. This is the last release of any distribution for which the documented name of the proposed module that became Locale::KeyedText was given the name Rosetta::Locale. 2003-03-04 Darren Duncan * Rosetta Release 0.05 was released on CPAN. This is the first release of any distribution to contain design documentation that became the Locale-KeyedText distribution, specifically in the STRUCTURE and BRIEF MODULE LIST portions of the documentation file Rosetta::Framework. It described an upcoming new module to make it easy to separate human-readable messages from code, intending that each user language can have their own separate human text file. The proposed core module name is Rosetta::Locale. * Given that I started publishing details about what became Locale::KeyedText here, 2003 is the start of my declared copyright date range for Locale::KeyedText.