biblatex-biber-1.8000755000000000000 012230324177 13335 5ustar00rootroot000000000000biblatex-biber-1.8/README000444000000000000 412712230324175 14354 0ustar00rootroot000000000000 Biber is a BibTeX replacement for users of biblatex, with full Unicode support. * Please note - the default download for all platforms is 32-bit. Please look in the files section for the correct 64-bit platform instead of using the default download button if you want 64-bit. REQUIREMENTS Biber is written in Perl with the aim of providing a customised and sophisticated data preparation backend for biblatex. You do not need to install Perl use biber--binaries are provided for many operating systems via the main TeX distributions (TeXLive, MacTeX, MiKTeX) and also via download from SourceForge. You only need a Perl installation to use biber in one of the following cases: * A binary version is not available for your OS/platform * You wish to keep up with all of the bleeding-edge git commits before they are packaged into a binary. For the vast majority of users, using the latest binary for the OS/platform you are using will be what you want to do. For details on the requirements for installing the Perl program version, please see the biber PDF documentation. The git repository for Biber is kept on github: https://github.com/plk/biber SUPPORT AND DOCUMENTATION After installing, biber --help will give you the basic documentation. The latest PDF documentation can be found here: https://sourceforge.net/projects/biblatex-biber/files/biblatex-biber More information, bugfix releases, forums and bug tracker are available at: http://biblatex-biber.sourceforge.net BUGS Please report any bugs or feature requests on our sourceforge tracker at https://sourceforge.net/tracker2/?func=browse&group_id=228270 ========================== COPYRIGHT AND LICENCE Copyright (C) 2009--2013 François Charette and Philip Kime This program is free software; you can redistribute it and/or modify it under the terms of either: * the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version, or * the Artistic License version 2.0. ========================== biblatex-biber-1.8/META.yml000444000000000000 570412230324177 14751 0ustar00rootroot000000000000--- abstract: 'Biber is a much-augmented bibtex replacement for biblatex users' author: - 'Philip Kime ' build_requires: Config::AutoConf: 0.15 ExtUtils::LibBuilder: 0.02 configure_requires: Module::Build: 0.38 dynamic_config: 1 generated_by: 'Module::Build version 0.4007, CPAN::Meta::Converter version 2.120921' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 name: biblatex-biber provides: Biber: file: lib/Biber.pm version: 0 Biber::Config: file: lib/Biber/Config.pm version: 1.8 Biber::Constants: file: lib/Biber/Constants.pm version: 0 Biber::DataModel: file: lib/Biber/DataModel.pm version: 0 Biber::Entries: file: lib/Biber/Entries.pm version: 0 Biber::Entry: file: lib/Biber/Entry.pm version: 0 Biber::Entry::Name: file: lib/Biber/Entry/Name.pm version: 0 Biber::Entry::Names: file: lib/Biber/Entry/Names.pm version: 0 Biber::Input::file::biblatexml: file: lib/Biber/Input/file/biblatexml.pm version: 0 Biber::Input::file::bibtex: file: lib/Biber/Input/file/bibtex.pm version: 0 Biber::Input::file::endnotexml: file: lib/Biber/Input/file/endnotexml.pm version: 0 Biber::Input::file::ris: file: lib/Biber/Input/file/ris.pm version: 0 Biber::Input::file::zoterordfxml: file: lib/Biber/Input/file/zoterordfxml.pm version: 0 Biber::Internals: file: lib/Biber/Internals.pm version: 0 Biber::LaTeX::Recode: file: lib/Biber/LaTeX/Recode.pm version: 0 Biber::Output::base: file: lib/Biber/Output/base.pm version: 0 Biber::Output::bbl: file: lib/Biber/Output/bbl.pm version: 0 Biber::Output::biblatexml: file: lib/Biber/Output/biblatexml.pm version: 0 Biber::Output::bibtex: file: lib/Biber/Output/bibtex.pm version: 0 Biber::Output::dot: file: lib/Biber/Output/dot.pm version: 0 Biber::Output::test: file: lib/Biber/Output/test.pm version: 0 Biber::Section: file: lib/Biber/Section.pm version: 0 Biber::Sections: file: lib/Biber/Sections.pm version: 0 Biber::SortList: file: lib/Biber/SortList.pm version: 0 Biber::SortLists: file: lib/Biber/SortLists.pm version: 0 Biber::Utils: file: lib/Biber/Utils.pm version: 0 recommends: Readonly::XS: 0 requires: Business::ISBN: 0 Business::ISMN: 0 Business::ISSN: 0 Data::Compare: 0 Data::Dump: 0 Date::Simple: 0 Encode::EUCJPASCII: 0 Encode::HanExtra: 0 Encode::JIS2K: 0 File::Slurp: 0 IPC::Cmd: 0 IPC::Run3: 0 LWP::Protocol::https: 0 LWP::Simple: 0 List::AllUtils: 0 List::MoreUtils: 0 Log::Log4perl: 0 Mozilla::CA: 20130114 Regexp::Common: 0 Text::BibTeX: 0.66 URI: 0 Unicode::Collate: 0.98 Unicode::GCString: 0 XML::LibXML::Simple: 0 XML::LibXSLT: 0 XML::Writer: 0 autovivification: 0 perl: v5.16.0 resources: license: http://dev.perl.org/licenses/ version: 1.8 biblatex-biber-1.8/visual.pl000444000000000000 55412230324176 15315 0ustar00rootroot000000000000# Module::Build "Build test" invokes this after all test scripts to provide some user # feedback. See the manual for Module::Build. The name of this script is not arbitrary. use Biber; BEGIN { push @INC, 'blib/lib/'; } my $v = $Biber::Config::VERSION; $v .= ' (beta)' if $Biber::Config::BETA_VERSION; print "Finished testing biber $v using Perl $] at $^X\n"; biblatex-biber-1.8/Changes000444000000000000 4337012230324177 15014 0ustar00rootroot000000000000Revision history for Biber 1.8 (2013-10-21) * Perl 5.18 compatibility (hash order randomisation) * Removed Data::Diver module due to linux licensing restrictions * Misc Bug Fixes 1.7 (2013-07-07) * Added clrmacros option * Added map_nomatch * Added --tool_macro_fields option * Exposed sorting option to user-level config file (so sorting in tool mode is possible) 1.6 (2013-04-30) * Bugfixes * Now uses perl 5.16. Non-binary (unpacked) use requires perl 5.16+ * Improved tool mode with some formatting options * Made Unicode NFD/NFC boundaries more robust * labelyear is now labeldate to match biblatex 2.6 * Support for new CLONESOURCEKEY field (see biblatex 2.6 docs) * New padding character option in labelalphatemplate (see biblatex 2.6 docs) 1.5 (2013-01-10) * Added new source mapping option "map_entry_null" * Renamed some options (old ones remain as aliases): bibencoding -> input_encoding bblencoding -> output_encoding bblsafechars -> output_safechars bblsafecharsset -> output_safecharsset outfile -> output_file outformat -> output_format * New "tool" mode with "--tool" option which takes a data source as argument and just performs reencoding and source mappings etc. as per options and config file. * Support for customisable BibTeX data source list and name separators * Better debug output for source mapping * Better defined source mapping hierarchy with bugfixes 1.4 (2012-11-28) * Support for biblatex 2.4 style sourcemaps (See \DeclareStyleSourcemap in biblatex docs) * entrykey is now a possible read-only pseudo field in sourcemaps * Reencode data interface completely re-written. New user option --recodedata allows users to specify a new data file for defining reencoding sets. * Internal changes to allow multiple script/lang variants of fields in biblatex in the future. * Citation key aliases now supported more comprehensively, in crossrefs etc. * Support for new RELATEDOPTIONS field (see biblatex docs) * Misc bug fixes 1.3 (01-11-2012) * New "append" mode for sourcemap to allow combining of fields * map_final now possible for map_set_field steps which causes map to stop completely if map_overwrite is false and the field to set already exists * Allow extrayear generation when there is no labelyear 1.2 (20-08-2012) * Misc bug fixes 1.1 (01-08-2012) * Misc bug fixes * Fixed later CentOS libz issue by including latest libz for linux builds * Fixed DOT output (SF bug 3544894) 1.0 (01-07-2012) * Internal data model processing changes * New labeltitleyear and extratitleyear disambiguation tracker * New labeltitle and extratitle disambiguation tracker * Sorting per list enabled for biblatex 2.0 * New noinit option for ignoring parts of names when generating initials * Some optimisations for large data sources * Fixed build issues which broke PAR::Packer binary under latest Debian (Wheezy) 0.9.9 (30-03-2012) * Added sortfirstinits option * HTTPS support for remote data sources * Biber now ignores names when it can't determine minimal information like a lastname. Before, it would throw lots of errors and die. * Strips UTF-8 BOMs before passing to Text::BibTeX otherwise it complains * Merged --graph and --bltxml options into --outformat option * Updated some internal Unicode 6.0 things * Minor bug fixes 0.9.8 (20-12-2012) * Changed config file sourcemap syntax and docs * Support for citekey aliases * New DOT output format 0.9.7 (27-11-2011) * per-datasource mapping restrictions * Completely new config file format to allow for extensions * Fixed --help issue with PAR::Packer * Fixed .bcf XSL inheritance attribute value issue * Moved XDATA output skip into structure where it should have been originally 0.9.6 (13-11-2011) * Fixed binary issue with Readonly::XS not being detected * Fixed bug tracker ticket #3436870 * Match/replace functionality for data source field filtering * New AUCTeX patches for better biblatex/biber support * Now requires perl 5.14 for full Unicode 6.0 support * New XDATA entrytype and field to allow more complex macro-style data inheritance * crossref cascading is in guaranteed resolve order now * Warnings/error summary is now a more consistent format with all other biber messages. * Matching of .bcf keys to datasource keys is now case-sensitive * Fixed biblatex bug tracker ticket #3399744 * Fixed bug tracker ticket #3402114 * max/minnames -> max/mincitenames * max/min* now all per-type and per-entry * uniquelist/uniquename now per-entry * Re-factored recode module with XML data and XSL->HTML transform doc 0.9.5 (18-08-2011) * Fixed auto-bblsafechars bug * refactored explicit "and others" in bibtex data sources * Fixed issue with sorting=none and \nocite{*} 0.9.4 (30-07-2011) * Added support for "SORTSHORTHAND" field * New "map" option to allow user field/entry type mapping (aliasing) in addition to .dcf settings * Made the relevant places depend on max/min{alpha,bib}names instead of just max/minnames * Bug fixes to bblsafechars * Implemented user-customisable labelalpha (not yet in biblatex) * Implemented per-name hashes 0.9.3 (05-06-2011) * New mininit and minfull uniquename options * New minyear uniquelist option * Major revamp of uniqueness code * Moved to new external process calling module because IPC::Run doesn't work on Windows in packed binaries (kpsewhich was returning nothing). 0.9.2 (09-05-2011) * Some internal changes for perl 5.14 * Bug fixes for uniquelist processing 0.9.1 (29-04-2011) * Made temp files all use a global temp dir. * Moved temp .utf8 conversions to temp dir so biber works using .bib files which are in non-writable locations. * Added back an info log message about finding data sources (Lyx compat) 0.9 (29-03-2011) * No longer auto-escapes any TeX markup in bibtex data sources. This is fraught with danger and is a mess. Best not to do it at all. * Supports biblatex \bibnamedelimi macro * Implementation of uniquename and uniquelist options for biblatex 1.4+ 0.8.4 (19-03-2011) * Bug fixes (wrong escaping of "[", "_" and "]" in .bbl) 0.8.3 14-03-2011 * Biber now in TexLive * Added several new binary builds * All name part and element formatting is now abstracted into macros so that it can be controlled via biblatex. * Much more documentation on binary builds for packagers * Bug fixes 0.8.2 (14-02-2011) * Bug fixes 0.8.1 (12-02-2011) * Small bug with default bibtex month macro support * Made remote file support a little more robust (URI return codes) 0.8 (11-02-2011) * Forces biblatex format for month field * Added support for remote data sources * Added experimental support for RIS data sources * Took out -a and -d flags. These are no longer very useful as the increasingly sophisticated biblatex options cannot be set on the command line anyway and so these flags are less and less relevant * New inheritance model in sync with biblatex defaults * Bug fixes 0.7.4 (05-02-2011) * Fix for mincrossrefs leaking across sections (biblatex SF bug #3173032) 0.7.3 (03-02-2011) * Performance tuning for sorting * Text::BibTeX 0.51 for increased macro stack space * Support for old BibTeX month macros by default * Re-write of datasource processing to allow for modular plugins * Generalised nosort option. * Merged LaTeX::Decode into Biber::LaTeX::Recode and added encoding to deal with inputenc's limitations for PDFLaTeX users * new options for forcing/tuning UTF-8 -> LaTeX macro conversion * Bug fixes 0.7.2 (08-01-2011) * Improved latexmk compatibility more 0.7.1 (07-01-2011) * Improved latexmk compatibility * Added "x-ascii" encoding alias for "ascii" to deal with inputenx ascii. * Bug fixes 0.7 (05-01-2011) * Completely re-written sorting routine using Schwartzian transform for real multi-field support and per-field sorting settings. * Bug fixes 0.6.9 (dev beta) * Bug fixes 0.6.8 (dev beta) * Generalised sorting behaviour in several respects * Bug fixes 0.6.7 (dev beta) * Bug fixes 0.6.6 (dev beta) * More generalised sorting options * Bug fixes 0.6.5 (dev beta) * Bug fixes 0.6.4 (dev beta) * Bug fixes 0.6.3 (dev beta) * Outputs labelname name list to the .bbl * Support for dynamic sets and simpler static set interface * Misc bug fixes 0.6.2 (dev beta) * Internal cleanup of structure code * Misc bug fixes 0.6.1 (dev beta) * More comprehensive structural checks on allowed entrytypes/fields and field combinations/formats * Added option validate_structure to turn on structural checks * Renamed option validate -> validate_control * Renamed option output-directory -> output_directory * Added labelname and labelyear as possible sort specifications * Misc bug fixes 0.6 (20-11-2010) * First non-beta release * More abstracted and extensible crossref inheritance model * U::C dependency to 0.67 * sortcase and sortupper options now take same argument forms as in biblatex * Misc bug fixes 0.5.7 (09-10-2010) * Misc bug fixes 0.5.6 (04-10-2010) * Latex character macro decoding is now better defined in the whole (re)encoding workflow. * "inputenc" option is now "bblencoding" * "locale" option is now "sortlocale" * New option "sortupper" * Unicode::Collate sorting is now default as version 0.61 of this has XS module and CLDR tailoring. * Added binary dist build scripts * Removed bundled Module::Build as there are some conflicts with later versions. This is less of a problem anyway because the binary build makes it less necessary to make builds easy on perl<5.10 * Misc bug fixes 0.5.5 (29-08-2010) * Biber::BibTeX moved to Biber::Input::BibTeX. If upgrading, please remove your installed /Biber/BibTeX.pm, just to be tidy * New aliases for EPRINT classes and types implemented (see BibLaTeX docs). * Biber now resolves XREFs as well as CROSSREFs so one less LaTeX pass is needed * Allows UTF-8 citekeys. Requires Text::BibTeX >= 0.46 and a fully UTF-8 aware TeX macro package (e.g. XeTeX or LuaLaTeX). Normal LaTeX with \inputenc will not work because the UTF-8 it uses is incomplete, macro based and not native. * RecDescent parser is no longer supported or included. If upgrading, please remove your installed /Biber/BibTeX directory, just to be tidy * Now requires LaTeX::Decode >= 0.03 * Stricter version dependency for Text::BibTeX. Older than 0.42 is rather useless for complex names. * Re-factored and enhanced auto-re-encoding of .bib/.bbl. With biblatex 0.9c, Biber handles all reencoding. * Misc bug fixes 0.5.4 (04-08-2010) * Case-sensitive sorting option * Multi-section support. Only one biber pass needed to process all bib sections using extended biblatex 0.9b .bbl format. * .aux file is no longer used by biber - all information is passed in .bcf file. * Misc bug fixes * LaTeX::Decode is now a separate CPAN module and is no longer included 0.5.3 (19-03-2010) * Changed semantics of --outfile and --output-directory. --outfile is now relative to --output-directory. If --outfile is absolute, it is stripped to the filename and the path discarded. Absolute .aux paths are stripped to filename for appending to --output-directory. * Updated PRD to use new encoding option names. Now works with -e. * sortlos was not settable to use bib sort order * With Text::BibTeX >= 0.42, will do all name/initials generation with btparse library. * Abstracted BBL output into Biber::Output class for better re-use and potential for output formats other than .bbl. * Synced uniquename .bcf values with change in biblatex 0.9a 0.5.2 (04-03-2010) * Locale fixes * Uniquename fixed to match BibLaTeX option values * Improved error message for malformed names * Fixed config file problems under windows and also added option to ignore config file * Bug with conflicting case between citations and bib entries * Moved pure perl parsename to PRD.pm * Re-write of name parsing to use Text::BibTeX::Name by default * Fields which can be null are explicitly flagged * Add THANKS file * Die early when biber is called without argument * Fixed Mac config path error * .bib parse continues after certain errors * regularised collate options processing * field nameaddon was missing from Biber::Constants * Improved warning message for missing backend=biber * SF bug 2952347 fix (empty date range end) * uniquename counter was being provided incorrectly 0.5.1 (15-02-2010) * Remove support for legacy control files (\jobname-blx.bib): Biber now only reads .bcf files written by biblatex with the option "backend=biber". * Improved handling of "uniquename" and "namehash". * Don't apply latexescape in bbl output, as it breaks math formatting. 0.5 (13-02-2010) * Supports all changes introduced by biblatex 0.9 * Moved all parts relating to the experimental BibLaTeXML format to the "biblatexml" branch on the git repo * Communication between biblatex and Biber can be done through a XML-based config file (extension .bcf): this is enabled with the experimental biblatex option "backend=biber" * Biber can now be customized with a configuration file * Considerable refactoring and cleanup of the code * Further enhancements to the test suite * Improved logging mechanism * More robust parsing of personal names * Ignore certain prefixes and diacritics in sort strings, for instance ʿAlī is sorted under A, and al-Hasan under H. This can be customized in the configuration file (biber.conf). * New command-line option --output-directory (like TeX) * Many, many bugfixes 0.4.3 (23-07-2009) * With biblatex option "backend=biber" and biber option --v2 the new experimental control file \jobname.bcf is used, which brings in many new features, such as per-entrytype settings. * More sophisticated/customizable sorting mechanism * More extensive test suite * Improved BibLaTeXML schema * improved handling of BibLaTeXML (enable nested children, formatting elements, nosort elements) * Do not apply latexescape() by default on xml strings * Skip title handling in BibLaTeXML when not existing * Ignore maxline, add option wraplines * Built-in sort is now default (option --fastsort) * Sorting with Unicode::Collate is possible with option --collate * Make tests succeed w/o Parse::RD and Regexp::Common * Don't output date and urldate in the bbl * Add missing fields "date" "urldate" "organization" "annotator" "foreword" and "eventtitle" * Use Data::Dump instead of Data::Dumper for debugging * Fields "library" and "remarks" are now skipped * Bugfix for aliases (e.g. address, school) * Bugfix: process urldate to get urlyear,urlmonth,urlday * Remove illegal value shorttranslator from labelname option * Changed biberdebug option to debug * Changed option inputencoding to bibencoding 0.4.2 (25-04-2009) * New option --inputencoding to handle 8-bit encoded bib files * $BIBINPUT environment is now searched * Improved parsing of personal names * @comments are now silently ignored * Fixed handling of @preamble; multiple preambles are allowed * Warnings and errors behave more like BibTeX * Alias fields are automatically converted (e.g. address -> location) * Take care of "phdthesis" and "mathesis" types * Cite keys of bib files are now case-insensitive * Default Unicode collation now uses the table "latinkeys.txt" (this is much faster than "allkeys.txt" which contains rules for all Unicode glyphs) * Unicode::Collate parameters can be passed as a command-line option * Faster sorting (with option -f) is also possible for specific locales given with option --locale (this is OS-dependent however) * PRD grammar is now precompiled * bbl output is now wrapped acc to maxline option * Empty fields are no longer printed in the bbl * Sorting is much improved. * Use sortstring separators 0 1 2 like biblatex.bst * Handle truncation of name lists acc to minnames/maxnames * bib2biblatexml has been improved * Windows version of Text::BibTeX provided as ppm. * Many more bugfixes 0.4.1 (31-03-2009) * Text::BibTeX now optional dependency 0.4 (27-03-2009) * Initial beta release biblatex-biber-1.8/THANKS000444000000000000 74012230324177 14366 0ustar00rootroot000000000000We acknowledge the help of: Philipp Lehman, who gave us biblatex, and without whose close collaboration Biber development would not be possible. Alberto Manuel Brandão Simões, the maintainer of Text-BibTeX, for willingly complying to our special requests. John Collins for integration with the excellent latexmk tool. We also wish to thank the following persons for their useful feedback, bug reports, etc.: Simon Spiegel Thomas Arildsen and several others biblatex-biber-1.8/Build.PL000444000000000000 554212230324177 14774 0ustar00rootroot000000000000use strict; use warnings; use utf8; require Module::Build; my $class = Module::Build->subclass ( class => 'My::Builder', code => q{ sub ACTION_test { my $self = shift; $ENV{'LANG'} = 'C'; # set LANG to something known for tests $self->SUPER::ACTION_test; } sub ACTION_docs { my $self = shift; $self->depends_on('code'); $self->depends_on('manpages'); # skip html on perls where it's enabled } } ); my $builder = $class->new( dist_name => 'biblatex-biber', license => 'perl', dist_author => 'Philip Kime ', dist_abstract => 'Biber is a much-augmented bibtex replacement for biblatex users', dist_version_from => 'lib/Biber/Config.pm', build_recommends => { 'Test::More' => 0, 'File::Which' => 0, }, add_to_cleanup => [ 'biber-*' ], configure_requires => { 'Module::Build' => 0.38 }, build_requires => { 'Config::AutoConf' => '0.15', 'ExtUtils::LibBuilder' => '0.02' }, requires => { 'autovivification' => 0, 'Data::Dump' => 0, 'Data::Compare' => 0, 'Date::Simple' => 0, 'File::Slurp' => 0, 'IPC::Cmd' => 0, 'IPC::Run3' => 0, 'List::AllUtils' => 0, 'List::MoreUtils' => 0, 'Mozilla::CA' => '20130114', 'Regexp::Common' => 0, 'Log::Log4perl' => 0, 'Unicode::Collate' => '0.98', 'Unicode::GCString' => 0, 'Encode::EUCJPASCII' => 0, 'Encode::JIS2K' => 0, 'Encode::HanExtra' => 0, 'XML::LibXML::Simple' => 0, 'XML::LibXSLT' => 0, 'XML::Writer' => 0, 'URI' => 0, 'Text::BibTeX' => '0.66', 'LWP::Simple' => 0, 'LWP::Protocol::https' => 0, 'Business::ISBN' => 0, 'Business::ISSN' => 0, 'Business::ISMN' => 0, 'perl' => '5.16.0' }, recommends => { 'Readonly::XS' => 0, }, script_files => [ glob( "bin/*" ) ], data_files => {'data/schemata/config.rnc' => 'lib/Biber/config.rnc', 'data/schemata/config.rng' => 'lib/Biber/config.rng', 'data/schemata/bcf.rnc' => 'lib/Biber/bcf.rnc', 'data/schemata/bcf.rng' => 'lib/Biber/bcf.rng', 'data/biber-tool.conf' => 'lib/Biber/biber-tool.conf', 'lib/Biber/LaTeX/recode_data.xml' => 'lib/Biber/LaTeX/recode_data.xml', 'data/schemata/biblatexml.rnc' => 'lib/Biber/biblatexml.rnc', 'data/schemata/biblatexml.rng' => 'lib/Biber/biblatexml.rng', 'data/bcf.xsl' => 'lib/Biber/bcf.xsl', 'data/latinkeys.txt' => 'lib/Unicode/Collate/latinkeys.txt' } ); $builder->add_build_element('data'); $builder->create_build_script(); biblatex-biber-1.8/META.json000444000000000000 1140212230324176 15130 0ustar00rootroot000000000000{ "abstract" : "Biber is a much-augmented bibtex replacement for biblatex users", "author" : [ "Philip Kime " ], "dynamic_config" : 1, "generated_by" : "Module::Build version 0.4007, CPAN::Meta::Converter version 2.120921", "license" : [ "perl_5" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : "2" }, "name" : "biblatex-biber", "prereqs" : { "build" : { "requires" : { "Config::AutoConf" : "0.15", "ExtUtils::LibBuilder" : "0.02" } }, "configure" : { "requires" : { "Module::Build" : "0.38" } }, "runtime" : { "recommends" : { "Readonly::XS" : "0" }, "requires" : { "Business::ISBN" : "0", "Business::ISMN" : "0", "Business::ISSN" : "0", "Data::Compare" : "0", "Data::Dump" : "0", "Date::Simple" : "0", "Encode::EUCJPASCII" : "0", "Encode::HanExtra" : "0", "Encode::JIS2K" : "0", "File::Slurp" : "0", "IPC::Cmd" : "0", "IPC::Run3" : "0", "LWP::Protocol::https" : "0", "LWP::Simple" : "0", "List::AllUtils" : "0", "List::MoreUtils" : "0", "Log::Log4perl" : "0", "Mozilla::CA" : "20130114", "Regexp::Common" : "0", "Text::BibTeX" : "0.66", "URI" : "0", "Unicode::Collate" : "0.98", "Unicode::GCString" : "0", "XML::LibXML::Simple" : "0", "XML::LibXSLT" : "0", "XML::Writer" : "0", "autovivification" : "0", "perl" : "v5.16.0" } } }, "provides" : { "Biber" : { "file" : "lib/Biber.pm", "version" : 0 }, "Biber::Config" : { "file" : "lib/Biber/Config.pm", "version" : "1.8" }, "Biber::Constants" : { "file" : "lib/Biber/Constants.pm", "version" : 0 }, "Biber::DataModel" : { "file" : "lib/Biber/DataModel.pm", "version" : 0 }, "Biber::Entries" : { "file" : "lib/Biber/Entries.pm", "version" : 0 }, "Biber::Entry" : { "file" : "lib/Biber/Entry.pm", "version" : 0 }, "Biber::Entry::Name" : { "file" : "lib/Biber/Entry/Name.pm", "version" : 0 }, "Biber::Entry::Names" : { "file" : "lib/Biber/Entry/Names.pm", "version" : 0 }, "Biber::Input::file::biblatexml" : { "file" : "lib/Biber/Input/file/biblatexml.pm", "version" : 0 }, "Biber::Input::file::bibtex" : { "file" : "lib/Biber/Input/file/bibtex.pm", "version" : 0 }, "Biber::Input::file::endnotexml" : { "file" : "lib/Biber/Input/file/endnotexml.pm", "version" : 0 }, "Biber::Input::file::ris" : { "file" : "lib/Biber/Input/file/ris.pm", "version" : 0 }, "Biber::Input::file::zoterordfxml" : { "file" : "lib/Biber/Input/file/zoterordfxml.pm", "version" : 0 }, "Biber::Internals" : { "file" : "lib/Biber/Internals.pm", "version" : 0 }, "Biber::LaTeX::Recode" : { "file" : "lib/Biber/LaTeX/Recode.pm", "version" : 0 }, "Biber::Output::base" : { "file" : "lib/Biber/Output/base.pm", "version" : 0 }, "Biber::Output::bbl" : { "file" : "lib/Biber/Output/bbl.pm", "version" : 0 }, "Biber::Output::biblatexml" : { "file" : "lib/Biber/Output/biblatexml.pm", "version" : 0 }, "Biber::Output::bibtex" : { "file" : "lib/Biber/Output/bibtex.pm", "version" : 0 }, "Biber::Output::dot" : { "file" : "lib/Biber/Output/dot.pm", "version" : 0 }, "Biber::Output::test" : { "file" : "lib/Biber/Output/test.pm", "version" : 0 }, "Biber::Section" : { "file" : "lib/Biber/Section.pm", "version" : 0 }, "Biber::Sections" : { "file" : "lib/Biber/Sections.pm", "version" : 0 }, "Biber::SortList" : { "file" : "lib/Biber/SortList.pm", "version" : 0 }, "Biber::SortLists" : { "file" : "lib/Biber/SortLists.pm", "version" : 0 }, "Biber::Utils" : { "file" : "lib/Biber/Utils.pm", "version" : 0 } }, "release_status" : "stable", "resources" : { "license" : [ "http://dev.perl.org/licenses/" ] }, "version" : "1.8" } biblatex-biber-1.8/TODO.org000444000000000000 24512230324176 14730 0ustar00rootroot000000000000* Sample XSLT transform but not in biber * bltxml either should have no schema or it should be dynamically created from the data model. A static schema is pointless biblatex-biber-1.8/MANIFEST000444000000000000 736512230324177 14636 0ustar00rootroot000000000000bin/biber Build.PL Changes data/bcf.xsl data/biber-tool.conf data/latinkeys.txt data/schemata/bcf.rnc data/schemata/bcf.rng data/schemata/biblatexml.rnc data/schemata/biblatexml.rng data/schemata/config.rnc data/schemata/config.rng data/schemata/texmap.rnc data/texmap.xsl doc/biber.pdf doc/biber.tex doc/biber-texworks.png lib/Biber/Config.pm lib/Biber/Constants.pm lib/Biber/DataModel.pm lib/Biber/Entries.pm lib/Biber/Entry/Name.pm lib/Biber/Entry/Names.pm lib/Biber/Entry.pm lib/Biber/Input/file/biblatexml.pm lib/Biber/Input/file/bibtex.pm lib/Biber/Input/file/endnotexml.pm lib/Biber/Input/file/ris.pm lib/Biber/Input/file/zoterordfxml.pm lib/Biber/Internals.pm lib/Biber/LaTeX/recode_data.xml lib/Biber/LaTeX/Recode.pm lib/Biber/Output/base.pm lib/Biber/Output/biblatexml.pm lib/Biber/Output/bibtex.pm lib/Biber/Output/bbl.pm lib/Biber/Output/dot.pm lib/Biber/Output/test.pm lib/Biber.pm lib/Biber/Section.pm lib/Biber/Sections.pm lib/Biber/SortList.pm lib/Biber/SortLists.pm lib/Biber/Utils.pm MANIFEST META.json META.yml README t/basic-misc.t t/bcfvalidation.t t/biblatexml.t t/bibtex-aliases.t t/bibtex-forms.t t/bibtex-output.t t/configfile.t t/crossrefs.t t/dm-constraints.t t/dm-dateformats.t t/encoding.t t/endnotexml.t t/extratitle.t t/extratitleyear.t t/extrayear.t t/full.t THANKS t/labelalpha.t t/labelname.t t/names.t TODO.org t/options.t t/pod-coverage.t t/pod.t t/related-entries.t t/remote-files.t t/ris.t t/sections-complex.t t/sections.t t/set-dynamic.t t/set-legacy.t t/set-static.t t/skips.t t/sort-case.t t/sort-complex.t t/sorting.t t/sortlists.t t/sort-order.t t/sort-uc.t t/tool.t t/tool-bltxml.t t/tdata/biber-test.conf t/tdata/tool-test.conf t/tdata/biblatexml.bcf t/tdata/biblatexml.bltxml t/tdata/bibtex-aliases.bcf t/tdata/bibtex-aliases.bib t/tdata/bibtex-forms.bcf t/tdata/bibtex-forms.bib t/tdata/bibtex-output.bcf t/tdata/crossrefs.bcf t/tdata/crossrefs.bib t/tdata/dm-constraints.bcf t/tdata/dm-constraints.bib t/tdata/dm-dateformats.bcf t/tdata/dm-dateformats.bib t/tdata/encoding1.bcf t/tdata/encoding1.bib t/tdata/encoding2.bcf t/tdata/encoding2.bib t/tdata/encoding3.bcf t/tdata/encoding3.bib t/tdata/encoding4.bcf t/tdata/encoding4.bib t/tdata/encoding5.bcf t/tdata/encoding5.bib t/tdata/encoding6.bcf t/tdata/encoding6.bib t/tdata/endnote.xml t/tdata/endnotexml.bcf t/tdata/examples.bib t/tdata/extratitle.bcf t/tdata/extratitle.bib t/tdata/extratitleyear.bcf t/tdata/extratitleyear.bib t/tdata/extrayear.bcf t/tdata/extrayear.bib t/tdata/extrayear.bib t/tdata/full1.bbl t/tdata/full.bcf t/tdata/full.bib t/tdata/general1.bcf t/tdata/general2.bcf t/tdata/labelalpha.bcf t/tdata/labelalpha.bib t/tdata/labelalpha.bib t/tdata/names.bcf t/tdata/names.bib t/tdata/names.bib t/tdata/options.bcf t/tdata/options.bib t/tdata/options.bib t/tdata/related.bcf t/tdata/related.bib t/tdata/remote-files.bcf t/tdata/ris1.ris t/tdata/ris.bcf t/tdata/sections1.bib t/tdata/sections2.bib t/tdata/sections3.bib t/tdata/sections4.bib t/tdata/sections.bcf t/tdata/sections-complex.bcf t/tdata/set-dynamic.bcf t/tdata/set-legacy.bcf t/tdata/sets.bib t/tdata/set-static.bcf t/tdata/skips.bcf t/tdata/skips.bib t/tdata/skips.bib t/tdata/sort.bib t/tdata/sort.bib t/tdata/sort-case.bcf t/tdata/sort-case.bib t/tdata/sort-complex.bcf t/tdata/sortlists.bcf t/tdata/sortlists.bib t/tdata/sort-order.bcf t/tdata/sort-order.bib t/tdata/sort-order.bib t/tdata/sort-uc.bcf t/tdata/sort-uc.bib t/tdata/tool.bib t/tdata/uniqueness1.bcf t/tdata/uniqueness1.bib t/tdata/uniqueness2.bcf t/tdata/uniqueness2.bib t/tdata/uniqueness3.bcf t/tdata/uniqueness3.bib t/tdata/uniqueness4.bcf t/tdata/uniqueness4.bib t/tdata/uniqueness5.bcf t/tdata/uniqueness5.bib t/tdata/xdata.bcf t/tdata/xdata.bib t/tdata/xdata.bltxml t/tdata/zotero.rdf t/tdata/zoterordfxml.bcf t/uniqueness.t t/utils.t t/xdata.t t/zoterordfxml.t visual.pl biblatex-biber-1.8/doc000755000000000000 012230324177 14102 5ustar00rootroot000000000000biblatex-biber-1.8/doc/biber.tex000444000000000000 35034612230324175 16115 0ustar00rootroot000000000000% To make this maximally compatible with older PDF readers, it uses % PDF 1.4 \pdfminorversion=4 \documentclass{ltxdockit} \usepackage{btxdockit} \usepackage[british]{babel} \usepackage[strict=true,autostyle=true]{csquotes} \usepackage{ifthen} \usepackage{fontspec} \usepackage{tikz} \usepackage{graphicx} \usepackage{booktabs} \usepackage{fixfoot} \usepackage{color} \usepackage{listings} \usepackage{metalogo} \usepackage[retainmissing]{MnSymbol} \setmainfont[Ligatures=TeX]{CMU Serif} \setsansfont[Ligatures=TeX]{CMU Sans Serif} \setmonofont{CMU Typewriter Text} \def\BibLaTeX{\textsc{Bib}\latex} \def\BibTeX{\textsc{Bib}\kern-.08em \TeX} \renewcommand{\labelitemii}{$\circ$} \newcommand*{\biber}{Biber\xspace} \newcommand*{\biblatex}{Biblatex\xspace} \MakeAutoQuote{«}{»} \gdef\biberversion{1.8} % BIBER VERSION \gdef\biblatexversion{2.8} % BIBLATEX VERSION % Set up tikz things \usetikzlibrary{shapes.geometric} \usetikzlibrary{arrows} \usetikzlibrary{fit} \usetikzlibrary{calc} \tikzstyle{file} = [rectangle, black, very thick, draw=blue, fill=blue!20, minimum width=6em, minimum height=3em, align=center] \tikzstyle{funit} = [rectangle, rounded corners=1ex, black, very thick, shape border rotate=-90, draw=green, fill=green!20, minimum size=3em, align=center] % colours for the .dot examples \xdefinecolor{centry}{HTML}{A0D0FF} \xdefinecolor{ncentry}{HTML}{DEEFFF} \xdefinecolor{doentry}{HTML}{FDFFD9} \xdefinecolor{section}{HTML}{FCE3FA} \xdefinecolor{set}{HTML}{E3DADC} \xdefinecolor{related}{HTML}{AD1741} \xdefinecolor{clone}{HTML}{AD1741} \xdefinecolor{crossref}{HTML}{7D7879} \xdefinecolor{xref}{HTML}{7D7879} \xdefinecolor{xdata}{HTML}{2CA314} \DeclareFixedFootnote{\tpb}{Binary maintained by third party. See README in binary download directory for this platform for support/contact details. Usually, the binary maintainer is also the binary build provider for \TeX Live.} \titlepage{% title={biber}, subtitle={A backend bibliography processor for biblatex}, url={http://biblatex-biber.sourceforge.net}, author={Philip Kime, François Charette}, email={Philip@kime.org.uk, firmicus@ankabut.net}, revision={biber \biberversion\ (biblatex \biblatexversion)}, date={\today}} \hypersetup{% pdftitle={biber}, pdfsubject={A backend bibliography processor for biblatex}, pdfauthor={Philip Kime}, pdfkeywords={biblatex, bibliography}} % Control list spacing \usepackage{enumitem} \setdescription{noitemsep} \setenumerate{noitemsep} \setitemize{noitemsep} \def\biberex#1{\hbox{\hspace{-4em}\texttt{\small \detokenize{#1}}}} \begin{document} \definecolor{grey}{rgb}{0.7,0.7,0.7} \printtitlepage \tableofcontents \section{Important Changes}\label{special} Please see the \verb+Changes+ file which accompanies \biber\ for the details on changes in each version. This section is just for important things like incompatible changes which users should be aware of. \minisec{1.8} Various option name changes. Old names are retained for backwards compatibility. See the output of the \opt{--help} option. \minisec{1.0} The \opt{--validate\_structure} option is now called \opt{--validate\_datamodel} \minisec{0.9.9} The output format option \opt{--graph} has been moved to a new option \opt{--output\_format}. The option \opt{--graph} should now be specified as \opt{--output\_format=dot} and the \linebreak\opt{--dot\_include} option should be used to specify the elements to include in the DOT output. For example: \begin{verbatim} biber --graph=section,field \end{verbatim} \noindent is now: \begin{verbatim} biber --output_format=dot --dot_include=section,field \end{verbatim} \minisec{1.8} \textcolor{red}{Several option names have changed}. Several options have changed names to facilitate better semantic classification of options. The previous names are supported as legacy aliases. See the \verb+--help+ output of the \biber command. \minisec{0.9.8} \textcolor{red}{The \opt{sourcemap} option syntax has changed}.The syntax was too confusing. It is now simplified and more powerful. It is uses a sequential processing model to apply mappings to an entry. See section \ref{ref:map}. \minisec{0.9.7} \textcolor{red}{The user config file has a completely new format}.The reason for this is that the older \verb+Config::General+ format could not be extended to deal with more sophisticated features like per-datasource restrictions. An XML format is much better and in fact easier to understand. The old format of the \opt{map} option (now called \opt{sourcemap}) was rather confusing because of limitations in the old config file format. Please see section \ref{ref:map} and convert your config files to the new format. \minisec{0.9.6} \textcolor{red}{Matching of citation keys and datasource entry keys is now \emph{case-sensitive}}. This is to enforce consistency across the entire Bib\latex\ and \biber\ processing chain. All of the usual referencing mechanisms in \latex\ are case-sensitive and so is the matching in Bib\latex\ of citations to entries in the \texttt{.bbl} file generated by \biber. It is inconsistent and messy to enforce case-insensitivity in only \biber's matching of citations keys to datasource entry keys. If \biber\ detects what looks like a case mismatch between citation keys, it will warn you. \noindent \textcolor{red}{Summary of warnings/errors is now a new format}. When \biber\ finishes writing the \verb+.bbl+, it gives a summary count of errors/warnings. It used to do this in the same format as Bib\TeX, for compatibility. Now it uses a more consistent and easier to parse format which matches all other \biber\ messages. Please note if you need to support \biber\ in an external tool. I have updated the notes on AUC\TeX\ support below to reflect this. \section{Introduction}\label{int} \subsection{About} \biber\ is conceptually a \BibTeX\ replacement for \biblatex. It is written in Perl with the aim of providing a customised and sophisticated data preparation backend for \biblatex. You do \emph{not} need to install Perl to use \biber---binaries are provided for many operating systems via the main \TeX\ distributions (\TeX Live, Mac\TeX, MiK\TeX) and also via download from SourceForge. Functionally, \biber\ offers a superset of \BibTeX's capabilities but is tightly coupled with \biblatex\ and cannot be used as a stand-alone tool with standard \verb+.bst+ styles. \biber's primary role is to support \biblatex\ by performing the following tasks: \begin{itemize} \item Parsing data from datasources \item Processing cross-references, entry sets, related entries \item Generating data for name, name list and name/year disambiguation \item Structural validation according to \biblatex\ data model \item Sorting reference lists \item Outputting data to a \verb+.bbl+ for \biblatex\ to consume \end{itemize} \biber\ also has the ability to output different formats than \file{.bbl} and can, for example, output a new \bibtex\ file which contains only cited entries from the datasources (using the \opt{--output\_format=bibtex} option). There is also a «,very thick] (mapp); \node[funit] (dyn) [below of=mapp,node distance=6em] {Instantiate dynamic sets and\\related entries} edge [<-,very thick] (mapp); \node[funit] (xdata) [below of=dyn,node distance=6em] {Process XDATA} edge [<-,very thick] (dyn); \node[funit] (crossrefs) [below of=xdata,node distance=6em] {Process cross-references and\\sets} edge [<-,very thick] (xdata); \node[funit] (validate) [below of=crossrefs,node distance=6em] {Validate data model} edge [<-,very thick] (crossrefs); \node[funit] (pre) [below of=validate,node distance=6em] {Resolve label* fields\\generate hashes\\enforce mincrossrefs} edge [<-,very thick] (validate); \node[funit] (unique) [right of=decode,node distance=16em] {Generate uniqueness data}; \draw[->,very thick] (pre.east) -- ($ (pre.east) + (2em,0) $) -- ($ (unique.west) - (2em,0) $) -- (unique.west); \node[funit] (visible) [below of=unique,node distance=6em] {Generate name visibility data} edge [<-,very thick] (unique); \node[funit] (post) [below of=visible,node distance=6em] {Generate more hashes and\\labels} edge [<-,very thick] (visible); \node[funit] (sort) [below of=post,node distance=6em] {Perform sorting} edge [<-,very thick] (post); \node[funit] (output) [below of=sort,node distance=6em] {Construct output objects} edge [<-,very thick] (sort); \node[funit] (encode) [below of=output,node distance=6em] {Encode to output encoding} edge [<-,very thick] (output); \node[file] (bbl) [below of=encode,node distance=8em] {output file} edge [<-,very thick] (encode); \end{tikzpicture} \caption{Overview of \biber's main functional units} \label{fig:overview} \end{figure} It may be useful to know something about the different routes a datasource entry can take as it passes through \biber. \begin{enumerate} \item\label{list:cited} All cited entries which are subsequently found in a datasource are instantiated in the internal \biber\ data model. \item Some uncited entries on which cited entries depend are instantiated in the internal \biber\ data model: \begin{itemize} \item Entries with entrytype \bibtype{XDATA} which are referenced from cited entries. \item Entries mentioned in the \bibfield{CROSSREF} or \bibfield{XREF} field of a cited entry (unless they are also cited themselves in which case they are already instantiated as per item \ref{list:cited} above). \item Clones of entries mentioned as a «related» entry of a cited entry. \item Members of sets, either explicit \bibtype{SET} entrytype entries or dynamic sets. \end{itemize} \item Some uncited but instantiated entries are promoted to cited status so that they make it into the output: \begin{itemize} \item Entries instantiated by being members of a set. \item Entries instantiated by being mentioned as a \bibfield{CROSSREF} are promoted to cited status if \bibfield{CROSSREF}'ed or \bibfield{XREF}'ed at least \opt{mincrosref} times. \item Clones of entries mentioned as a «related» entry of a cited entry. \end{itemize} \item Some of these auto-cited entries have the «dataonly» option set on them so that \biblatex\ will only use them for data and will not output them to the bibliography: \begin{itemize} \item Clones of entries mentioned as a «related» entry of a cited entry. \end{itemize} \end{enumerate} \subsection{Performance} \biber\ can't really be compared with \BibTeX\ in any meaningful way performance-wise. \biber\ is written in Perl and does a \emph{great} deal more than \BibTeX\ which is written in C. One of \biber's test cases is a 2150 entry, 15,000 line \verb+.bib+ file which references a 630 entry macros file with a resulting 160 or so page (A4) formatted bibliography. This takes \biber\ under 3 minutes to process on a reasonable computer. This is perfectly acceptable, especially for a batch program. \subsection{Acknowledgements} François Charette originally wrote a first modest version of \biber. Philip Kime joined in the development in 2009 and is largely responsible for making it what it is today. \section{Use} Firstly, please note that \biber\ will \emph{not} attempt to sanitise the content of \BibTeX\ datasources. That is, don't expect it to auto-escape any \TeX\ special characters like «\verb+&+» or «\verb+%+» which it finds in, for example, your \bibfield{TITLE} fields. It used to do this in earlier versions in some cases but as of version 0.9, it doesn't because it's fraught with problems and leads to inconsistent expectations and behaviour between different datasource types. In your \BibTeX\ data sources, please make sure your entries are legal \TeX\ code. Running \opt{biber --help} will display all options and a brief description of each. This is the most useful brief source of usage information. \biber\ returns an exit code of 0 on success or 1 if there was an error. Most \biber\ options can be specified in long or short format. When mentioning options below, they are referred to as «\opt{long form|short form}» when an option has both a long and short form. As usual with such options, when the option requires an argument, the long form is followed by an equals sign «\verb+=+» and then the argument, the short form is followed by a space and then the argument. For example, the \opt{--configfile|-g} option can be given in two ways: \begin{verbatim} biber --configfile=somefile.conf biber -g somefile.conf \end{verbatim} With the \opt{backend=biber} option, \biblatex\ switches its backend interface and passes all options and information relevant to \biber's operation in a control file with extension \verb+.bcf+\footnote{\biblatex\ Control File}. This is conceptually equivalent to the \verb+.aux+ file which \latex\ uses to pass information to \BibTeX. The \verb+.bcf+ file is XML and contains many options and settings which configure how \biber\ is to process the bibliography and generate the \verb+.bbl+ file. The usual way to call \biber\ is simply with the \verb+.bcf+ file as the only argument. \biblatex\ always writes the control file with a \verb+.bcf+ extension. Specifying the «\verb+.bcf+» extension to \biber\ is optional. Assuming a control file called \verb+test.bcf+, the following two commands are equivalent: \begin{verbatim} biber test.bcf biber test \end{verbatim} \noindent Figure \ref{fig:biber-mdf} is a graphical overview of the data flow for data model information. See Figure \ref{fig:overview} for a more complete overview of \biber's processing steps. \begin{figure}[!htpb] \centering\small \begin{tikzpicture} \node[file] (dsfile) {datasource}; \node[funit] (remap) [below of=dsfile, node distance=8em] {remap} edge [<-,dashed] (dsfile); \node[file] (docremap) [left of=dsfile, node distance=15em] {document data model mapping\\from \texttt{.bcf}} edge [->,dashed] (remap); \node[file] (defaultremap) [left of=remap, node distance=15em] {default data model mapping\\from \texttt{.bcf}} edge [->,dashed] (remap); \node[file] (conf) [below of=remap, node distance=7em] {data model mapping\\from \biber\ config file} edge [->,dashed] (remap); \node[funit] (parser) [right of=remap, node distance=8em] {parser} edge [<-,very thick] (remap); \node[funit] (validation) [right of=parser, node distance=8em] {validation} edge [<-,very thick] (parser); \node[file] (hard) [above of=validation, node distance=8em] {\biblatex\ data\\model from \texttt{.bcf}} edge [->,dashed] (parser) edge [->,dashed] (remap) edge [->,dashed] (validation); \node[file] (bbl) [below of=validation, node distance=8em] {output file} edge [<-,very thick] (validation); \end{tikzpicture} \caption{Model data flow in \biber} \label{fig:biber-mdf} \end{figure} \bigskip \subsection{Options and config file}\label{conffile} \biblatex\ options which \biber\ needs to know about are passed via the \verb+.bcf+ file. See Table \ref{tab:bltxopts} for the \biblatex\ options which \biber\ uses and also for the scopes which are supported for each option. \biber\ also has its own options which are set using the following resource chain, given in decreasing precedence order:\\[2ex] \begin{table} \begin{center} \small \begin{tabular}{lllll} \toprule \biblatex\ option & Global & Per-type & Per-entry\\ \midrule alphaothers & \checkmark & \checkmark & \\ dataonly & & \checkmark & \checkmark\\ inheritance & \checkmark & & \\ labelalpha & \checkmark & \checkmark & \\ labelalphatemplate & \checkmark & \checkmark & \\ labeldate & \checkmark & \checkmark & \\ labeldatespec & \checkmark & \checkmark & \\ labelnamespec & \checkmark & \checkmark & \\ labelnumber & \checkmark & \checkmark & \\ labeltitle & \checkmark & \checkmark & \\ labeltitleyear & \checkmark & \checkmark & \\ maxalphanames & \checkmark & \checkmark & \checkmark\\ maxbibnames & \checkmark & \checkmark & \checkmark\\ maxcitenames & \checkmark & \checkmark & \checkmark\\ maxitems & \checkmark & \checkmark & \checkmark\\ minalphanames & \checkmark & \checkmark & \checkmark\\ minbibnames & \checkmark & \checkmark & \checkmark\\ mincitenames & \checkmark & \checkmark & \checkmark\\ minitems & \checkmark & \checkmark & \checkmark\\ presort & \checkmark & \checkmark & \checkmark\\ singletitle & \checkmark & \checkmark & \\ skipbib & & \checkmark & \checkmark\\ skiplab & & \checkmark & \checkmark\\ skiplos & & \checkmark & \checkmark\\ sortalphaothers & \checkmark & \checkmark & \\ sortexclusion & & \checkmark & \\ sortfirstinits & \checkmark & & \\ sorting & \checkmark & & \\ uniquelist & \checkmark & \checkmark & \checkmark\\ uniquename & \checkmark & \checkmark & \checkmark\\ useauthor & \checkmark & \checkmark & \checkmark\\ useeditor & \checkmark & \checkmark & \checkmark\\ useprefix & \checkmark & \checkmark & \checkmark\\ usetranslator & \checkmark & \checkmark & \checkmark\\ \bottomrule \end{tabular} \end{center} \caption{\biblatex\ options which \biber\ uses} \label{tab:bltxopts} \end{table} \noindent command line options $\rightarrow$\\ \hspace*{1em}\verb+biber.conf+ file $\rightarrow$\\ \hspace*{2em}\verb+.bcf+ file$\rightarrow$\\ \hspace*{3em}\biber\ hard-coded defaults\\[2ex] \noindent Users do not need to care directly about the contents or format of the \verb+.bcf+ file as this is generated from the options which they specify via \biblatex. The config file is a place to set commonly used command-line options and also to set options which cannot be set on the command line. The configuration file is by default called \verb+biber.conf+ but this can be changed using the \opt{--configfile|-g} option. Unless \opt{--configfile|-g} is used, the config file is looked for in the following places, in decreasing order of preference:\\[2ex] \noindent \verb+biber.conf+ in the current directory $\rightarrow$\\ \hspace*{1em}\verb+$HOME/.biber.conf+ $\rightarrow$\\ \hspace*{2em}\verb+$XDG_CONFIG_HOME/biber/biber.conf+ $\rightarrow$\\ \hspace*{3em}\verb+$HOME/Library/biber/biber.conf+ (Mac OSX only)\\ \hspace*{3em}\verb+$APPDATA/biber.conf+ (Windows only) $\rightarrow$\\ \hspace*{4em}the output of «\verb+kpsewhich biber.conf+» (if available on the system)\\[2ex] \noindent The config file is XML. Here Below is an example config file which displays the \biber\ defaults: \begin{lstlisting}[language=xml] 0 1 0 base 0 0 UTF-8 and 0 and 0 0 0 0 others 1 UTF-8 upper bbl 2 0 0 base 0 true en_US.utf8 true false 0 0 0 0 0 \end{lstlisting} \noindent In practice, the most commonly used options will be set via \biblatex\ macros in your document and automatically passed to \biber\ via the \verb+.bcf+ file. Certain options apply only to \biber\ and can only be set in the config file, particularly the more complex options. Most options are simple tags. Exceptions are the \opt{nosort}, \opt{noinit} and \opt{collate\_options} options which are slightly more complex and can have sub-options as shown. A much more complex option is the \opt{sourcemap} option which is not set by default and which is described in section \ref{ref:map}. \subsubsection{The \texttt{output\_format} option}\label{ref:of} \biber\ is able to output formats other than \file{.bbl} files for \biblatex\ to consume. It is also able to output other formats such as \file{DOT} for visualisation of entry dependencies (see section \ref{ref:vis}), the experimental \verb+biblatexml+ XML format and also \bibtex\ \file{.bib} files. \file{.bib} output is possible in tool mode, when you are converting an entire datasource file independently of any particular document (see section \ref{ref:tool}). It is also useful when you want, instead of a \file{.bbl}, a new \file{.bib} file containing only the cited entries from a document so that you can, for example, send a minimally complete package for typesetting to someone. To do this, you would, after the first \latex run, call \biber like this: \begin{verbatim} biber --output_format=bibtex test.bcf \end{verbatim} \noindent This would result in a new \file{.bib} file called \file{test\_biber.bib} containing all cited entries in \file{test.tex}, in citation order, formatted according to the various \opt{ouput\_*} options. You could of course also perform more processing like source mapping (see section \ref{ref:map}), reencoding (see section \ref{ref:enc}) etc. using more command line options or a config file. \subsubsection{The \texttt{sourcemap} option}\label{ref:map} The datasource drivers implement a mapping from datasource entrytypes and fields into the \biblatex\ data model. If you want to override or augment the driver mappings you can use the \opt{sourcemap} option which makes it possible to, for example, have a datasource with non-standard entrytypes or fields and to have these automatically mapped into other entrytypes/fields without modifying your datasource. Essentially, this alters the source data stream which \biber\ uses to build the internal \biblatex\ data model and is an automatic way of editing the datasource as it is read by \biber. Source mappings can be defined at different «levels» which are applied in a defined order. See the \biblatex\ manual regarding these macros:\\[2ex] \noindent \texttt{user}-level maps defined with \cmd{DeclareSourcemap}$\rightarrow$\\ \hspace*{1em}\texttt{user}-level maps defined in the \biber\ config file (described below)$\rightarrow$\\ \hspace*{2em}\texttt{style}-level maps defined with \cmd{DeclareStyleSourcemap}$\rightarrow$\\ \hspace*{3em}\texttt{driver}-level maps defined with \cmd{DeclareDriverSourcemap}\\[2ex] The \opt{sourcemap} option can only be set in the config file and not on the command line as it has a complex structure. This option allows you to perform various datasource mapping tasks which can be useful for pre-processing data which you do not generate yourself: \begin{itemize} \item Map datasource entrytypes to different entrytypes. \item Map datasource fields to different fields. \item Add new fields to an entry \item Remove fields from an entry \item Modify the contents of a field using standard Perl regular expression match and replace. \item Restrict any of the above operations to entries coming from particular datasources which you defined in \verb+\addresource{}+ macros. \item Restrict any of the above operations to entries only of a certain entrytype. \end{itemize} \noindent There is in fact, more flexibility than the above suggests, examples will show this below. The format of the \opt{sourcemap} option section in the config file is described below, followed by examples which will make things clearer. Items in \textcolor{red}{red} are not literal, they are descriptive meta-values which are explained in the accompanying text. Items in \textcolor{blue}{blue} are optional within their parent section or element. The general structure is: \lstset{showspaces=false} \lstset{showstringspaces=false} \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] ... $\vdots$ ... $\vdots$ ... $\vdots$ ... \end{lstlisting} \noindent Here, \textcolor{red}{\texttt{driver$_1$}}\ldots \textcolor{red}{\texttt{driver$_n$}} are the names of valid \biber\ data source drivers (see section \ref{dsd}). One thing to note here is the \opt{map\_overwrite} attribute. This boolean attribute determines whether, for this driver mapping section, you may overwrite existing fields when adding new fields or mapping them. This attribute can be overridden on a per-map basis, see below. A warning will be issued either way saying whether an existing field will or will not be overwritten. If omitted, it defaults to «0». The \opt{map} elements are processed in sequence and contain a number of \opt{map\_step}s which are also processed in sequence. Each \opt{map\_step} allows you to do a particular thing or combination of things: \begin{itemize} \item Change the entrytype of an entry \item Change the name of a field \item Add extra fields the entry \item Change the contents of a field \end{itemize} \noindent These facilities are explained in more detail below, with examples. A \opt{map} element looks like this: \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] +\textcolor{blue}{\textcolor{red}{datasource}}+ +\textcolor{blue}{\textcolor{red}{entrytype}}+ \end{lstlisting}%| <- sometimes emacs highlighting needs this \begin{itemize} \item If there are any \textcolor{red}{\texttt{datasource}}s named in \textcolor{blue}{\texttt{per\_datasource}} elements, this mapping only applies to entries coming from the named \textcolor{red}{\texttt{datasource}}s. There can be multiple \textcolor{blue}{\texttt{per\_datasource}} elements each specifying one of the datasource names given in a \biblatex\ \verb+\addbibresource+ macro. \item If there are any \textcolor{red}{\texttt{entrytypes}}s named in \textcolor{blue}{\texttt{per\_type}} elements, this mapping only applies to entries of the named \textcolor{red}{\texttt{entrytypes}}s. \item The \texttt{map\_overwrite} attribute can be used to override the value for this attribute set on the parent \opt{maps} element. If omitted, it defaults to the parent \opt{maps} attribute value. \end{itemize} \noindent Each \opt{map\_step} is looked at in turn and compared with the datasource entry being processed. A \opt{map\_step} works like this: \begin{itemize} \item If \textcolor{blue}{\texttt{map\_entry\_null}} is set, processing of the \opt{map} immediately terminates and the current entry is not created. It is as if it did not exist in the datasource. Obviously, you should select the entries which you want to apply this to using prior mapping steps. \item Change the \textcolor{red}{\texttt{source-entrytype}} to \textcolor{red}{\texttt{target-entrytype}}, if defined. If \textcolor{blue}{\texttt{map\_final}} is set then if the entrytype of the entry is not \textcolor{red}{\texttt{source-entrytype}}, processing of this \opt{map} immediately terminates. \item Change the \textcolor{red}{\texttt{source-field}} to \textcolor{red}{\texttt{target-field}}, if defined. If \textcolor{blue}{\texttt{map\_final}} is set, then if there is no \textcolor{red}{\texttt{source-field}} field in the entry, processing of this \opt{map} immediately terminates. \item If \textcolor{blue}{\texttt{map\_match}} is defined but \textcolor{blue}{\texttt{map\_replace}} is not, only apply the step if the \textcolor{red}{\texttt{source-field}} matches \textcolor{blue}{\texttt{map\_match}}. You can use parentheses as usual to capture parts of the match and can then use these later when setting a \textcolor{blue}{\texttt{map\_field\_value}}. \item \textcolor{blue}{\texttt{map\_notmatch}} is the same as \textcolor{blue}{\texttt{map\_match}} but with the logic reversed. \item Perform a Perl regular expression match and replace on the value of \textcolor{red}{\texttt{source-field}} if \textcolor{blue}{\texttt{map\_match}} and \textcolor{blue}{\texttt{map\_replace}} are defined. You may use (and almost certainly will want to use) parentheses for back-references in \textcolor{blue}{\texttt{map\_replace}}. Do not quote the regular expressions in any special (i.e. non-Perly) way---it's not necessary. \item If \textcolor{blue}{\texttt{map\_field\_set}} is defined, then its value is \textcolor{red}{\texttt{set-field}} which will be set to a value specified by further attributes. If \textcolor{blue}{\texttt{map\_overwrite}} is false for this step and the field to set already exists then the map step is ignored. If \textcolor{blue}{\texttt{map\_final}} is also set on this step, then processing of the parent map stops at this point. If \textcolor{blue}{\texttt{map\_append}} is set, then the value to set is appended to the current value of \textcolor{red}{\texttt{set-field}}. The value to set is specified by a mandatory one and only one of the following attributes: \begin{itemize} \item \textcolor{blue}{\texttt{map\_field\_value}} --- The \textcolor{red}{\texttt{set-field}} is set to \textcolor{red}{\texttt{set-value}} \item \textcolor{blue}{\texttt{map\_null}} --- The field is ignored, as if it did not exist in the datasource \item \textcolor{blue}{\texttt{map\_origentrytype}} --- The \textcolor{red}{\texttt{set-field}} is set to the most recently mentioned \textcolor{red}{\texttt{source-entrytype}} name. \item \textcolor{blue}{\texttt{map\_origfield}} --- The \textcolor{red}{\texttt{set-field}} is set to the most recently mentioned \textcolor{red}{\texttt{source-field}} name \item \textcolor{blue}{\texttt{map\_origfieldval}} --- The \textcolor{red}{\texttt{set-field}} is set to the most recently mentioned \textcolor{red}{\texttt{source-field}} value \end{itemize} \end{itemize} \noindent With \bibtex\ and RIS datasources, you can specify the pseudo-field «entrykey» for \textcolor{red}{\texttt{source-field}} which is the citation key of the entry. Naturally, this «field» cannot be changed (used as \textcolor{red}{\texttt{set-field}}, \textcolor{red}{\texttt{target-field}} or changed using \textcolor{blue}{\texttt{map\_replace}}). Note that for XML datasources (Endnote, Zotero RDF/XML etc.), the names of fields and entrytypes are matched in a case sensitive manner. For all other datasource types (\BibTeX, RIS etc.) entrytype and field name matching is case insensitive. \noindent Here are some examples: \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] example1.bib example2.bib \end{lstlisting} \noindent This would add a \bibfield{KEYWORDS} field with value «\verb+keyw1, keyw2+» and set the \bibfield{NOTE} field to citation key for the entry to all entries which are found in either the \verb+examples1.bib+ or \verb+examples2.bib+ files. This assumes that the \biblatex\ source contains \verb+\addresource{example1.bib}+ and \verb+\addresource{example2.bib}+. \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] \end{lstlisting} \noindent Copy the \bibfield{TITLE} field to the \bibfield{NOTE} field unless the \bibfield{NOTE} field already exists. \begin{lstlisting}[language=xml,escapechar=:,mathescape=true] \end{lstlisting} \noindent For any entry with an \bibfield{AUTHOR} field, try to set \bibfield{SORTNAME} to the same as \bibfield{AUTHOR}. If this fails because \bibfield{SORTNAME} already exists, stop, otherwise truncate \bibfield{SORTNAME} to just the first name in the name list. \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] \end{lstlisting} \noindent Any \bibtype{CHAT} entrytypes would become \bibtype{CUSTOMA} entrytypes and would automatically have a \bibfield{TYPE} field set to «CHAT» unless the \bibfield{TYPE} field already exists in the entry (because \opt{map\_overwrite} is false). This mapping applies only to entries of type \bibtype{CHAT} since the first step has \opt{map\_final} set and so if the \opt{map\_type\_source} does not match the entry, processing of this \opt{map} immediately terminates. \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] examples.bib ARTICLE BOOK \end{lstlisting} \noindent Any entries of entrytype \bibfield{ARTICLE} or \bibfield{BOOK} from the «examples.bib» datasource would have their \bibfield{ABSTRACT} fields removed and a \bibfield{NOTE} field added with value «Auto-created this field». \begin{lstlisting}[language=xml,escapechar=:,mathescape=true] \end{lstlisting} \noindent This removes \bibfield{ABSTRACT} fields from any entry, changes \bibfield{CONDUCTOR} fields to \bibfield{NAMEA} fields and changes \bibfield{GPS} fields to \bibfield{USERA} fields \begin{lstlisting}[language=xml,escapechar=:,mathescape=true] \end{lstlisting} \noindent Applies only to entries with \bibfield{PUBMED} fields and maps \bibfield{PUBMEDID} fields to \bibfield{EPRINT} fields, sets the \bibfield{EPRINTTYPE} field to «PUBMEDID» and also sets the \bibfield{USERD} field to the string «Some string of things». \begin{lstlisting}[language=xml,escapechar=:,mathescape=true] \end{lstlisting} \noindent Here, the contents of the \bibfield{SERIES} field have leading numbers stripped and the remainder of the contents lowercased. \begin{lstlisting}[language=xml,escapechar=:,mathescape=true] \end{lstlisting} \noindent Here, if for an entry, the \bibfield{TITLE} field matches a particular regular expression, we set a special keyword so we can, for example, make a references section just for certain items. \begin{lstlisting}[language=xml,escapechar=:,mathescape=true] \end{lstlisting} \noindent If an entry has a \bibfield{LISTA} field which matches regular expression «regexp», then it is removed. \begin{lstlisting}[language=xml,escapechar=:,mathescape=true] \end{lstlisting} \noindent Here, we use multiple match/replace for the same field to regularise some inconstant name variants. Bear in mind that match/replace processing within a \opt{map} element is sequential and the changes from a previous match/replace are already committed. \begin{lstlisting}[language=xml,escapechar=;,mathescape=true] \end{lstlisting} \noindent Only applies to entries with an \bibfield{AUTHOR} field matching «Doe,». First the \bibfield{AUTHOR} field is copied to both the \bibfield{SHORTAUTHOR} and \bibfield{SORTNAME} fields, overwriting them if they already exist. Then, these two new fields are modified to canonicalise a particular name, which presumably has some variants in the datasource. \begin{lstlisting}[language=xml,escapechar=;,mathescape=true] \end{lstlisting} \noindent Any entry with a \bibfield{TITLE} field matching «A Title» will be completely ignored. \bigskip \minisec{Other datasource types} For datasources other than \BibTeX, (e.g. \verb+ris+, \verb+endnotexml+ and \verb+zoterordfxml+), the source entrytypes and fields are usually very differently modelled and named. For example, here is how to drop \verb+dc:subject+ fields from various entrytypes in Zotero XML RDF format data sources: \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] journalArticle book bookSection \end{lstlisting} \noindent Or here, mapping journal articles into \bibtype{Report} entries for Endnote XML format datasources within a particular datasource. \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] endnote.xml \end{lstlisting} \noindent Or here, dropping the \bibfield{N2} field from \verb+RIS+ datasources, which are commonly used for abstracts: \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] \end{lstlisting} \bigskip \subsubsection{The \texttt{inheritance} option}\label{inheritance} The \opt{inheritance} option defines the inheritance rules for data inheritance between entries using, for example, \bibtex's \bibfield{CROSSREF} field. The default setup for this is defined by \biblatex and is passed in the \file{.bcf} file. Defining inheritance rules in the \biber configuration file is rarely something you would want to do with one notably exceptional case being when using \biber in tool mode where you might want to «materialise» special inheritance rules (see section \ref{ref:tool}). Here we define the format of the config file inheritance section, should you need to understand or modify it. Items in \textcolor{red}{red} are not literal, they are descriptive meta-values which are explained in the accompanying text. Items in \textcolor{blue}{blue} are optional within their parent section or element. \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] $\vdots$ $\vdots$ $\vdots$ $\vdots$ \end{lstlisting} \begin{itemize} \item The \texttt{defaults} section specifies the default inheritance rules which are not otherwise covered by a specific \texttt{inherit} rule. \texttt{inherit\_all} specifies that by default a \textcolor{red}{\texttt{target}} inherits all fields from a \textcolor{red}{\texttt{source}}. \texttt{override\_target} specifies that by default an existing \textcolor{red}{\texttt{target}} field will be overwritten by a \textcolor{red}{\texttt{source}} field it already exists in the \textcolor{red}{\texttt{target}}. A \texttt{type\_pair} element specifies the defaults for a particular \textcolor{red}{\texttt{source}} and \textcolor{red}{\texttt{target}} entrytype combination. \textcolor{red}{\texttt{source}} or \textcolor{red}{\texttt{target}} can take the value «\texttt{*}» which is a wildcard representing all possible entrytypes. \item An \texttt{inherit} element specifies how one or more \textcolor{red}{\texttt{source}} fields are inherited by one more \textcolor{red}{\texttt{source}}/\textcolor{red}{\texttt{target}} pairs which are specified in one or more \texttt{type\_pair} elements within the same \texttt{inherit} element. \textcolor{blue}{\texttt{override\_target}} can be specified on a per-field basis as can the \textcolor{blue}{\texttt{skip}} attribute which indicates that a particular \texttt{field} is not to be inherited by the \textcolor{red}{\texttt{target}}. \end{itemize} % Here is an example: \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] \end{lstlisting} % Here we can see that the default is to inherit all fields from the \textcolor{red}{\texttt{source}} and not to override existing \textcolor{red}{\texttt{target}} fields if they already exist. Then we see that for some combinations of \textcolor{red}{\texttt{source}}s and \textcolor{red}{\texttt{target}}s, the \bibfield{AUTHOR} field is inherited from the \textcolor{red}{\texttt{source}} and also the \bibfield{AUTHOR} field in the \textcolor{red}{\texttt{source}} is inherited as the \bibfield{BOOKAUTHOR} field in the \textcolor{red}{\texttt{target}}. The second \texttt{inherit} element says that \bibfield{INBOOK} and \bibfield{INCOLLECTION} entries never inherit the \bibfield{INTRODUCTION} field from any \textcolor{red}{\texttt{source}}. In general, it is probably best to copy the default \biblatex inheritance rules and modify them to your needs. See section \ref{ref:tool}. \bigskip \subsubsection{The \texttt{noinit} option}\label{noinit} The value of the \opt{noinit} option can only be set in the config file and not on the command line. This is because the values are Perl regular expressions and would need special quoting to set on the command line. This can get a bit tricky on some OSes (like Windows) so it's safer to set them in the config file. \opt{noinit} allows you to ignore parts of a name when generating initials. This is done using Perl regular expressions which specify what to ignore. You can specific multiple regular expressions and they will be removed from the name before it is passed to the initials generating system. For example, this option can be used to ignore diacritic marks and prefices in names which should not be considered when sorting. Given (the default): \begin{lstlisting}[language=xml] \end{lstlisting} \noindent and the \BibTeX\ datasource entry: \begin{verbatim} AUTHOR = {{al-Hasan}, ʿAlī}, \end{verbatim} \noindent the initials for the last name will be «H» and not «a-H». The initial for the first name will be «A» as the diacritic is also ignored. This is tricky in general as you cannot often determine the difference between a name with a prefix and a hyphenated name with only, say, two chars in the first part such as «Ho-Pun». You can adjust this option for your individual cases. By default, only lowercased prefices are looked for so as to avoid breaking things like «Ho-Pun» where you want the initials to be «H.-P.», for example. See the Perl regular expression manual page for details of the regular expression syntax\footnote{\url{http://perldoc.perl.org/perlre.html}}. \bigskip \subsubsection{The \texttt{sorting} option}\label{sorting} The \opt{sorting} option defines the sorting rules for the bibliography lists. \biblatex allows multiple sorting specifications referenced by name as it can print bibliography information as many times as the user wishes with different filtering and sorting. This is normally handled by macros in \biblatex which write the XML sorting specification(s) to the \file{.bcf} file for \biber to read but there may be occasions (usually when using \biber in «tool» mode (see section\ref{ref:tool}) when you need to specify the global sorting specification directly in a \biber config file. This section documents the XML format of the sorting specification. Items in \textcolor{red}{red} are not literal, they are descriptive meta-values which are explained in the accompanying text. Items in \textcolor{blue}{blue} are optional within their parent section or element. See also the \texttt{nosort} option in section \ref{nosort}. \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] +\textcolor{red}{string}+ +\textcolor{blue}{}+ +\textcolor{blue}{\textcolor{red}{field}}+ $\vdots$ +\textcolor{blue}{}+ +\textcolor{red}{field|literal|citeorder}+ $\vdots$ $\vdots$ \end{lstlisting} Sorting in \biber is a sophisticated procedure of building up a sorting object for an entry based on a sorting scheme template, the general form of which is shown above. The sorting routine first traverses every entry in the bibliography list and generates a sorting object based on the sorting scheme. When this is done, it sorts the entries according to the sorting objects it has generated for each entry. A sorting specification is comprised of a number of \texttt{sort} elements. Sorting is essentially a process of comparing whatever information the \textcolor{red}{n}th \texttt{sort} element collected for every entry (otherwise known as «multi-field» sorting). Within a \texttt{sort} element, there can be any number of \texttt{sortitem} elements which describe what information to look for in the entry in order to construct this part of the sorting object; either a field, a literal string or the special «citeorder» pseudo-field. When generating the sorting information for an entry, within each \texttt{sort} element, the first \texttt{sortitem} to return a non-empty value for the bibliography entry is used and the rest of the \texttt{sortitem}s in the \texttt{sort} are skipped. A \texttt{sortitem} essentially looks for a piece of information in the entry and adds this to the sorting object. If it is looking for a \textcolor{red}{\texttt{field}}, then the field must exist in the entry. If it does not, the \texttt{sortitem} is skipped. If the \textcolor{red}{\texttt{field}} does exist, it is added to the sorting object for the entry after being modified by the attributes of the \texttt{sortitem}. Once a \texttt{sortitem} has returned the contents of a \textcolor{red}{\texttt{field}}, you can use the \textcolor{blue}{substring\_side} (default «left» if any other \textcolor{blue}{substring} attributes are set) and \textcolor{blue}{substring\_width} (default «4» if any other \textcolor{blue}{substring} attributes are set) attributes to truncate the contents of the \textcolor{red}{\texttt{field}} by reducing it to a substring taken from the left or right side of the string and of a number of (UTF-8) characters of your choice. You can also pad the \textcolor{red}{\texttt{field}} with repeated arbitrary characters on either side using the \textcolor{blue}{pad\_side} (default «left» if any other \textcolor{blue}{pad} attributes are set), \textcolor{blue}{pad\_width} (default «4» if any other \textcolor{blue}{pad} attributes are set) and \textcolor{blue}{pad\_char} (default «0»---the digit zero if any other \textcolor{blue}{pad} attributes are set) attributes. A \texttt{sortitem} which is neither a known bibliography sorting field nor the special «citeorder» string is treated as a literal string to add to the sorting object. Naturally, such a \texttt{sortitem} always «finds» something to add to the sorting object and so it should never have any other \texttt{sortitem}s after it within the \texttt{sort} section as they will never be considered. The «citeorder» \texttt{sortitem} value has a special meaning. It requests a sort based on the lexical order of the actual citations. For entries cited in \biblatex within the same citation command like: \begin{lstlisting}[style=latex]{} \cite{one,two} \end{lstlisting} % there is a distinction between the lexical order and the semantic order. Here «one» and «two» have the same semantic order but a unique lexical order. The semantic order only matters if you specify further sorting to disambiguate entries with the same semantic order. For example, this is the definition of the \biblatex \opt{none} sorting scheme: \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] mm citeorder \end{lstlisting} % This sorts the bibliography purely lexically by the order of the keys in the citation commands. In the example above, it sorts entry «one» before «two». However, suppose that you consider «one» and «two» to have the same order (semantic order) since they are cited at the same time and want to further sort these by year. Suppose «two» has an earlier \bibfield{YEAR} than «one»: \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] mm citeorder year \end{lstlisting} % This sorts «two» before «one», even though lexically, «one» would sort before «two». This is possible because the semantic order can be disambiguated by the further sorting on year. With the standard \biblatex \opt{none} sorting scheme, the lexical order and semantic order are identical because there is nothing further to disambiguate them. This means that you can use «citeorder» just like any other \texttt{sortitem} value, choosing how to further sort entries cited at the same time (in the same citation command). Both \texttt{sort} and \texttt{sortitem} elements have a mandatory \texttt{order} attribute which should start at «1» and increase for each further element. Order numbers for \texttt{sortitem} elements within a \texttt{sort} element always begin with «1» and don't increase between \texttt{sort} elements. Once a \texttt{sortitem} element has added something to the sorting object (or all \texttt{sortitem} elements within a \texttt{sort} have been processed, regardless of whether anything was added to the sort object for the entry), some attributes are applied to the information added and the next \texttt{sort} element is processed. These attributes on the \texttt{sort} element further determine how any sorting specification added by the \texttt{sortitem} elements will be used in the sorting. If the \texttt{sort} element has the \textcolor{blue}{\texttt{final}} attribute set to «1», then if any \texttt{sortitem} within the \texttt{sort} returned a non-empty string to add to the sorting object, the construction of the sorting object for the entry ceases at this point and no more \texttt{sort} elements are processed. This is used typically to make sure that master sorting keys such as those specified with the \bibfield{SORTKEY} field, if found, are the only thing used to construct the sorting object. The \texttt{sort} element may further specify that the information at \texttt{order} «\textcolor{red}{n}» should be sorted in ascending order or descending order (default «ascending»), whether case should be considered when sorting (default depends on the \biber\ \opt{sortcase} option which defaults to true) and whether uppercase characters should be sorted before lower (default depends on the \biber\ «sortupper» option which defaults to true). Finally, there are two special sorting section elements to consider. The \texttt{presort} element is mandatory and specifies a literal \textcolor{red}{string} to add to the very beginning of all sorting objects for all entries. This is useful when combined with the fact that you may specify an optional \textcolor{blue}{\texttt{type}} attribute which specifies a particular entry type for the presort \textcolor{red}{string} specified. Using this mechanism, you can sort, for example, all \bibfield{ARTICLE} entries before all \bibfield{BOOK} entries and then all other types of entry: \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] aa bb mm $\vdots$ \end{lstlisting} % This makes it easy to divide a bibliography by type of entry. The optional \textcolor{blue}{\texttt{sortexclusion}} element allows you to exclude fields from consideration by \texttt{sortitem} on a per-type basis. For example, if you wanted to ignore the \bibfield{YEAR} field of any \bibfield{REPORT} entry types because they are not reliably populated with data representing a year, you could do: \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] $\vdots$ year $\vdots$ \end{lstlisting} % It is much easier to see how intuitive this all is if you look at a standard sorting scheme definition. Below is the default \biblatex sorting scheme which appears in the \file{.bcf} when you run \biblatex with no \opt{sorting} option. This is fully documented and described in the \biblatex manual along with the \latex macros which generate this XML in the \file{.bcf}: \begin{lstlisting}[language=xml,escapechar=+,mathescape=true] mm presort sortkey sortname author editor translator sorttitle title sortyear year sorttitle title volume 0000 \end{lstlisting} \bigskip \subsubsection{The \texttt{nosort} option}\label{nosort} The value of the \opt{nosort} option can only be set in the config file and not on the command line. This is because the values are Perl regular expressions and would need special quoting to set on the command line. This can get a bit tricky on some OSes (like Windows) so it's safer to set them in the config file. In any case, it's unlikely you would want to set them for particular \biber\ runs; they would more likely be set as your personal default and thus they would naturally be set in the config file anyway. \opt{nosort} allows you to ignore parts of a field for sorting. This is done using Perl regular expressions which specify what to ignore in a field. You can specify as many patterns as you like for a specific field. Also available are some field type aliases so you can, for example, specify patterns for all name fields or all title fields. These field types all begin with the string «\verb+type_+», see Table \ref{tab:nst}. \begin{table} \begin{center} \small \begin{tabular}{ll} \toprule Alias & Fields\\ \midrule type\_name & author\\ & afterword\\ & annotator\\ & bookauthor\\ & commentator\\ & editor\\ & editora\\ & editorb\\ & editorc\\ & foreword\\ & holder\\ & introduction\\ & namea\\ & nameb\\ & namec\\ & shortauthor\\ & shorteditor\\ & translator\\ type\_title & booktitle\\ & eventtitle\\ & issuetitle\\ & journaltitle\\ & maintitle\\ & origtitle\\ & title\\ \bottomrule \end{tabular} \end{center} \caption{\texttt{nosort} option field type aliases} \label{tab:nst} \end{table} For example, this option can be used to ignore some diacritic marks and prefices in names which should not be considered when sorting. Given (the default): \begin{lstlisting}[language=xml] \end{lstlisting} \noindent and the \BibTeX\ datasource entry: \begin{verbatim} AUTHOR = {{al-Hasan}, ʿAlī}, \end{verbatim} \noindent the prefix «al-» and the diacritic «ʿ» will not be considered when sorting. See the Perl regular expression manual page for details of the regular expression syntax\footnote{\url{http://perldoc.perl.org/perlre.html}}. You may specify any number of \opt{option} elements. If a \opt{nosort} option is found for a specific field, it will override any option for a type which also covers that field. Here is another example. Suppose you wanted to ignore «The» at the beginning of a \bibfield{TITLE} field when sorting, you could add this to your \verb+biber.conf+: \begin{lstlisting}[language=xml] \end{lstlisting} \noindent If you wanted to do this for all title fields listed in Table \ref{tab:nst}, then you would do this: \begin{lstlisting}[language=xml] \end{lstlisting} \noindent \textbf{Note:} \opt{nosort} can be specified for most fields but not for things like dates and special fields as that wouldn't make much sense. \bigskip \subsubsection{The \texttt{collate\_options} option} The \opt{collate\_options} option has format similar to \opt{nosort}. See Section \ref{coll} for details about the option, here is an example of a config file setting: \begin{lstlisting}[language=xml] \end{lstlisting} \bigskip \subsection{Unicode} \biber uses NFD UTF-8 internally. All data is converted to NFD UTF-8 when read. If UTF-8 output is requested (to \file{.bbl} for example), the UTF-8 will always be NFC. \bigskip \subsection{Input/Output File Locations} \subsubsection{Control file}\label{loc:cf} The control file is normally passed as the only argument to \biber. It is searched for in the following locations, in decreasing order of priority:\\[2ex] \noindent Absolute filename $\rightarrow$\\ \hspace*{1em}In the \opt{--output\_directory}, if specified$\rightarrow$\\ \hspace*{2em}Relative to current directory$\rightarrow$\\ \hspace*{3em}Using \verb+kpsewhich+, if available \subsubsection{Data sources} Local datasources of type «file» are searched for in the following locations, in decreasing order of priority:\\[2ex] \noindent Absolute filename $\rightarrow$\\ \hspace*{1em}In the \opt{--output\_directory}, if specified$\rightarrow$\\ \hspace*{2em}Relative to current directory$\rightarrow$\\ \hspace*{3em}In the same directory as the control file$\rightarrow$\\ \hspace*{4em}Using \verb+kpsewhich+ for supported formats, if available\\[2ex] \noindent Remote file datasources (beginning with \verb+http://+ or \verb+ftp://+) are retrieved to a temp file and processed as normal. Users do not specify explicitly the bibliography database files; they are passed in the \verb+.bcf+ control file, which is constructed from the \biblatex\ «\verb+\addbibresource{}+» macros. \subsection{Logfile} By default, the logfile for \biber\ will be named \verb+\jobname.blg+, so, if you run \begin{verbatim} biber test.bcf \end{verbatim} \noindent then the logfile will be called «\verb+test.blg+». Like the \verb+.bbl+ output file, it will be created in the \opt{--output\_directory|-c}, if this option is defined. You can override the logfile name by using the \opt{--logfile} option: \begin{verbatim} biber --logfile=lfname test.bcf \end{verbatim} \noindent results in a logfile called «\verb+lfname.blg+».\\ \noindent \textbf{Warning}: be careful if you are expecting \biber\ to write to directories which you don't have appropriate permissions to. This is more commonly an issue on non-Windows OSes. For example, if you rely on \verb+kpsewhich+ to find your database files which are in system \TeX\ directories, you may well not have write permission there so \biber\ will not be able to write the \verb+.bbl+. Use the \opt{--output\_file|-O} option to specify the location to write the \verb+.bbl+ to in such cases. \subsection{Collation and Localisation}\label{coll} \biber\ takes care of collating the bibliography for \biblatex. It writes entries to the \verb+.bbl+ file sorted by a completely customisable set of rules which are passed in the \verb+.bcf+ file by \biblatex. \biber\ has two ways of performing collation:\\[2ex] \biberex{--collate|-C} \noindent The default. This option makes \biber\ use the Perl \verb+Unicode::Collate+ module for collation which implements the full UCA (Unicode Collation Algorithm). It also has CLDR (Common Locale Data Repository) tailoring to deal with cases which are not covered by the UCA. It is a little slower than \opt{--fastsort|-f} but the advantages are such that it's rarely worth using \opt{--fastsort|-f}\\[1ex] \biberex{--fastsort|-f} \noindent \biber\ will sort using the OS locale collation tables. The drawback for this method is that special collation tailoring for various languages are not implemented in the collation tables for many OSes. For example, few OSes correctly sort 'å' before 'ä' in the Swedish (\verb+sv_SE+) locale. If you are using a common latin alphabet, then this is probably not a problem for you.\\[2ex] \noindent The locale used for collation is determined by the following resource chain which is given in decreasing precedence order:\\[2ex] \noindent\opt{--collate\_options|-c} (e.g. \opt{-c 'locale => "de\_DE"'}) $\rightarrow$\\ \hspace*{1em}\opt{--sortlocale|-l} $\rightarrow$\\ \hspace*{2em}\verb+LC_COLLATE+ environment variable $\rightarrow$\\ \hspace*{3em}\verb+LANG+ environment variable $\rightarrow$\\ \hspace*{4em}\verb+LC_ALL+ environment variable\\[2ex] \noindent With the default \opt{--collate|-C} option, the locale will be used to look for a collation tailoring for that locale. It will generate an informational warning if it finds none. This is not a problem as the vast majority of collation cases are covered by the standard UCA and many locales neither have nor need any special collation tailoring. With the \opt{--fastsort|-f} option, the locale will be used to locate an OS locale definition to use for the collation. This may or may not be correctly tailored, depending on the locale and the OS. Collation is by default case sensitive. You can turn this off globally using the \biber\ option \opt{--sortcase=false} or from \biblatex\ using its option\linebreak[4]\opt{sortcase=false}. The option can also be defined per-field so you can sort some fields case sensitively and others case insensitively. See the \biblatex\ manual. \opt{--collate|-C} by default collates uppercase before lower. You can reverse this globally for all sorting using the \biber\ option \opt{--sortupper=false} or from\linebreak[4]\biblatex\ by using its option \opt{sortupper=false}. The option can also be defined per-field so you can sort some fields uppercase before lower and others lower before upper. See the \biblatex\ manual. Be aware though that some locales rightly enforce a particular setting for this (for example, Danish). You will be able to override it but \biber\ will warn you if you do. \opt{sortupper} has no effect when using \opt{--fastsort|-f}--you are at the mercy of what your OS locale does. There are in fact many options to \verb+Unicode::Collate+ which can tailor the collation in various ways in addition to the locale tailoring which is automatically performed. Users should see the the documentation to the module for the various options, most of which the vast majority of users will never need\footnote{For details on the various options, see \url{http://search.cpan.org/search?query=Unicode\%3A\%3ACollate&mode=all}}. Options are passed using the \opt{--collate\_options|-c} option as a single quoted string, each option separated by comma, each key and value separated by «\verb+=>+». See examples. \textbf{Note:} \biber\ sets the Unicode collation tailoring «variable» to «non-ignorable». Effectively, this means that punctuation is not ignored when sorting. The default setting is to ignore such «variable weight» elements. Sorting bibliographies is slightly more specialised than collating general text and punctuation often matters. In case you want the UCA default behaviour, see examples. \subsubsection{Examples} \biberex{biber} \noindent Call \biber\ using all settings from the \verb+.bcf+ generated from the \latex\ run. Case sensitive UCA sorting is performed taking the locale for tailoring from the environment if no \opt{sortlocale} is defined in the \verb+.bcf+ \biberex{biber --sortlocale=de_DE} \noindent Override any locale setting in the \verb+.bcf+ or the environment. \biberex{biber --fastsort} \noindent Use slightly quicker internal sorting routine. This uses the OS locale files which may or may not be accurate. \biberex{biber --sortcase=false} \noindent Case insensitive sorting. \biberex{biber --sortupper=false --collate_options="backwards => 2"} \noindent Collate lowercase before upper and collate French accents in reverse order at UCA level 2. \biberex{biber --collate_options="variable => 'shifted'"} \noindent Use the UCA default setting for variable weight punctuation (which is to ignore it for sorting, effectively). \subsection{Encoding of files}\label{ref:enc} \biber\ takes care of re-encoding the datasource data as necessary. In normal use, \biblatex\ passes its \opt{input\_encoding} option value to \biber\ via the \verb+.bcf+ file. It also passes the value of its \opt{texencoding} option (which maps to \biber's \opt{--output\_encoding|-E} option) the default value of which depends on which \TeX\ engine and encoding packages you are using (see \biblatex\ manual for details). \noindent \biber\ performs the following tasks: \begin{enumerate} \item Decodes the datasource into UTF-8 if it is not UTF-8 already \item Decodes \latex\ character macros into UTF-8 if \opt{--output\_encoding|-E} is UTF-8 \item Encodes the output so that the \verb+.bbl+ is in the encoding that \opt{--output\_encoding|-E} specifies \item Warns if it is asked to output to the \verb+.bbl+ any UTF-8 decoded \latex\ character macros which are not in the \opt{--output\_encoding|-E} encoding. Replaces with a suitable \latex\ macro \end{enumerate} \noindent Normally, you do not need to set the encoding options on the \biber\ command line as they are passed in the \verb+.bcf+ via the information in your \biblatex\ environment. However, you can override the \verb+.bcf+ settings with the command line. The resource chain for encoding settings is, in decreasing order of preference:\\[2ex] \noindent\opt{--input\_encoding|-e} and \opt{--output\_encoding|-E} $\rightarrow$\\ \hspace*{1em}\biber\ config file $\rightarrow$\\ \hspace*{2em}\verb+.bcf+ control file \subsubsection{\latex\ macro decoding}\label{ldecode} \noindent As mentioned above, \biber\ sometimes converts \latex\ character macros into UTF-8. In fact there are two situations in which this occurs. \begin{enumerate} \item When \opt{--output\_encoding|-E} is UTF-8 \item Always for internal sorting purposes \end{enumerate} \noindent This decoding is very useful but take note of the following two scenarios, which relate to each of the two situations in which \latex\ macro decoding occurs: \bigskip \minisec{Decoding when output is UTF-8} If you are using PDF\latex\ and \verb+\usepackage[utf8]{inputenc}+, it is possible that the UTF-8 characters resulting from \biber's internal \latex\ character macro decoding break \verb+inputenc+. This is because \verb+inputenc+ does not implement all of UTF-8, only a commonly used subset. An example--if you had \verb+\DJ+ in your \verb+.bib+ datasource, \biber\ decodes this correctly to «Đ» and this breaks \verb+inputenc+ because it doesn't understand that UTF-8 character. The real solution here is to switch to a \TeX\ engine with full UTF-8 support like \XeTeX\ or Lua\TeX\ as these don't use or need \verb+inputenc+. However, you can also try the \opt{--output\_safechars} option which will try to convert any UTF-8 chars into \latex\ macros on output. For information on the \opt{--output\_safechars} option, see section \ref{lencode}. \bigskip \minisec{Decoding for internal sorting} If your \opt{output\_encoding} is not UTF-8, and you are using some UTF-8 equivalent \latex\ character macros in your \verb+.bib+ datasource, then some \verb+.bbl+ fields (currently only \verb+\sortinit{}+) might end up with invalid characters in them, according to the \verb+.bbl+ encoding. This is because some fields must be generated from the final sorting data which is only available after the \latex\ character macro decoding step. For example, suppose you are using PDF\latex\ with\\ \verb+\usepackage[latin1]{inputenc}+ and the following \BibTeX\ datasource entry: \begin{verbatim} @BOOK{citekey1, AUTHOR = {{\v S}imple, Simon}, } \end{verbatim} \noindent With normal \latex\ character macro decoding, the \verb+{\v S}+ is decoded into «Š» and so with name-first sorting, \verb+\sortinit{}+ would be «Š». This is an invalid character in latin1 encoding and so the \verb+.bbl+ would be broken. In such cases when \verb+\sortinit{}+ is a char not valid in the \opt{output\_encoding}, \biber\ tries to replace the character with a suitable \latex\ macro. The solution is really to use UTF-8 \verb+.bbl+ encoding whenever possible. In extreme cases where even with UTF-8 encoding, the char is not recognised by \latex\ due to an incomplete UTF-8 implementation (as with \verb+inputenc+), this might also mean switching \TeX\ engines to one that supports full UTF-8 (like Xe\TeX\ or Lua\TeX). \subsubsection{\latex\ macro encoding}\label{lencode} The opposite of decoding; converting UTF-8 characters into \latex\ macros. You can force this with the \opt{--output\_safechars} option which will do a generally good job of making your \verb+.bbl+ plain ASCII. It can be useful in certain edge cases where your bibliography introduces characters which can't be handled by your main document. See section \ref{ldecode} above for an example such case. A common use case for \latex\ macro encoding is when the bibliography datasource is not ASCII but the \verb+.tex+ file is and so this case is automated for you: if the \biblatex\ option «\opt{texencoding}» (which corresponds to the \biber\ option «\opt{--output\_encoding|-E}») is set to an ASCII encoding («\verb+ascii+» or «\verb+x-ascii+») and «\opt{--input\_encoding|-e}» is not ASCII, \biber\ will automatically set \opt{--output\_safechars}. See also the \opt{biber --help} output for the \opt{--output\_safecharsset} and \linebreak[4]\opt{--decodecharsset} options which can customise the set of conversion rules to use. The builtin sets of characters and macros which \biber\ maps during encoding and decoding are documented\footnote{\url{https://sourceforge.net/projects/biblatex-biber/files/biblatex-biber/\biberversion/documentation/utf8-macro-map.html}}. It is possible to provide a customised encode/decode mapping file using the \opt{--recodedata} option. It must adhere to the format of the default data file for reencoding which is \file{recode\_data.xml} located in the same Perl install directory as \biber's \file{Recode.pm} module. Of course it is easier to find this in the \biber\ source tree. It is most likely that if you want to use a custom mapping file, you would copy the default file and edit it, removing some things and perhaps defining some custom recoding sets for use with \opt{--output\_safecharsset} and \opt{--decodecharsset}. Be careful to classify the entries using the correct «type» attribute in the XML file as this determines how the macro is treated by the code that does the replacement. Just copy a similar type of macro from the default recoding data file if you are adding new entries, which is unlikely as the file is quite comprehensive. There is only one other thing to note. The «preferred» attribute tells \biber\ to use a specific \latex\ macro when mapping from UTF-8, just in case there are more than one mappings from UTF-8 for a particular character. It's unlikely you will need to use this. \bigskip \subsubsection{Examples} \biberex{biber} \noindent Set \opt{input\_encoding} and \opt{output\_encoding} from the config file or \verb+.bcf+ \biberex{biber --output_encoding=latin2} \noindent Encode the \verb+.bbl+ as latin2, overriding the \verb+.bcf+ \biberex{biber --output_safechars} \noindent Set \opt{input\_encoding} and \opt{output\_encoding} from the config file or \verb+.bcf+. Force encoding of UTF-8 chars to \latex\ macros using default conversion set \biberex{biber --output_encoding=ascii} \noindent Encode the \verb+.bbl+ as ascii, overriding the \verb+.bcf+. Automatically sets \opt{--output\_safechars} to force UTF-8 to \latex\ macro conversion \biberex{biber --output_encoding=ascii --output_safecharsset=full} \noindent Encode the \verb+.bbl+ as ascii, overriding the \verb+.bcf+. Automatically sets \opt{--output\_safechars} to force UTF-8 to \latex\ macro conversion using the full set of conversions \biberex{biber --decodecharsset=full} \noindent Set \opt{input\_encoding} and \opt{output\_encoding} from the config file or \verb+.bcf+. Use the full \latex\ macro to UTF-8 conversion set because you have some more obscure character macros in your \verb+.bib+ datasource which you want to sort correctly \biberex{biber --recodedata=/tmp/recode.xml --decodecharsset=special} \noindent Specify a user-defined reencoding data file which defines a new reencoding set «special» and use this set for decoding \latex\ macros to UTF-8. \biberex{biber -u} \noindent Shortcut alias for \opt{biber --input\_encoding=UTF-8} \biberex{biber -U} \noindent Shortcut alias for \opt{biber --output\_encoding=UTF-8} \subsection{List and Name Separators} With traditional \bibtex, the name and list field separator «and» is hard-coded. The \texttt{btparse} C library and therefore \biber\ allows the use of any fixed string, subject to the same rules as «and» (not at the beginning or end of the name/list, whitespace must surround the string etc.). This is settable using the options \opt{listsep} and \opt{namesep}, both of which default to the usual «and». You can also change the default final name in a list which implies «et al». In \bibtex, this is by default the English «others» which is the \biber\ default also. Don't try to put any whitespace in these strings, this is ignored by \texttt{btparse} anyway. Perhaps you prefer your \file{.bib} in more obvious German---set \opt{--namesep=und} and \opt{--others\_string=andere} and then you can do: \begin{verbatim} @BOOK{key, AUTHOR = {Hans Harman und Barbara Blaupunkt und andere}, } \end{verbatim} \noindent Bear in mind that these are global settings and apply to all entries in the \bibtex\ data format read by \biber. Also bear in mind that this is very unportable as all \bibtex\ input/output programs rely on the hard-coded «and» and «others». Hopefully this will change as these two hard-coded English terms look really rather bad in the context of multilingual bibliographies. \bigskip \subsection{Editor Integration} Here is some information on how to integrate \biber\ into some of the more common editors \subsubsection{Emacs} Emacs has the powerful AUC\TeX\ mode for editing \TeX\ and running compilations. \biber\ is supported as of version 11.87 which has the following features relevant to \biblatex/\biber: \begin{itemize} \item Adds font-lock support for most \biblatex\ macros \item Auto-detects whether you are using \biber\ with \biblatex\ \item Can detect whether dependencies like datasources have changed without them being open in Emacs \item Understands \biblatex\ and \biber\ messages so that AUC\TeX\ will prompt you with the best default command to run next when using \verb+C-cC-c+ \end{itemize} \subsubsection{\TeX works} It's very easy to add \biber\ support to \TeX works. In the Preferences, select the Typesetting tab and then add a new Processing Tool as in Figure \ref{fig:biber-texworks}. \begin{figure}[!htpb] \centering \includegraphics[width=4in,keepaspectratio=true]{biber-texworks.png} \caption{Screenshot of \TeX works processing tool setup for \biber} \label{fig:biber-texworks} \end{figure} \subsection{\BibTeX\ macros and the \texttt{MONTH} field} \BibTeX\ defines macros for month abbreviations like «\verb+jan+», «\verb+feb+» etc. \biber\ also does this, defining them as numbers since that is what \biblatex\ wants. In case you are also defining these yourself (although if you are only using \biblatex, there isn't much point), you will get macro redefinition warnings from the \verb+btparse+ library. You can turn off \biber's macro definitions to avoid this by using the option \opt{--nostdmacros}. \biber\ will look at any \bibfield{MONTH} field in a \BibTeX\ data source and if it's not a number as \biblatex\ expects (because it wasn't one of the macros as mentioned above or these macros were disabled by \opt{--nostdmacros}), it will try to turn it into the right number in the \verb+.bbl+. If you only use \biblatex\ with your \BibTeX\ datasource files, you should probably make any \bibfield{MONTH} fields be the numbers which \biblatex\ expects. \subsection{\biber\ datasource drivers}\label{dsd} \biber\ uses a modular datasource driver model to provide access to supported datasources. The drivers are responsible for mapping driver entrytypes and fields to the \biblatex\ data model according to a data model specification in the \biblatex\ file \file{blx-dm.def}. The data model can be changed using \biblatex\ macros in case you would like to, for example, use your own entrytype or field names or perhaps have \biber\ do some validation on your datasources (see the \biblatex\ manual). Data model mapping is an imprecise art and the drivers are the necessarily the most messy parts of \biber. Most datasource models are not designed with typesetting in mind and are usually not fine-grained enough to provide the sorts of information that \biblatex\ needs. \biber\ does its best to obtain as much meaningful information from a datasource as possible. Currently supported datasources drivers are: \begin{itemize} \item \BibTeX\ --- \BibTeX\ data files \item \verb+endnotexml+ --- Endnote XML export format, version $\geq$ Endnote X1 \item \verb+ris+ --- Research Information Systems format \item \verb+zoterordfxml+ --- Zotero RDF XML format, version 2.0.9 \end{itemize} \subsection{Visualising the Output}\label{ref:vis} The option \opt{--output\_format=dot} will cause \biber\ to write a GraphViz\footnote{\url{http://www.graphviz.org}} \verb+.dot+ file instead of a \verb+.bbl+. This file graphs the bibliographic data as it exists after all processing. You can transform this file using the \verb+dot+ program from GraphViz to generate a high quality graphical representation of the data in a format of your choice. A good output format choice with \verb+dot+ is SVG\footnote{Scalable Vector Graphics} which can be viewed in any modern web browser. This format has the advantage of tooltips and \biber\ uses these to give you more information on connections between entries: hover the cursor on an arrow in the output and it will tell you what it means. To output in SVG, use this command after installing GraphViz: \begin{verbatim} dot -Tsvg .dot -o .svg \end{verbatim} \noindent The \opt{--dot\_include} option takes a comma delimited string as argument. The elements of this string define the information to include in the \verb+.dot+ output graph. The valid sub-options are shown in Table \ref{tab:graphopts}. If the \opt{--dot\_include} option is not given then the default setting is implicitly used, which is: \begin{verbatim} --dot_include=crossref,section,xdata,xref \end{verbatim} \begin{table} \begin{center} \small \begin{tabular}{ll} \toprule Sub-option & Description\\ \midrule crossref & Show crossreference relationships\\ field & Show fields within entries\\ related & Show related entries and clones\\ section & Show sections\\ xdata & Show XDATA relationships\\ xref & Show XREF relationships\\ \bottomrule \end{tabular} \end{center} \caption{Valid sub-options for the \texttt{dot\_include} option} \label{tab:graphopts} \end{table} \begin{figure}[!htpb] \centering\small \begin{tikzpicture} \node[rectangle, black, draw=black, fill=centry, align=center] (centry) { ()\\\\Cited entry}; \node[rectangle, black, draw=black, fill=ncentry, align=center] (ncentry) [right of=centry, node distance=11em] { ()\\\\Uncited entry}; \node[rectangle, black, draw=black, fill=doentry, align=center] (doentry) [right of=ncentry, node distance=11em] { ()\\\\dataonly entry}; \node[rectangle, black, draw=black, fill=section, align=center] (section) [below of=centry, node distance=5em] {Section \\\\Section}; \node[rectangle, black, draw=black, fill=set, align=center] (set) [right of=section, node distance=11em] { (SET)\\\\Entry set}; % CROSSREF \node[black] (cr1) [below of=section, node distance=6em] {A}; \node[black] (cr2) [right of=cr1, node distance=20em] {B}; \path (cr1) edge [->, color=crossref, very thick] node[auto, black] {B inherits by CROSSREF from A} (cr2); % XREF \node[black] (xr1) [below of=cr1, node distance=5em] {A}; \node[black] (xr2) [right of=xr1, node distance=20em] {B}; \path (xr1) edge [->, color=xref, style=dashed, very thick] node[auto, black] {B inherits by XREF from A} (xr2); % XDATA \node[black] (xd1) [below of=xr1, node distance=5em] {A}; \node[black] (xd2) [right of=xd1, node distance=20em] {B}; \path (xd1) edge [->, color=xdata, very thick] node[auto, black] {B inherits by XDATA from A} (xd2); % RELATED \node[black] (re1) [below of=xd1, node distance=5em] {A}; \node[black] (re2) [right of=re1, node distance=20em] {B}; \path (re1) edge [->, color=related, very thick] node[auto, black] {A is a related entry of B} (re2); % CLONE \node[black] (c1) [below of=re1, node distance=5em] {A}; \node[black] (c2) [right of=c1, node distance=20em] {B}; \path (c1) edge [->, color=clone, style=dashed, very thick] node[auto, black] {B is a clone of A} (c2); \end{tikzpicture} \caption{Key to \texttt{.dot} output format} \label{fig:graphkey} \end{figure} \bigskip \subsection{Tool Mode}\label{ref:tool} \biber\ can run in «tool» mode which is enabled with the \opt{--tool} command-line only option. In this mode, \biber is called: \opt{biber --tool }. Tool mode is a datasource rather than document oriented mode intended for transformations and modifications of datasources. It does not read a \file{.bcf} but instead, it reads all entries from the file «datasource», applies any changes specified in the command-line options and \biber\ config file and writes the resulting datasource out to a new file, defaulting to a \bibtex file called «\file{\_bibertool.bib}» if the options \opt{output\_file} and \opt{output\_format} are not specified. Tool mode is useful if you need to programatically change your datasource using the semantics provided by \biber or if you would like to convert your data to a different format. For example, you could choose to reencode your datasource by turning all UTF-8 characters into \latex\ macros: \begin{verbatim} biber --tool --output_encoding=ascii file.bib \end{verbatim} \noindent This would output a copy of \file{file.bib} called \file{file\_bibertool.bib} with all UTF-8 chars changed to \latex macros (because when the output is ASCII and the input encoding is not (it is by default UTF-8), then the \opt{--output\_safechars} option is automatically enabled). If you utilise the \biber\ config file, you can set up a complex set of mappings to transform your datasource however you wish in a semantic manner much more robust than just textual search/replace. You can also use the \opt{--output\_resolve} option which will process any \bibfield{XDATA} fields/entries, entry aliases and inheritance rules mentioned in the config file (see below). Sometimes, you might wish to output fields which are \bibtex macros, that is, you might want this: \begin{lstlisting}[style=bibtex, columns=fixed]{} @Entrytype{key, Field = something, } \end{lstlisting} % instead of this: \begin{lstlisting}[style=bibtex, columns=fixed]{} @Entrytype{key, Field = {something}, } \end{lstlisting} % That is, you might not want the output field in braces or quotes as this prevents \bibtex interpreting the field value as a macro. Use the \opt{--output\_macro\_fields} option to specify a comma-separated list of fields whose values you wish to output without any \bibtex quoting. You can have spaces between the items in the field list but then you must enclose the whole option value in quotes. For example, these two will do the same thing: \begin{verbatim} biber --tool --output_macro_fields=month,publisher biber --tool --output_macro_fields='month, publisher' \end{verbatim} Tool mode also allows some reformatting of the \file{.bib} file. The option \opt{--tool\_fieldcase} can be used to force the entrytype and fieldnames to upper, lower or title case. The option \opt{--tool\_indent} can be used to customise the indentation of fields. The option \opt{tool\_align} can be used to align all field values neatly. See the \biber\ \opt{--help} output for documentation and defaults. For example, the command: \begin{verbatim} biber --tool --output_fieldcase=title --output_indent=4 \ --output_align=true file.bib \end{verbatim} % results in \file{.bib} entries which look like this: \begin{lstlisting}[style=bibtex, columns=fixed]{} @Entrytype{key, Author = {...}, Title = {...}, Publisher = {...}, Year = {...}, } \end{lstlisting} % another example: \begin{verbatim} biber --tool --output_fieldcase=upper --output_indent=2 \ --output_align=false file.bib \end{verbatim} % results in entries like this: \begin{lstlisting}[style=bibtex]{} @ENTRYTYPE{key, AUTHOR = {...}, TITLE = {...}, PUBLISHER = {...}, YEAR = {...}, } \end{lstlisting} % Here is an example using the \biber config file to specify all options. This example uses tool mode to reformat the \file{.bib} and also to do some transformations using the source map functionality. Suppose \file{test.bib} contains the following: \begin{lstlisting}[style=bibtex]{} @book{book1, author = {Doe,J.P.}, title = {Ökologische Enterprises}, year = {2013} } \end{lstlisting} % Further suppose that the \file{biber-test.conf} contains the following: \begin{lstlisting}[language=xml,escapechar=;,mathescape=true] title ascii 1 \end{lstlisting} % Now you can run \biber like this: \begin{verbatim} biber --tool --configfile=biber-tool.conf test.bib \end{verbatim} % The result will be in \file{test\_bibertool.bib} and will look like this: \begin{lstlisting}[style=bibtex, columns=fixed]{} @Book{book1, Author = {Doe, John Paul}, Title = {\"{O}kologische Enterprises}, Year = {2013}, } \end{lstlisting} % Tool mode is a versatile way of performing many different operations on a \file{.bib} file. By using the config file and tool mode, we have: \begin{itemize} \item Consistently indented and aligned the entry, normalising fields and entrytype to title case \item Normalised the \bibfield{AUTHOR} field name using regular expressions \item Converted UTF-8 characters to \latex macros, and made the output pure ASCII \end{itemize} If you do not specify any configuration file to use in tool mode, \biber will by default look for a config file in the usual way (see section \ref{conffile}) with the only difference that if no config file is found, it will use the default \file{biber-tool.conf} which is located in the \biber install tree in the same location as the \file{Config.pm} file. This default config file contains the default \biblatex source mappings for \bibtex datasources and also the default inheritance rules for \bibfield{CROSSREF} processing. This means that when you use the \opt{--tool\_resolve} option, inheritance processing is performed on the entries and the results of this are «materialised» in the output. For example, consider a \file{test.bib} file: \begin{lstlisting}[style=bibtex, columns=fixed]{} @BOOK{xd1, AUTHOR = {Edward Ellington}, DATE = {2007}, XDATA = {macmillanalias} } @XDATA{macmillan, IDS = {macmillanalias}, XDATA = {macmillan:pubALIAS, macmillan:loc} } @XDATA{macmillan:pub, IDS = {macmillan:pubALIAS}, PUBLISHER = {Macmillan} } @XDATA{macmillan:loc, LOCATION = {New York and London}, NOTE = {A Note} } @BOOK{b1, TITLE = {Booktitle}, CROSSREF = {mvalias} } @MVBOOK{mv1, IDS = {mvalias}, TITLE = {Maintitle}, SUBTITLE = {Mainsubtitle}, TITLEADDON = {Maintitleaddon} } \end{lstlisting} % Running \biber as: \begin{verbatim} biber --tool --output_resolve test.bib \end{verbatim} % The result of this would be a file \file{test\_bibertool.bib} with contents: \begin{lstlisting}[style=bibtex, columns=fixed]{} @BOOK{xd1, AUTHOR = {Edward Ellington}, DATE = {2007}, LOCATION = {New York and London}, NOTE = {A Note}, PUBLISHER = {Macmillan}, } @XDATA{macmillan, LOCATION = {New York and London}, NOTE = {A Note}, PUBLISHER = {Macmillan}, } @XDATA{macmillan:pub, PUBLISHER = {Macmillan}, } @XDATA{macmillan:loc, LOCATION = {New York and London}, NOTE = {A Note}, } @BOOK{b1, MAINSUBTITLE = {Mainsubtitle}, MAINTITLE = {Maintitle}, MAINTITLEADDON = {Maintitleaddon}, TITLE = {Booktitle}, } @MVBOOK{mv1, SUBTITLE = {Mainsubtitle}, TITLE = {Maintitle}, TITLEADDON = {Maintitleaddon}, } \end{lstlisting} % Notice here that: \begin{itemize} \item \bibfield{XDATA} references have been resolved completely for entry \texttt{xd1} \item \bibfield{CROSSREF} inheritance has been resolved according to the default \biblatex inheritance rules for entry \texttt{b1} \item Entry key aliases have been resolved as required in order to perform these tasks \end{itemize} Tool mode can also be used to convert between datasource formats\footnote{This is currently rather experimental}. For example, if you wish to covert a \bibtex format data file to the experimental \texttt{biblatexml} XML format, you can do: \begin{verbatim} biber --tool --output_format=biblatexml file.bib \end{verbatim} \noindent This will output a file \file{file\_bibertool.bltxml} by default. The applicability of the various output options depends on the output format as shown in table \ref{tab:outopts} where dash means that the options has no relevance for the output format. \begin{table} \begin{center} \small \begin{tabular}{lllll} \toprule & \multicolumn{4}{c}{\emph{Output format}}\\ \emph{Option} & bibtex & biblatexml & bbl & dot\\ \midrule output\_align & \checkmark & - & - & -\\ output\_indent & \checkmark & \checkmark & - & -\\ output\_fieldcase & \checkmark & - & - & -\\ output\_macro\_fields & \checkmark & - & - & -\\ output\_resolve & \checkmark & \checkmark & - & -\\ \bottomrule \end{tabular} \end{center} \caption{Applicability of the output options} \label{tab:outopts} \end{table} \bigskip \subsubsection{Customising Tool Mode Inheritance Resolution} The default \file{biber-tool.conf} contains, as mentioned above, the default \biblatex \bibfield{CROSSREF} inheritance setup and \bibtex source mappings so that tool mode resolution works as expected. Of course it is possible to customise these. In \biblatex, this is accomplished by the \cmd{DeclareDataInheritance} macros which write appropriate XML into the \file{.bcf} file. Since no \file{.bcf} file is used in tool mode, the desired configuration must be put into a \biber config file. The source mapping XML specification is given in section \ref{ref:map}. The inheritance XML specification is given in section \ref{inheritance}. It is recommended to copy the default \file{biber-tool.conf} file, modify this and then use it as your own \file{biber.conf} file or pass it explicitly using the \opt{--configfile|-g} option. You can determine the location of the default tool mode config file by using the \opt{--tool\_config} option which will show you the location of the config file and exit. \subsubsection{Customising Tool Mode Sorting} A global sorting scheme can be defined in the config file in order to sort the entries in tool mode output. See section \ref{sorting} for the format of the config file sorting specification. By default, if sorting is enabled in tool mode, the sorting scheme is the same as the \biblatex \texttt{none} scheme, that is, no sorting is performed. \bigskip%|<- stop confusing emacs highlighting \section{Binaries}\label{binaries} \biber\ is a Perl application which relies heavily on quite a few modules. It is packaged as a stand-alone binary using the excellent \verb+PAR::Packer+ module which can pack an entire Perl tree plus dependencies into one file which acts as a stand-alone binary and is indistinguishable from such to the end user. You can also simply download the Perl source and run it as a normal Perl program which requires you to have a working Perl 5.16+ installation and the ability to install the pre-requisite modules. You would typically only do this if you wanted to keep up with all the bleeding-edge git commits before they had been packaged as a binary. Almost all users will not want to do this and should use the binaries from their \TeX\ distribution or downloaded directly from SourceForge in case they need to use a more recent binary than is included in their \TeX\ distribution. The binary distributions of \biber\ are made using the Perl \verb+PAR::Packer+ module. They can be used as a normal binary but have some behaviour which is worth noting: \begin{itemize} \item Don't be worried by the size of the binaries. \verb+PAR::Packer+ essentially constructs a self-extracting archive which unpacks the needed files first. \item On the first run of a new version (that is, with a specific hash), they actually unpack themselves to a temporary location which varies by operating system. This unpacking can take a little while and only happens on the first run of a new version. \textbf{Please don't kill the process if it seems to take some time to do anything on the first run of a new binary}. If you do, it will not unpack everything and it will almost certainly break \biber. You will then have to delete your binary cache (see section \ref{bc} below) and re-run the \biber\ executable again for the first time to allow it to unpack properly. \end{itemize} \subsection{Binary Caches}\label{bc} \verb+PAR::Packer+ works by unpacking the required files to a cache location. It only does this on the first run of a binary by computing a hash of the binary and comparing it with the cache directory name which contains the hash. So, if you run several versions of a binary, you will end up with several cached trees which are never used. This is particularly true if you are regularly testing new versions of the \biber\ binary. It is a good idea to delete the caches for older binaries as they are not needed and can take up a fair bit of space. The caches are located in a temporary location which varies from OS to OS. The cache name is:\\[1ex] \noindent\verb+par-/cache-+ (Linux/Unix/OSX)\\ \verb+par-\cache-+ (Windows)\\[1ex] \noindent The temp location is not always obvious but these are sensible places to look (where \verb+*+ can vary depending on username): \begin{itemize} \item \verb+/var/folders/*/*/*/+ (OSX, local GUI login shell) \item \verb+/var/tmp/+ (OSX (remote ssh login shell), Unix) \item \verb+/tmp/+ (Linux) \item \verb+C:\Documents and Settings\\Local Settings\Temp+ (Windows/Cygwin) \item \verb+C:\Windows\Temp+ (Windows) \end{itemize} \noindent To clean up, you can just remove the whole \verb+par-+ directory/folder and then run the current binary again. You can see the active cache by running biber with the \texttt{--cache} option which will print the current cache location and exit. \subsection{Binary Architectures} Binaries are available for many architectures, directly on SourceForge and also via \TeX Live: \begin{itemize} \item \verb+linux_x86_32+ \item \verb+linux_x86_64+ \item \verb+MSWin32+ \item \verb+cygwin32+ \item \verb+darwin_x86_64+ \item \verb+darwin_x86_i386+ \item \verb+freebsd_x86+\tpb \item \verb+freebsd_amd64+\tpb \item \verb+solaris_x86+\tpb \end{itemize} \noindent If you want to run development versions, they are usually only regularly updated for the core architectures which are not flagged as third-party built above. If you want to regularly run the latest development version, you should probably git clone the relevant branch and run \biber\ as a pure Perl program directly. \subsection{Installing} These instructions only apply to manually downloaded binaries. If \biber\ came with your \TeX\ distribution just use it as normal. Download the binary appropriate to you OS/arch\footnote{\url{https://sourceforge.net/projects/biblatex-biber}}. Below I assume it's on your desktop. You have to move the binary to somewhere in you command-line or \TeX\ utility path so that it can be found. If you know how to do this, just ignore the rest of this section which contains some instructions for users who are not sure about this. \subsubsection{OSX} If you are using the \TeX Live Mac\TeX\ distribution: \begin{verbatim} sudo mv ~/Desktop/biber /usr/texbin/ sudo chmod +x /usr/texbin/biber \end{verbatim} \noindent If you are using the MacPorts \TeX Live distribution: \begin{verbatim} sudo mv ~/Desktop/biber /opt/local/bin/ sudo chmod +x /opt/local/bin/biber \end{verbatim} \noindent The «\verb+sudo+» commands will prompt you for your password. \subsubsection{Windows} The easiest way is to just move the executable into your \verb+C:\Windows+ directory since that is always in your path. A more elegant is to put it somewhere in your \TeX\ distribution that is already in your path. For example if you are using MiK\TeX: \begin{verbatim} C:\Program Files\MiKTeX 2.9\miktex\bin\ \end{verbatim} \subsubsection{Unix/Linux} \begin{verbatim} sudo mv ~/Desktop/biber /usr/local/bin/biber sudo chmod +x /usr/local/bin/biber \end{verbatim} \noindent Make sure \verb+/usr/local/bin+ is in your PATH. Search Google for «set PATH linux» if unsure about this. There are many pages about this, for example: \url{http://www.cyberciti.biz/faq/unix-linux-adding-path/} \subsection{Building} Instructions for those who want/need to build an executable from the Perl version. For this, you will need to have Perl 5.16+ with the following modules: \begin{itemize} \item All \biber\ pre-requisites \item \verb+PAR::Packer+ and all dependencies \end{itemize} \noindent You should have the latest CPAN versions of all required modules as \biber\ is very specific in some cases about module versions and depends on recent fixes in many cases. You can see if you have the \biber\ Perl dependencies by the usual \begin{verbatim} perl ./Build.PL \end{verbatim} \noindent invocation in the \biber\ Perl distribution tree directory. Normally, the build procedure for the binaries is as follows\footnote{On Unix-like systems, you may need to specify a full path to the scripts e.g. \texttt{./Build}}: \begin{itemize} \item Get the \biber\ source tree from SF and put it on the architecture you are building for \item cd to the root of the source tree \item \verb+perl Build.PL+ (this will check your module dependencies) \item \verb+Build test+ \item \verb+Build install+ (may need to run this as sudo on Unix-like systems) \item \verb+cd dist/+ \item \verb+build.sh+ (\verb+build.bat+ on Windows) \end{itemize} \noindent This leaves a binary called «\verb+biber-+» (also with a «\verb+.exe+» extension on Windows/Cygwin) in your current directory. The tricky part is constructing the information for the build script. There are two things that need to be configured, both of which are required by the \verb+PAR::Packer+ module: \begin{enumerate} \item A list of modules/libraries to include in the binary which are not automatically detected by the \verb+PAR::Packer+ dependency scanner \item A list of extra files to include in the binary which are not automatically detected by the \verb+PAR::Packer+ dependency scanner \end{enumerate} \noindent To build \biber\ for a new architecture you need to define these two things as part of constructing new build scripts: \begin{itemize} \item Make a new sub-folder in the \verb+dist+ directory named after the architecture you are building for. This name is arbitrary but should be fairly obvious like «\verb+solaris-sparc-64+», for example. \item Copy the \verb+biber.files+ file from an existing build architecture into this directory. \item For all of the files with absolute pathnames in there (that is, ones we are not pulling from the \biber\ tree itself), locate these files in your Perl installation tree and put the correct path in the file. \item Copy the build script from a vaguely similar architecture (i.e. Windows/non-Windows \ldots) to your new architecture directory. \item Change the \opt{--link} options to point to where the required libraries reside on your system. \item Change the \opt{--output} option to name the resulting binary for your architecture. \item Run the build script \end{itemize} \noindent The \opt{--link} options can be a little tricky sometimes. It is usually best to build without them once and then run \verb+ldd+ (or OS equivalent) on the binary to see which version/location of a library you should link to. You can also try just running the binary and it should complain about missing libraries and where it expected to find them. Put this path into the \opt{--link} option. The \opt{--module} options are the same for all architectures and do not need to be modified. On architectures which have or can have case-insensitive file systems, you should use the build script from either Windows or OSX as a reference as these include a step to copy the main \biber\ script to a new name before packing the binary. This is required as otherwise a spurious error is reported to the user on first run of the binary due to a name collision when it unpacks itself. See the \verb+PAR+ wiki page\footnote{\url{http://par.perl.org/wiki/Main_Page}} for FAQs and help on building with \verb+PAR::Packer+. Take special note of the FAQs on including libraries with the packed binary\footnote{\url{http://par.perl.org/wiki/FAQ}, section entitled «My PAR executable needs some dynamic libraries»}. \subsubsection{Testing a binary build} You can test a binary that you have created by copying it to a machine which preferably doesn't have \verb+perl+ at all on it. Running the binary with no arguments will unpack it in the background and display the help. To really test it without having \latex\ available, get the two quick test files from SourceForge\footnote{\url{https://sourceforge.net/projects/biblatex-biber/files/biblatex-biber/testfiles}}, put them in a directory and run \biber\ in that directory like this: \begin{verbatim} biber --validate_control --convert_control test \end{verbatim} \noindent This will run \biber\ normally on the test files plus it will also perform an XSLT transform on the \verb+.bcf+ and leave an HTML representation of it in the same directory thus testing the links to the XML and XSLT libraries as well as the \BibTeX\ parsing libraries. The output should look something like this (may be differences of \biber\ version and locale of course but there should be no errors or warnings). \begin{verbatim} INFO - This is Biber 1.8 INFO - Logfile is 'test.blg' INFO - BibLaTeX control file 'test.bcf' validates INFO - Converted BibLaTeX control file 'test.bcf' to 'test.bcf.html' INFO - Reading 'test.bcf' INFO - Found 1 citekeys in bib section 0 INFO - Processing bib section 0 INFO - Looking for BibTeX format file 'test.bib' for section 0 INFO - Found BibTeX data file 'test.bib' INFO - Decoding LaTeX character macros into UTF-8 INFO - Sorting list 'MAIN' keys INFO - No sort tailoring available for locale 'en_GB.UTF-8' INFO - Sorting list 'SHORTHANDS' keys INFO - No sort tailoring available for locale 'en_GB.UTF-8' INFO - Writing 'test.bbl' with encoding 'UTF-8' INFO - Output to test.bbl \end{verbatim} \noindent There should now be these new files in the directory: \begin{verbatim} test.bcf.html test.blg test.bbl \end{verbatim} \end{document} biblatex-biber-1.8/doc/biber.pdf000444000000000000 126317612230324177 16115 0ustar00rootroot000000000000%PDF-1.4 % 4 0 obj <> endobj 7 0 obj (Important Changes) endobj 8 0 obj <> endobj 11 0 obj (Introduction) endobj 12 0 obj <> endobj 15 0 obj (About) endobj 16 0 obj <> endobj 19 0 obj (Requirements) endobj 20 0 obj <> endobj 23 0 obj (Compatibility Matrix) endobj 24 0 obj <> endobj 27 0 obj (License) endobj 28 0 obj <> endobj 31 0 obj (History) endobj 32 0 obj <> endobj 35 0 obj (Performance) endobj 36 0 obj <> endobj 39 0 obj (Acknowledgements) endobj 40 0 obj <> endobj 43 0 obj (Use) endobj 44 0 obj <> endobj 47 0 obj (Options and config file) endobj 48 0 obj <> endobj 51 0 obj (The output\137format option) endobj 52 0 obj <> endobj 55 0 obj (The sourcemap option) endobj 56 0 obj <> endobj 59 0 obj (The inheritance option) endobj 60 0 obj <> endobj 63 0 obj (The noinit option) endobj 64 0 obj <> endobj 67 0 obj (The sorting option) endobj 68 0 obj <> endobj 71 0 obj (The nosort option) endobj 72 0 obj <> endobj 75 0 obj (The collate\137options option) endobj 76 0 obj <> endobj 79 0 obj (Unicode) endobj 80 0 obj <> endobj 83 0 obj (Input/Output File Locations) endobj 84 0 obj <> endobj 87 0 obj (Control file) endobj 88 0 obj <> endobj 91 0 obj (Data sources) endobj 92 0 obj <> endobj 95 0 obj (Logfile) endobj 96 0 obj <> endobj 99 0 obj (Collation and Localisation) endobj 100 0 obj <> endobj 103 0 obj (Examples) endobj 104 0 obj <> endobj 107 0 obj (Encoding of files) endobj 108 0 obj <> endobj 111 0 obj (LaTeX macro decoding) endobj 112 0 obj <> endobj 115 0 obj (LaTeX macro encoding) endobj 116 0 obj <> endobj 119 0 obj (Examples) endobj 120 0 obj <> endobj 123 0 obj (List and Name Separators) endobj 124 0 obj <> endobj 127 0 obj (Editor Integration) endobj 128 0 obj <> endobj 131 0 obj (Emacs) endobj 132 0 obj <> endobj 135 0 obj (TeXworks) endobj 136 0 obj <> endobj 139 0 obj (BibTeX macros and the MONTH field) endobj 140 0 obj <> endobj 143 0 obj (Biber datasource drivers) endobj 144 0 obj <> endobj 147 0 obj (Visualising the Output) endobj 148 0 obj <> endobj 151 0 obj (Tool Mode) endobj 152 0 obj <> endobj 155 0 obj (Customising Tool Mode Inheritance Resolution) endobj 156 0 obj <> endobj 159 0 obj (Customising Tool Mode Sorting) endobj 160 0 obj <> endobj 163 0 obj (Binaries) endobj 164 0 obj <> endobj 167 0 obj (Binary Caches) endobj 168 0 obj <> endobj 171 0 obj (Binary Architectures) endobj 172 0 obj <> endobj 175 0 obj (Installing) endobj 176 0 obj <> endobj 179 0 obj (OSX) endobj 180 0 obj <> endobj 183 0 obj (Windows) endobj 184 0 obj <> endobj 187 0 obj (Unix/Linux) endobj 188 0 obj <> endobj 191 0 obj (Building) endobj 192 0 obj <> endobj 195 0 obj (Testing a binary build) endobj 196 0 obj <> endobj 228 0 obj <> stream x[n#9W0 Jrs6̩/ .5S).PK΅x|%O=ӟ?-=/^?珟?x7 N9H#'g0^>:UJ09+%NT" *׏JSAHp<47<I>8Ln2g2FH d-''5$cPlEIU楞Wˠm.܁`un  L,R| K64{(9V/LNo0\ǘ?$ƆO*m*Fj0{kRgUS͏t0qȍX| ιcO9#q^^9 kF)+St\lZ-xĿ|%]n[؉?`Hya;aBak=lwg~bu!80fZ:dV}WVwn[ "79U Ъtyf뜨݈kitfWnR,q!̲ݦĪӘ@Pmcb*& e׍KasVsw)\y ~inL@mk) *-`cwDWay?bvP3 \^zyƒ;R9UйKMj2,*=Oagn_Ҽk k,*lߩǵX6m?+*cVw\roLbw)nSڡ}1>ed ;say2=OwŮ |,}Yg”6pKwq SA._K[;$(؁ZNO܉ fJ!Rf,oz9]`PLTLf4ԡ]qxG*눽$#u_?~Ik endstream endobj 197 0 obj <> endobj 240 0 obj [198 0 R 199 0 R 232 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 236 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 237 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R] endobj 198 0 obj <> >> endobj 199 0 obj <> >> endobj 232 0 obj <> >> endobj 200 0 obj <>>> endobj 201 0 obj <>>> endobj 202 0 obj <>>> endobj 203 0 obj <>>> endobj 204 0 obj <>>> endobj 205 0 obj <>>> endobj 206 0 obj <>>> endobj 207 0 obj <>>> endobj 208 0 obj <>>> endobj 209 0 obj <>>> endobj 210 0 obj <>>> endobj 211 0 obj <>>> endobj 212 0 obj <>>> endobj 236 0 obj <>>> endobj 213 0 obj <>>> endobj 214 0 obj <>>> endobj 215 0 obj <>>> endobj 216 0 obj <>>> endobj 217 0 obj <>>> endobj 218 0 obj <>>> endobj 237 0 obj <>>> endobj 219 0 obj <>>> endobj 220 0 obj <>>> endobj 221 0 obj <>>> endobj 222 0 obj <>>> endobj 223 0 obj <>>> endobj 224 0 obj <>>> endobj 225 0 obj <>>> endobj 226 0 obj <>>> endobj 229 0 obj <> endobj 230 0 obj <> endobj 233 0 obj <> endobj 5 0 obj <> endobj 227 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 245 0 obj <> stream xڵˎ#_1? *ajdGcnA)!|E6[xx5dl~훦qhto&ؠKo>ϋ}ii`k'[~=EcuPqESAmC*I]!DW޿xcԗr<,((R y*x)(}v\dDR۱\DzP%hn.\*f.˙y'sW_95?*-z1s7N,1 .#wI{i# 2BKskʫ4Fvve_I\jF.0{uL=C*٨mkfr_v2O"W$n8xIA"Ǿ;D%UvW-J)R]WUB~!"6"+E:g83V+ZC]jV[ȥ6j5^)sr[VP(,spQjzb9K ćås KCwͬ39 &riw(d V9KcvԓH t8¤jED=z5B/t H7 ;ddlg}d/rY\ĴY3=`{cԽn3$yhN1*e;&>ۂcwm "D+?YXY92H}w8r^5xbL< W'O\dfniub j~caX9^# qMEZZtkh=[8uUz,GvxMlG,Y*DeӊD9ef(8ؾS6VU;kDOKe|kGUl8HAa9Qf:9(MR}efRY S@D7jg!-Plnoəub2oL)î)9{ Ν2ˆA!L'}kV¡Q-5 C0tЍ(=Թ ;0b= $?Vt:kلexM6y)`$b+*eBX}]60¯-fp$Z~Y}^2'UGԣr`^%UxeGP$ c44>es =/rmVS/8yË!r_|Qq`8}3eh4>:xOii >8==ǟȞ;V):)STd^tf]d?~\bAP7NVC8[Z&y Nί"Lpv! 4Ie3LFՑMNS u.YKIMI]yWSGMm<m(Hk1EYfD˷xԅ7,!9x sE⾷ۂ0Qr{_ {Tq]-(.lùZ~GY[g} `Xs>*L$9r Z]ŵ!μ˫SihMݚL3W̮Uډ=n7rq?>ϭ"ɡJ蟍!M,`w}rE_x_)(Cj 'v*퐴η{S6R6Sʞ!U٤`.Lt5jIJduQau6Q&̫lqY7@\>˭?ĜatVVq~`Gp?իzj'9纥*"G %8MOti֖++I3; 72X*a ||R\" /uxd-9{UCi$IOթAeSܾgGd/6V?,TQ ޮ"‚.g@8f= endstream endobj 244 0 obj <> endobj 248 0 obj [241 0 R 242 0 R] endobj 241 0 obj <>>> endobj 242 0 obj <>>> endobj 246 0 obj <> endobj 243 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 259 0 obj <> stream xڝ[Ɏ$W%$PhJn&dþhſdpɬЪ\c}#lrM߾=@m v߼„}~R_xRCJxs?6mVbVJ gU-Dh\I2w[a즤%ZHgim2q]5vw)gzt|ƪ•ȉH-k 7 ~{i'X +n0IэX{:,2􅥆[8IbkQ6`+u,Pt-l6}Cܹ;}*GG kѓċ=>1E;Sa}oN mzE)UċrbK{&*$[+loȬZ9r'Su iJ |Ph]؝'9tZm-r`AWFpaiڀPHḤ,fϠ-`5=;'KH' }.'W"퉺:rL%1L!u34*y.zXV Pa)fhZuU NF8tQfI܊[xZF(e7䥐[ Uᓧ͇Z94qKDrPGCn I'p[ѪEag+Pww-jgyDuDVӌV Shz\7QM4>$*"=M+JRAwZ%\_C *g)נŨ;gG®OQ+X)|fY3֢ӈUezWTc[Rx <qDZ|s- YEE*}&^%dpOyݍH,;4r?y.,Ezپ>ײY9:{*V͑>7=73^Jv7ZR++hf >JT0ٜ2[k3<,}B Lxuy3)u q]j6oV] $-e[WrJ>\CW,kUzuuTIs_QpF؉f>ej̮ĪU)TW#?s=X z4 +IW{A!\UͨwfNy ɲkX Qk2\$+{LvxMJ`!5C VT3΅s7ҌGx ځyl/yӹ nl^ِג@IDm̉UU+̏|n3&cuvR5'V9m`JTwpi#}!cٱ:U+cּ4te0Эb/¤7_H>NiA V֍ &g79ߗJy$ g8JN-t:'VrQZlWxIhtrJTrImPn,X8PSqSCy ]l c軻Oz&(D~!F.*}e"7.ֲqSpe2L!_%PtK3jHUvuTJS'F1qk<9)Kwc$x!5laww%ٍ~Idp xav/eˀ3@;_`&;=P)O=elOp =s;<}J[p9,27xrL:ejT9Lo ׻cDӣwVUaʼn-Æ)؄s`༶pgU{˳|ǹ:3Fa[5F<( ]M|ܐs V\CacQȥNPwfNyPOR(T'c У c٬үyw>_cY0x+$'[`c]"'Tn `JZ_) Q kHiO S8~Npo& H1A&٤/H $USj>qgV,k! kzИc6']&]12~GX;Jy`qwlC~mTZ܄zdV]0I0"jҡVRF2ހA JK-jDOY^* E\Cl×>L2* Dd͐278(f!_O<(| G'>*wUYU6NTok[ȝէyr*61.G ? 9dj7pBX?K [ endstream endobj 258 0 obj <> endobj 264 0 obj [249 0 R 250 0 R 252 0 R 254 0 R 251 0 R 253 0 R 255 0 R] endobj 249 0 obj <>>> endobj 250 0 obj <>>> endobj 252 0 obj <>>> endobj 254 0 obj <>>> endobj 251 0 obj <>>> endobj 253 0 obj <> >> endobj 255 0 obj <> >> endobj 260 0 obj <> endobj 9 0 obj <> endobj 13 0 obj <> endobj 17 0 obj <> endobj 261 0 obj <> endobj 262 0 obj <> endobj 263 0 obj <> endobj 257 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 270 0 obj <> stream xڵYɎ7 WF%ᓃ9$~(RA`]%=Q#T#?twm.z7/,RЏE2\~=|~xXp./@Do0qyXI91?vOe8H_/JK9u д ط/l * !mD^ւWLed La.5[g 7[f pO06D@Ovpg ^Jن5 f B6 >bqrlA"x  XT Oy}S` s3K-Y)ܷ>Pv ` wSX m6 kA6+6f׽]I%J BUf}1ZQmLV|>-aNDh3O4;uE(NuMQj׫U |C Z*zim(ނi-솹/uK]c-#N#-$xn WK9}G䷎qQX Gw.ڞs|!EƜA=uWWZeELHpz Q!P5=}T\G,3/_5[Z#]؜2La) ь9E`o(9'P9O|s2 vP**Yb]K"{*LKLD}afhVPVx:-g9ͤRJV&weZPڻu#sut} L/;.no+sOgt^r=`vf*6d=M3fLraCa9X#߸lZʻНb\CTKu穜)L+T 4+n7#&o:$n&i+Y9(`'.QLʄK(z]kSݕr82m< Ґ,R[5W[ B\ P$&7\tḳ^I_"_h#ԘHz.5 endstream endobj 269 0 obj <> endobj 275 0 obj [256 0 R 265 0 R 267 0 R 266 0 R] endobj 256 0 obj <>>> endobj 265 0 obj <>>> endobj 267 0 obj <>>> endobj 266 0 obj <> >> endobj 271 0 obj <> endobj 272 0 obj <> endobj 21 0 obj <> endobj 25 0 obj <> endobj 29 0 obj <> endobj 273 0 obj <> endobj 274 0 obj <> endobj 268 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 281 0 obj <> stream xڭ[Ɏ$ WF* dþſo-D-6rgDP)nF^q__$EIeJ{/xaB|~Ҿ?/H o^i @z~F_ni ~/ng3R:/Ed[ixҟ< 鷵8# G;Rge}|J(o/F47cLxtC;Gh]y2AX.>L6߬Q@]M+myMoϦ}Ѩ g(;au!˫;k5iu@9}X&{B&(dµ(k~k}!hK~l56W\TZϦo5N$-0Ч?xE<2 WQ ̃X'&JgW!*WXllѨx鋟6iRj ds*g-tBCiG0 *g;EzLM^7sIcB`q/IWs҉M 9P'r (Jg/I |"GcQuYOQ;eJW*c,s% W,S5P4Ղi 碼P|_S/Bz}LbXkIl ˛hdTht1Z1j 7 ̍[ %nQ=4.rw~[8م˶;*NqP{Z<2p| D詻1VըnZ#6.AL`O 6UzzJsK}˒F`f;Xc$g+sdeuZ{Neqۯ 7j*dOk` _G}VKZPtTb -֤= j)2C-۽WEJEקE*Rl ٠RclՑ s+,~pB'06$#s'w`'1i6oAj J翭'$ Mb(o̥8óN6Pq/Ùs/zi,z%y,+ ;o43jF~cpJ`9E9n(k7 _ktI1-Qk9ZK*sy B  vhv6sstSchs4[n<[oDQ yz-k X\fXdO`kD6K~:wࡱ(#|!d)2);/˒4vnezYAEc8I&Di'V}Z(A$?xr]0.oMVdJLc pZ@$͇U ,H~4ozdk~_:$SU Yћ/dWצ$v~]n9~=.ew޴`(9hݡT7q̧f rl1^R~L, k$HW}F>۫A@^s4ZH M\VaRSdd9xus4冈mz@WD[tVxkmY{cH 1ԵI鈿|M9xӢ ԥ1U,3wf,MLA9/7cr>rAz0Ck}12Lv,<mB^:K2~znrn6Ũyلt6]B^s㮗"3;]9]X1w"ʭ$D'rH)щ5p (a9y^~S5ϗ-T_-}-jbPHMHy˟E"zs?;6Ft ^F%뜙FB^'=|5ki> endobj 284 0 obj [276 0 R 277 0 R 278 0 R] endobj 276 0 obj <>>> endobj 277 0 obj <>>> endobj 278 0 obj <>>> endobj 282 0 obj <> endobj 283 0 obj <> endobj 279 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 291 0 obj <> stream xˎ#>_DQ/р{l[-ArK~?*IdQ* ny[VT2b_k&̄) }kO1<㟇^eA1X6[Ih_鬄v5" Jc>ۈIF#MIV37WObMp]\CĊ#ٮTW)R"R\&|Td8.1)O}e RYOPƏ 4p-a%RV5#֓hVd$R2Iy,fkx4KU쾞o=*ތu? ק2QtJwujvVC2bm*ZSL,; cIC KVDʹtFfƒ(z揿{!#<0 ̩>XBJ`!A"44}~XͼjaPyˆcѲ[͖k?7_[/R,F!B~؆BbRqIn( '\բ)7K4p'^g/c)Cgvꅂ<,β(D2AFv2LL9 ^En>)fdlxY>dt͜MLsQ6 *mxqx6}&@RÈ8Fq (}v5 ?wT6'MNjmQyl8 ݉M*NLbF)*hMxvW8wJPf/icC();pZ=e7a۬1OCٺ{M(/|ǔt04BW`1 "A؏pΦY djlBFF:MklV8Вf-9~#h6~r|Cߐu:8 5 0<7lo'}*ذƺ p4Ǧ#T2-z33m0Lp7M`ϱ30gfu`< -ҁCNQ}%*[Mԩ/E7%˪oqP$^~Vdd=S'7䤱.8Sk(O۸xIxL餼pVFK .sP:s[lAX?Pѩ|5E_ВaP|[7t6ξ̲Ob:*# -u~V:is_'֍EQᐠ۬!m! 'BB4DP\TX=~Pv$Q#kp(>pOP'ED+L{]ε;*'SCTR/c[2sb=O7[ä+tiI~j|jgZ8}yXa! ތFoa`J7xE =ȝNbxE9Rg>f:7y:Y*Kl6[ےl[pP [ʺ ;R21\u97k&1$Mz$R[UqI\TgaN2 "EF|Ep:8|vPkBsjC¬{,CΡLΡ w Nz"Yi"Z&@q'-S?(){Pi7:bQ85jrQӰb5NuMjrpz!ڋM F6I܉5hɦ~MU_%ֵLN:͎%rٺjDm3i@{hU3Ns;N)fh)6 8N}7ؔyP4c(tJ7UiLy!͝aNT̮_~]_heSL)^>[k.vfꨴZʢl,}r]FūU~a/aÛZ}J/7LF64.%ŶY)~K ^1KYߡAˈsFK⇋ܱ޳Q=b\cKGM!uIv _€.\}VVZAtexU^M&Ls!I= e1}34{ZGٴ2^0S3٬O76ICf. y#ѿ5ހ`90_-6sR-٪UMLb]U\cQeE/ endstream endobj 290 0 obj <> endobj 299 0 obj [285 0 R 286 0 R 287 0 R 288 0 R] endobj 285 0 obj <>>> endobj 286 0 obj <>>> endobj 287 0 obj <>>> endobj 288 0 obj <>>> endobj 292 0 obj <> endobj 293 0 obj <> endobj 294 0 obj <> endobj 295 0 obj <> endobj 296 0 obj <> endobj 297 0 obj <> endobj 298 0 obj <> endobj 289 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 303 0 obj <> stream x\ˮ#Ww xxvWJ 7+ppH:"yXbKn?mrܽ+/7EPf 2 iv rwRFۨ/TrJC"nR/?DleEV%$d/}~h\+ )R_6+9JبKVx㨕>&vϭo?~JJRnxy 0|پ^>{At*no?lp,̧lpB (ظ! ZM+Jױ`6!5 oXOe|i<_1_17EGRmMtnxz0KnoEpq \@,I`Έ>4cIH]Qy M2TF/ z4 r=%I6MBkU|G`& #A>Ѡ$(Rcz`x+]gvlѱњӼL~پ6@tZxRz'U}h~d(6a7BcRd ('ƍb73Jc.w-^Ih7- Pp4钅̥Y!ƴ!Zj.^onoP;hJ;UQSNyw[c~a,&=d>&QDxQPifuTHlpaZ֣7g:C^'=:WMZE\P6MiFɻkbeI54W'iV.Kҵp%IT7OdyMqWcB5hv2Lk}(-1 1Ld<4ŭF&2B``ftƷGӰzk?uJ[>^;3ч޵|?+3faܸ2cL Ѝx_#[~ÛL"F]ᴛy]p9N5RL.: éHی+Md:ӈSUJ -{S&V}VZf껲ʆu"4Eͳ!@06aˇ!8AU%>hَ=gi'%=@ZK-i{ѸSVl]f:k.CڣoYM՞يW6viXz`D\!!cl <^fLI:@ĮAEUc ˵<) :xT0ߋ&V}VjfʎͯgB4~8L+Mi c|cǾo^?Tcj}̘+~nvgEqjp15R5oC4;&V88Ʀ'CP@'3VWf(jj.RGlna_ NduR÷X=n*lcsfM f $_:z֗iB2}R$<3()'#*ƔzXCM1 ŹcRl;L{|Ĉ+ Ϩ|[:%Y9Gφ v r.I;A$Mvν <&3^):`%8:epJ)mhbJ.jum+۬r2L&]cm"~i%%@G 0+SJ{B/27|]CZ5}9$sr򐨙:٢]`K 1?b^-"9ihq+,\!} jx1'ðB%-1`Gca䏭'G*(cWAG G/YD-Mhsa9DB"H=eq1}xRbt8.1C=찦@= \d8#jF4HJi܆ɟmժ!ZPݪ~S0Ɲ,:)13G+ǘA=Q-b:Lį(!j$A=6&,svcAB@}"vI®0} wP+JJƍ+)n^,;q'E!v3 5'ona :Hzҭp;E>18]Zs6I;Vɱ 3r`6ttMb|07Pҹ;ElR&(C\'ET )|#aL-|fBXT8.t0pb:!t)0D3ZӥLlF_c9̯sp_`] V~aGA:œtz:G+=_80SNjNcY\=*vqNT!)K_"6޴B##%±-`=WML6Blj1e sh:eӬ*fRMIpŔ'Oku74yU]0Ҷ]g仅`j<>M/6T@+#|_^X(vXlQnk1.j gY< 6O$WaR \4 7ط)f2 6W*X5e{9 m3g\1?MP4G^D~{!N>VhtӋ8;X2͎?Oi=k#a4 XVXo9lK翵> endobj 304 0 obj <> endobj 300 0 obj <> endobj 301 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 308 0 obj <> stream xڝZn$9WJZ@ڙ6iZHR("]Fu:Bw>R?~=.)#߄uoERzxvL*9kZ./O;Tæ:Rۺ?hfUg=L;Ww贵y@Ep;_ERIը `@~:)= ڸE-g>CߵGg  )PPӤ-1-'OBW UXT׍hAݪɾ0焬BHB *S#*něY"Ԑ@0r?He&LZC5_BU5d!XٲIޤ3 3zңEh㕞}umr݆ܸ<)vm˝F 7YySX ikeypZ-u(\Q<ܚK rhS ozñF⛀j-=JU|W0e1<;wsJw职4nCQlkCkR6gBJfU*x Qxm#NsL ()dNyPF@.7.vQrYu91$o2/`%* cEE;#R8NJXW^۳Tg*G^+O@PˆZ Q̭Oy], e ᴯxȢ(;Tmj]/NE.8iQ21 Ǒ3m2Qi2Ȏu,+/e>`VT7y^tzb i٦sKd~n+$0:~$eIO<6Ug,Vmv X/OO =MG~c8u/5qÏ8))F+%e0zO6j; #s!sWbDFwESkQX{񍚏@se yѩYa%}ƕG$Ո6䆃)DZPo0$@Ғb;%ТbPUD0|mu1SD@ )Q|ƬtBrA/NM]jٶ;]y\X9]53̪ӂr,dzul\6>Gc?,QQ|DߖF ՞q\4tHh6'b6J~9a4hw~m]|S&{5`ja<;O)a5W}᮳[jkٛ_ZJx R&znHKG$E~lH˲?sy]Lނv@Y;#٫'&[՛He2YRN_xDo;LwV?ZSɿDH-ɨ-&ސQnED٢O/jf=4ԸpqG_Q Q;`>+qJAM;uGz[ c0/ uyڷMh*ٍ :d厴g xBKGbcO_Dę#n J[ElACK!W-ph)]]vi I/|{ B߉+w8W~c NjW|{μ&oW=~\ endstream endobj 307 0 obj <> endobj 309 0 obj <> endobj 33 0 obj <> endobj 37 0 obj <> endobj 41 0 obj <> endobj 306 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 315 0 obj <> stream x[I9ׯ?T4Rh!N̦D_%3R5կǾe͝l/ڸMI$mSFJ\ڂ ĸ}E) |:| c%Un_wv2/R ֻ$X ).4~G&M%$Rhm[J8OՋ,4#pR64BmgGKW+)Y2efzKuۑP\>%LI7;_fUQc7 \j0Z+v 2DVџ0kIy~!S&dMߴWkkK_eM&7TQumxfbU _F._%l2jY2*\(RP2LL d 3Iy]Eٿ׍0(CL(tI|9,h=TPc"p|qLi܀Yvfu95v(64M |jStVՀHoמxK+]Mc~]%06tu4߈XWp[λ8|"n7*^m] )Y-3&MV0UR C o޿CéUOĈ 8@{El6Mޫ%n$n&`p\9$o0I/ &wҨU{fS(y:ep{>$+֡G^㊹+$`=v02c#j9~W$jġV$ѠDRaq=LbmICeŝm ۗWC[u&zJ9/dzKrdSZ.<oIS Uf+ &ȗ]shlw- .6иn)3~ @5 zҡحΚx -Ԩ=%@<"`O}(g9/:g;,1qTiwlv*>` {C>b Wa.0Xʓ w- QEy ή~$F#|$c垲X@#l5+b $E.p{mU}Ņ8tޡV IЈc֭0>#h%Yzor(_"db.יw3K5a齋a{bEz|7Ҍ( wiO_nf+$oy69~'Dʢ|N"hUw!x»}_rQr}$͓AMPe v"eԁK"yڄWmsKj6Y`dJos)LpہT#Sve!ib*l$݈:mioy OCd6B \Op_N6H1-"ycCK8޴dh{?ODߎ ;V?f*_.2ANq<6NhLCYa5ni7K-Ay98rdeB_zJ҈ ieAv ,wf\C@mp6 ,\R /9 gv\ FӺF_s':؁Ո6BV!- b"ǂ y>*ETҋ} ZȝHl쾱{5 GّMJ #D:(t?cp3{l䡣 Dswg0$8JAYm rK"U~4<M:+r-2T6!X ]MizJ||z8U? 6^ MfX3TCAYuBV 4[hmw6 |2  EބzH4GRf3s3E[BBZj&. E6#MrE+3 oP)|lZMI)D,JJ9erDJEeO*֔G F](=RT׉-kB_CNaxŖX8VY[7.H:`)GPV|2 ı DJ;uC}&o+Qn.iZOj٠O5"IZϑƌ ql9b)'#3rpl?ݮP.XrgKc':ai |6ܒS(ܔkN[yK1kf̜*5d-=5OǛ|έ~LZE+\î+X+ +Msn0PxiihZ:?ҿϤz}bI7Bn ҉ASW;Z'cMyA{JA5>ZxS ^ 4wo_{AקBjOkJ}{e ϊjC(7(;w:JV -MJz_>!5&qQʼnOFV!O1.Ŧ>.9Բ87ƤEn:0%(OEsJ)џchnQ &e7mxϧ1jZh@/-l€GP{Mٚ(` \a+VԿ^Y+t4ပI7'Wel]B]Kul :8v-R4܁qJ2JkI5Gy,O6?ipU2 uXdM>-L} H^ ϛA-'.+WQkŗE}꥓uhҫ_2il{чcE>Vbdt&+pQ9'.ŋ^֡ھ6g?Vb16&RFۻXPѼs;a 5urq4.̞9r(lٌ>;.;yKmK€d뎉*iU 04L3"9[YŒ;JdzƉrnzmUHFY.^S-b2)/*OkU苯Y>/9H/ttjQyq?V endstream endobj 314 0 obj <> endobj 319 0 obj [305 0 R 310 0 R 311 0 R 312 0 R] endobj 305 0 obj <>>> endobj 310 0 obj <>>> endobj 311 0 obj <>>> endobj 312 0 obj <>>> endobj 316 0 obj <> endobj 317 0 obj <> endobj 45 0 obj <> endobj 318 0 obj <> endobj 313 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 323 0 obj <> stream xڭMs6 +xlFH̺^w&N}Krj'ԇ I9,EHx 滱{rZ lB^OZt~2bqA̟?N/M0yfQG@MHWHEIZ (y`+=;?0&~:?8iǢ):(MDiwbuzOd!㽐e77lS^==yF/BI jjFq| Bdab>0RƘ*cP3%Ű@gZBQ=p%oIt@5 faWe *<v;7,v5Dj6FoZ?n%2TC]b}Nj%]ջAq߷B t*ݸAry&_)^PIWkrNN;HciHK|?'ƴ}J8c6^O~XjmYf~YO9okeqXƍ{8+,S?2 endstream endobj 322 0 obj <> endobj 324 0 obj <> endobj 320 0 obj <> endobj 321 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 328 0 obj <> stream xڽY9#7 WLH <] ^M4EHw5"Y~|II%;}qRF 6Bp뻔Hi%>Ǟߴi?[]uh-o3a5K 0~ ,dί 'Z-=Jǧ1߾":2LB{3_CU=PH9 (dTB$2x]x[UX< \GrHKE'j74G 7Z Y?&9J>_I]Q+\ 9]NL $zWIrvlJMlhG*4rs> 5.`ʢ'A` kr;oFin&G{Ի5#JҊ[r8rv01(; ZOYqR` rRVx\T+<PU5h"!$!BQ^ 8HŪ?ܷ*8zלXT[?|K7]qnGQ2Sd|7qet@>t%>쌠gfν"YSVIRF!EFV1L2J^K 6BNյhYCѸy־PUdcD7 L0:C4B}m.j&8^9-`I,J'%뀟5)I,ՎՈ  `<-4[iu}"Հe j?r \:3DNkAb,鉿NމcF.~OY~˓-*Yڂ,>9gX;fޞ= Jhq5|ؤ<ȿ`P(YVYS21ZaVA8U'I[9x 6qgGmI5ڼ=,lX Q4oÔ"R#WV!*VԾLh Cl W^ZJjixB84s]-)$뺱9Eo;B 3%w;]vӗ_󤄙E{+2b6j+aEN@9*e`:2oN}U,뉩-ݦ1QcfF'=lvH=pΠ)i.7OѬ8^p~e0J>޻e&D#S sJF_Mg]ֳ+7R*[%D!]( 3ԒgVůlB ky!y[yGqIBY?q8$Nggg)vxvfCMkh6ѺyQ%v]26څ_KvQ@ؠ>;i=k Gjnfuථ տFnҔ6º |j;.Z_+< key~ 0^ Ȧ|MҬ%(rUvvB`gTħSKddm} kQ9&6Je*;VH(jI"Ee,dxqoRXvC/zYp)f.mXpCIk('b}WKJN{Z> endobj 329 0 obj <> endobj 331 0 obj <> endobj 332 0 obj <> endobj 333 0 obj <> endobj 334 0 obj <> endobj 335 0 obj <> endobj 336 0 obj <> endobj 337 0 obj <> endobj 338 0 obj <> endobj 339 0 obj <> endobj 340 0 obj <> endobj 341 0 obj <> endobj 342 0 obj <> endobj 343 0 obj <> endobj 344 0 obj <> endobj 345 0 obj <> endobj 346 0 obj <> endobj 347 0 obj <> endobj 348 0 obj <> endobj 349 0 obj <> endobj 350 0 obj <> endobj 326 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 358 0 obj <> stream xYK6 ϯX$R/  ,c1KD=-;-ڬ'D~|S\\Eݺ%`E I*t=..Rw)o_68i )|R[ zI+*_^6x+uzWOE5N4Q20 lV :VBRKUnh+-‰'FF 9(mG :IMW@טy"Z*W 5Z/Nl*4qZܡb}vR zG.ݞ9Uz!{][csg爬ָ]D]_kph--TV…ifW s2D\9d~Ѳ^z~ @.JqT9z%¶70#dL>_w<9h'TfڲY$KD>Qj2>sB)6|a*]O~H{.Z9-$ʭٰ#EUß$B=%Hq 4 YsZsZ #F4:]sJ ,ʕ2ΩՏљ"@HٕF l1?Oo[:|& I|9zh.e9^c4KL\qJ9?<;GA8Z{Q@aM-z|BwI(wT)QQ^~9 uIC{RJP1R~~|vTVS6j"'W*v߽At|ؼZmBag]ylj"Kf(,-*;F1E6S]7U6#}zݭ.ʯ2+|4=6o1c[X*ҊYS7b)a){ƔEm f1wePҵj; b3|*G `* Ě&,8 endstream endobj 357 0 obj <> endobj 394 0 obj [353 0 R] endobj 353 0 obj <>>> endobj 359 0 obj <> endobj 360 0 obj <> endobj 361 0 obj <> endobj 362 0 obj <> endobj 363 0 obj <> endobj 364 0 obj <> endobj 365 0 obj <> endobj 366 0 obj <> endobj 367 0 obj <> endobj 368 0 obj <> endobj 369 0 obj <> endobj 370 0 obj <> endobj 371 0 obj <> endobj 372 0 obj <> endobj 373 0 obj <> endobj 374 0 obj <> endobj 375 0 obj <> endobj 376 0 obj <> endobj 377 0 obj <> endobj 378 0 obj <> endobj 379 0 obj <> endobj 380 0 obj <> endobj 381 0 obj <> endobj 382 0 obj <> endobj 383 0 obj <> endobj 384 0 obj <> endobj 385 0 obj <> endobj 386 0 obj <> endobj 387 0 obj <> endobj 388 0 obj <> endobj 389 0 obj <> endobj 390 0 obj <> endobj 391 0 obj <> endobj 392 0 obj <> endobj 49 0 obj <> endobj 356 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 399 0 obj <> stream x#1߯Ph%hNKȉ?0"lԳAQwXϋMo?.FFʹt x޴`Y>!7$;;? _m?[;w3~o>+A[Ley#S=٨u/f{n㽼+3 VHa)3HAIuUL#Pvc@arƚJrYv|rtB#=lXѽG$!az.r;u<,PEd#|V?a\Tц (A1CgﶘZ1}7a^e%O<}0\B.^Y2mBX KO,{nu {v(q}" T웘w"8IJYI]Kz|1xPCCØ.&[lލ Tcۅ+m蚃2{Ɣu%fEJVɫ`Y/,v2nF}}N;,/:/ia2\]AQYxrPg8x"#(%f/L>'vL҉ ##'LI5`I2O7ŢX=nmYI-1xΕHShr@[َ18fRlaH\EKS,P5Dc>)}AJ2֊Iy -WR*F#8 Iy6ƾ$F9 `wJs@Mn숅ycKƠWyUz8Q&qP DI?@ٽZSKqAI6N1+b(cCxA>ՠۢt,61$>.0.r5`s$}uQ{J-ڒ$N^;c 8H(CioQAoY8# _'xd HV! XNFsqBN!9hzg'#)Ng(q.ۨLٌzA/ N V-\!2~FY⊷(YiNhc$Fr0'}ܷ=獊Q`rTzPֆupa.boQGhj!^v`3*T-<1+!6V}z|OJHdFʐz=b_Pޤp0ȚTݢ`Vd`a-UaCn.&畇 [L( 6n1ӯ9 z-֊r9iWh S:N*yR7e%یTkIZ7>5C->SX7 N9WErk(j"XO'u6TxxpQ(hdzʀwX,,pPlXbW ȑn/!T?auqo;,,~v: ):֣oI_Gy CY6Ӏkzp=ŏ t D[4'.Ȑַ^PdDZJ1 NWN 18TB\n֒\fwѐ߮ 'AI_KM^IhP`g^) "D(ɗ _ph6Ro:șOy2!8Y`р8x2xvq{3F~ HR |6.N)vgExfx:WЉ'Rʕ|7rloSc̣Gx)Ⱦc~Үs͘+Dg> endobj 401 0 obj [354 0 R 355 0 R 395 0 R 396 0 R] endobj 354 0 obj <>>> endobj 355 0 obj <>>> endobj 395 0 obj <>>> endobj 396 0 obj <>>> endobj 400 0 obj <> endobj 53 0 obj <> endobj 397 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 405 0 obj <> stream xڽZIW10jڞ9sKr}>Z(Q*Uuu1vOWiᦏIyv_>^Q/ H_Q7^.*|F[i4FJpIigc̫ _B#IsϽrWY5ē6HiR^^ !\+/ 2qo+ў67mNōhVpmu|~wM;7АVoʤPv4λVz mOt@5foC$wHm7JNP.:͘Ikm-0,SҪ 0GygjTe2Ӥ.蕙m-f#1PoQ5XQݴd6uoy[ FHes`Ub`Vk4(G{Q3K50k*m4n;+6VAd0`eWݤm}$ Eצ : ? }? Kq(mQuQދ ǎ* (qDCYӅxqBt$HfFNWFLܬ&Ɓ: y%[2ȋf[Ǎ9+ PBpb 21/Aڍ .7"&‹P1R4m7cY/ Ā"% 4!@PV mv) 3FKxd6|ɼ\{p4Pk% WIUv v H0?pޓiHN2SD%YXsiP{:x\z!+ ޏϰkJxSd|?f/'I0J1VHWADYJI-G#RN8eNH7k ;>j+ڏ TG7t{hvu 4^Z  Gy: р`v=k8kp^F}Oi` x k1AP=z!GHPF$P"ǐz"Apa%Xu&z8 s Ů<({P'&aU7=$B|ջ2$iCs(6atD%P{hE@p=ˎFb|bG#hgFv:ǎ L&8vI<_~M|uN_z˷]'7n-F ±ZLގLEaC+ W!Y KJԺ@3ftDaUUPzȾ U D|8o%BG^\ r,Lcif5VyWXAӒ2Cn9oc0E7>MMMܖigR}Zʻ9.NQ{V {y-?FEpRgH\Ri[tRbOy;Xfެy|rjaѺUYb zݰݶQ( C!DWZ[(5,Uy_C}l6o4 е-Zu:~QJThsBw:Bv]cS QuynJHaЊt(+땞]|fʣӕGmڨYPgư:VݚFzgiJw"PX2JDEj̡γrqKդ` | _M \t-zr0ib4gS@Z۲ajq3wWXӝEmq&3T!y'<;x:]X Xh@ȸPjVN߄V(67J 5OOΌUWKZS6v3/P3 xW YRԓPZ"O- N[*)a4m7wZ`ϰzQ<1ZpCNwCn-5't=׍h56Fgy?诛!2gFwv[.Kj:(g|KJ?QS$t3 z endstream endobj 404 0 obj <> endobj 425 0 obj [402 0 R] endobj 402 0 obj <>>> endobj 406 0 obj <> endobj 407 0 obj <> endobj 408 0 obj <> endobj 409 0 obj <> endobj 411 0 obj <> endobj 412 0 obj <> endobj 413 0 obj <> endobj 415 0 obj <> endobj 416 0 obj <> endobj 417 0 obj <> endobj 418 0 obj <> endobj 419 0 obj <> endobj 420 0 obj <> endobj 421 0 obj <> endobj 422 0 obj <> endobj 403 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 428 0 obj <> stream xڽZɎ#7 WZ(j xr 䚜rB6 *I$Dq ׷_R]gӿןA-`Rbaߗ9stӜ+Ϗ7iZ^J0ﱧy|ۉi,q؆ _ۍJUE鳴ʏ7gGxW(n[ do N)㏯_ cmLIc|DDh 3vy)S Hc?I,H s4NusƭA_io?)(Ɍ=e<=yIƥ  雠1dc2W CI~ߓJ\LHg$My1in`gEI{3Q y30)1Oω{L穮]܄ûiD:7yيܽF$42D_@ 5F^2RC=l`IAX)`WmQPWe5C-{ޛx r჎p= 9]RU`~R|hH9zˤҧu9.7zXZ$+*1:9g*~ >+XJjx#C\W{ B{|^E s9'UuȲ5I)3l}I4=XNt#0=cBfQt-SV!'эpt|{1\ڼA ΔKTʑn,0AQD')JEIXUi3DnK_)&,)wԊ;|)VW9d2N9nX=胁&70ܬtDfp\N|m󈕅=:/:ה/\[+Dn9R{ X)P+Ac|>'GyӻVPn3m0j`u2H yC}?)DN_7LXh3LMm%irYs7arf0TXW! ʅ\fl7OlI El BX.CXW'Lo.d0sk#7M2 z1e)qyMeCAAHPɜfʑ|^[/'R +:* G&)q~$ݜc?ʠjbJw/} 0˗*Bj%0M xΜiL~q"J Q2%*jy{Gn(jRuLRHAnQ<ܕ5  w6a'#N"$`OzZQ>_v59ħwbO4ўV &&cg noUzYJL6Jk뽥UُZ<ͳIV ּb: r=4^{bPI1҄-V yUk {~u+3I_֭u,dS<[z3$V` x,$7LJ; _~|+1$L];ըKoFg[7v;#qw+fk $k+3B/b3,1hAu3w8Knsdšv`Pm٣SpJ6;f ==1ؖJKB"5{F!SM+JdVtrٚhbѵ<by@N@K/ X@"QJ9z%GsZY+^-+Dz#ntRb@M V>\Pid!ެfwF2O=!={ KiƝXGQ5g%tFU*ʖ]qD(((''ôHIf|Zm;ִ)?nT"4~^gA}=X`nWU2Rꑲ6Lf`ka.8)h<˄K*b53+@F"TV)HX(.`" /yRm*EP QU-!\Ds.'ҚWs;X%8-T!@'fj~$0 Edg?h|f(W[ 4vŃ d'e@)Z\0<񉋛;s3bK2^LZBmkkC#d4e.fFY;:_Q 3TJdybVR;Kj;¢.K \o>i#k}MfO$xݘtۆ}Ll:ʣؖAfi/T7 Aj,؊}˘V.szlmdt-ٻwD|)@SbK+Yh*wwh]0eqBW"*:C~U!,faKk$EV=r1!odyu9))F&/O@;mXM1*6^K`$ʒ8CyijDIݳs-{oGIK8iIn*_ 'y8tv=fN璲ԾJqԬs^[[$o>) |Vr5 պ;lFP0!URVR2dqQ&M6Z?XT !'IYQ"6M}H^^KHO؜vofvEt= ESjyWJP鶊4NZ=iV$yƖ=S 79j,,wcxt.8lD ˄oh"\Sha.=`p@ޱFkU>3$~l<|}n-WTkO3}Y&-FV+LʺY 5eaBZJ&h,񕪓U'жz* r'sߧRNң׭~"pb\75ɯj*X^95m1.3>YUc}<ф[pУdB Nkvsȃ+n+@`JC CILr9yCa$^L=BXT6EjR0itc2 Tg mF⫼@{+h!7 3CܓeG/bBa9ȬxXn!龅C8$F}M1{dhgTS aJ;]j_i~Ġ@-ԻلN ʾz3{:}iA?3+&ۅѣrg.2Oh:y/&GcsQR޶hx ֦9L6M9ߓ M_e{"F2brrKKqmf7s&Mg]<Lrn`֦'H(ٲ c]gHƌ>*w/#z\/)1Q=ʪj^ #|^|Dq\y,Cㅴ̧kq#ٍ)(MHϒ<UбJp IEtTB:B#=ajAn(Yb\c ʇtҼog*rz%%|;`0Y4Rɓ,d U#|ۼۑOgpe+}\M;a> endobj 454 0 obj <> endobj 455 0 obj <> endobj 456 0 obj <> endobj 457 0 obj <> endobj 458 0 obj <> endobj 459 0 obj <> endobj 460 0 obj <> endobj 461 0 obj <> endobj 462 0 obj <> endobj 451 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 465 0 obj <> stream xZK6ϯc0$R/@MW{[kr.%Q˲]N$"EHZ^˯0%EEьv˜pqxyۋ`@UJ_4j.4{˔YrMZn\\EO-&LrCP`Fdpű,a,eƒZm_&R8P| k^VqyDlDc!+mKdfD]s[mL Ӑ5[ >SouԱBO%.D'[u\z /lx{;rJŷȜjzϮu!Wɺݪ>T{ } o)%,VK2Zs%9Aj`\&[iGVi'>}tZ׌ΧqeDWƙbI^Z%V* uv%fIa(­ŬX1h|B?Ft}\p^.iB32*Ojm&[^R7hO:BwɂU+Xciw2K!;3_Wζ7y5'( u-į*|.97>A5b>~JǬ)-y1dIK97GyRPKEk#(]SfqhhTVq9>thG>@( Hs<E} U()+fZmPq<~Ow ?g |&`Ys%UxCC`{Ce?ղF |~߆-Sӟ@;5ϥ3C*rSc%]/YGB3 w-nQ@NψFкݫ:}Vx@5!yv,,(4Tͭ8&H Q"JШWs7Cd?$_m_5u{5a' & =Mun$%7]R}D[(R%优UbL|Zy3-<*Pd +>FMnIB,D'K7*KfXgއn{lyؗ AOV4ے$x*]!%~k6fSHr Is5߻gkl[HH+Ӡ%E X$]}Vb1`;n$Ȟ 3h(?!r]uVˁq';1(]*D,!@u$FGu'b/( q0-oF Ef(fN2դZO{gdo$}}OҰ@%6FV_7ű]Gs}iu6@lBFFJ ,K|IDwV8ra kN!w'*tMOΜ#wp#ߎ} Gnj2Gyu<&,[ܛTqr$C9g4lV;ٳ6ZH?#} Y3ū<Âz')3K|gΝQ{OGr|6:W, "V[>+1^i$%s'}}JX-Oy<ڨ"> endobj 466 0 obj <> endobj 467 0 obj <> endobj 468 0 obj <> endobj 469 0 obj <> endobj 470 0 obj <> endobj 471 0 obj <> endobj 472 0 obj <> endobj 473 0 obj <> endobj 474 0 obj <> endobj 475 0 obj <> endobj 476 0 obj <> endobj 477 0 obj <> endobj 478 0 obj <> endobj 479 0 obj <> endobj 480 0 obj <> endobj 481 0 obj <> endobj 482 0 obj <> endobj 483 0 obj <> endobj 484 0 obj <> endobj 485 0 obj <> endobj 486 0 obj <> endobj 487 0 obj <> endobj 488 0 obj <> endobj 489 0 obj <> endobj 490 0 obj <> endobj 463 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 493 0 obj <> stream xYn6+l%g/0qkmWmԐ$J#c )=;-׏nQE/47q0|7y\w/uaki?kޥ EY4:gc4j <KNt#ԐprG iΘXiD" nIaVá7*k e|lk6ʊ#VpN_kU*Ā%<<~\9AR{ѧhYmQkէ(hk^RXY fN&J@ nbKjڐDFd6j|_~V*S}%um )W? ,+Z0?8FST~%:X320̧Yh0KZvhJ!!Z5X˵BG%(Q…$/0OJF`ujݬ Z35ǐN]& cgʙ[ ET}P/c uc)l\!:PTygآUV5_r )lK}1KR`GϥV7~KJgk*;l&\Zw`sLW?f'>K4} !،i?<}YM?Q endstream endobj 492 0 obj <> endobj 494 0 obj <> endobj 495 0 obj <> endobj 496 0 obj <> endobj 497 0 obj <> endobj 498 0 obj <> endobj 499 0 obj <> endobj 500 0 obj <> endobj 501 0 obj <> endobj 502 0 obj <> endobj 503 0 obj <> endobj 504 0 obj <> endobj 505 0 obj <> endobj 506 0 obj <> endobj 507 0 obj <> endobj 508 0 obj <> endobj 509 0 obj <> endobj 510 0 obj <> endobj 511 0 obj <> endobj 512 0 obj <> endobj 513 0 obj <> endobj 514 0 obj <> endobj 515 0 obj <> endobj 516 0 obj <> endobj 517 0 obj <> endobj 518 0 obj <> endobj 519 0 obj <> endobj 520 0 obj <> endobj 521 0 obj <> endobj 522 0 obj <> endobj 523 0 obj <> endobj 524 0 obj <> endobj 525 0 obj <> endobj 526 0 obj <> endobj 527 0 obj <> endobj 491 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 530 0 obj <> stream xZɎ#7 WZBjs߂\SJRt`qWi&I x''cs!Gh_HnIVF L1lÉ+t9gv&Li2/(ĿyW;L{a9!2֡j'L۳\QZ8{v-LS/43xz;V$mt yt}$tDʊlA]wVN$u!M"ae!Dv8hwZf-%n!Q^hZeBz%Mo4d}Y!UrC`=YShiԴцi&nYƏgu^Wƻ  P}D_\nisL:*7P{)sx*aH6KN]7.YoL@&pU9euWuc2DhWey Q찓BF9g׌kK%$b䷑#ݺ;{QPl$VZӵ*_aIwh@ۀ(?: $zpN(Л:l͠"~X,[vڍ XKM xp|߁T#ʸ)YaRvHe4$D<Q# @ςۃ!k+a&~%uCX5mfv|ękxw!R~v`cS@/PFKy?B(A>% 30w20pWZv&>#m@3MGB zrKRgI8kAݾ~@#jrR[)\uSwt9TUq1!/2CA<Kݜ饠9U{APjye9Rf!:OC])r{6v|9#S2֒e=HmԚXi0v];bQ~j6dv`3QOu1~[ nͪZj<{ NO Ά-B@ZCn'|>-'/) \V*PuGOe?項E#|Zj~tJa|:kE(Pll jqafZYBU"2J&bbS2Ji9XiOVfS3 Uu0sy#+(V#tފz~;<}-Fz]_SnjT{D-]`lm̒>i>HCf޴u`9 p^N?PeŽ%}:)(uM~#CivxP]³/2f? Ƒ&"PaK0åX:dY P{ހN*\bfzqy퇌7tY^)c =oJxkh6\Vnh<Gq x?'ճc͝K'hy0P o endstream endobj 529 0 obj <> endobj 531 0 obj <> endobj 532 0 obj <> endobj 533 0 obj <> endobj 534 0 obj <> endobj 535 0 obj <> endobj 536 0 obj <> endobj 537 0 obj <> endobj 538 0 obj <> endobj 539 0 obj <> endobj 540 0 obj <> endobj 541 0 obj <> endobj 542 0 obj <> endobj 543 0 obj <> endobj 544 0 obj <> endobj 545 0 obj <> endobj 546 0 obj <> endobj 547 0 obj <> endobj 548 0 obj <> endobj 549 0 obj <> endobj 550 0 obj <> endobj 551 0 obj <> endobj 552 0 obj <> endobj 553 0 obj <> endobj 554 0 obj <> endobj 555 0 obj <> endobj 528 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 559 0 obj <> stream xYKo#7 WD+ 8u@EnECp4XxD/}|>uҧO~}<}:*:ptdxA6>hM>[B>\vcJȿ>~n߱rI4q.JPTǯO]K>t 9D<-\R$5K)дNw}D/ cÑsC%p ;fFzW67џUT{Z;0F3?<\ֆ "Uqm8:c  U<ՌoE=M"rd6j|dL{ݥ4p{P2T;sp6cMS+ L]Zm"ג9 " 4EW̆Rضʮod|Ucyvf"kqߟy "Swm7squwdؗlmZM ֢&CwYN'fa3El *8̂v- 4t0J09s l|h!ja#ߔQ'=`.Hhy\j?t endstream endobj 558 0 obj <> endobj 587 0 obj [556 0 R] endobj 556 0 obj <>>> endobj 560 0 obj <> endobj 561 0 obj <> endobj 562 0 obj <> endobj 563 0 obj <> endobj 564 0 obj <> endobj 565 0 obj <> endobj 566 0 obj <> endobj 567 0 obj <> endobj 568 0 obj <> endobj 569 0 obj <> endobj 570 0 obj <> endobj 571 0 obj <> endobj 572 0 obj <> endobj 573 0 obj <> endobj 574 0 obj <> endobj 575 0 obj <> endobj 576 0 obj <> endobj 577 0 obj <> endobj 578 0 obj <> endobj 579 0 obj <> endobj 580 0 obj <> endobj 581 0 obj <> endobj 582 0 obj <> endobj 57 0 obj <> endobj 583 0 obj <> endobj 584 0 obj <> endobj 585 0 obj <> endobj 586 0 obj <> endobj 557 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 590 0 obj <> stream xZ+7 +LՕ(R`a{2.ITiE#ioXkHGf _^d/5~/j7`pǻ 3XmvngMJ<#%xK>G]82iNooc uO~m@ Y5^EUCׂz4V5+I T :vURϺۀ@kǩ?!9N`?dhG2R4 cJA+`FU:Yj+Eƀ浒c&1>)>g`^l : oiC? t~2fWo'1Pa MIBzNyn#Q$殀ZBټKM2*aѬg1(dnDoebxa}Yv]WV8mNv!p#I88y-3:oWMK&Byd *Bԃ;Ӽ V׳f<t3x=Sm(sBfh[o?lE!}Ӭ OQc_t{ӔigS]%5P9;K'a=ŵc J#uu.W9v\,-X:n4)uGyЈ sBm rM%]#|lKX!3`YpyΧEީ]jG-L+,(W/ceǚ#!}XQh-9anEnt]l`qF3kЊI`te`uĵ )2b̼w_+.+e+q>{|QKKlT[)[)ع=HI`g ]h&W9BZH*9.:,nVqU)CFS6<ƱznܹN,NR7^ *G)K.``yM( C02$_-VepR@͡KB~p\5"KiKu4({aE ^cs6MғmQSNg(h`FASxjtH:f>:X~!S&΍Wrtm&w @L|N-E4fx7& Y[6ʨI-SVQV#0 :1u EiC:@텖{& ܂ };ݝơAR" P}$#=ʼ+ ؑjb#qfO=ҕ;OD;`J;8)L,H.FhGH%\Ua# ݦYz)s[: u.l11n̎ U[DNRW#Vw#EnA!љf%J.LMLsl 9)wi?5$2w.BwŔP jQ GsD=W,j"c1>ou&fe%t*,55=0`+q5Փp}+*TE = Z:CҷLӝSu!.3{p+?8^ U'Ko&7%);]ɩj)V.LEcCM&y~׊Mi#)0,)m(2Đj¬M -;=M;HR}:: Փ*>17=ŪfV&)Cu:14_Κ'!0^}5Ejn̞k2բu+$N}+Z*e?pwIrJ8ݯLi9wVK`V? \? endstream endobj 589 0 obj <> endobj 591 0 obj <> endobj 592 0 obj <> endobj 593 0 obj <> endobj 594 0 obj <> endobj 595 0 obj <> endobj 596 0 obj <> endobj 597 0 obj <> endobj 598 0 obj <> endobj 599 0 obj <> endobj 600 0 obj <> endobj 601 0 obj <> endobj 602 0 obj <> endobj 603 0 obj <> endobj 604 0 obj <> endobj 605 0 obj <> endobj 606 0 obj <> endobj 607 0 obj <> endobj 608 0 obj <> endobj 609 0 obj <> endobj 610 0 obj <> endobj 611 0 obj <> endobj 612 0 obj <> endobj 613 0 obj <> endobj 614 0 obj <> endobj 615 0 obj <> endobj 616 0 obj <> endobj 617 0 obj <> endobj 618 0 obj <> endobj 619 0 obj <> endobj 620 0 obj <> endobj 621 0 obj <> endobj 588 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 628 0 obj <> stream x[Ko#9hDR/ ${\mם\VJbT;,j*>>DRqїh|㷻󗨢G_B yE..Ek󡵵鹦hM.=Czr;`So^sK~˟4JP{;Ӧ{z46Ǐ *B[?,ϯkVfPreyǔWB[bZV*yIk,kS>w!2FMj?CH.VZ)~N6&Цv65ȩO si %4P]DViޏ,ܗ[ǔy$Z99ނT"I;`y0:̔Y浾n$x(9 .dWtU&kZY3XbTћܿV\цnY4L v+1Ar0\A]w4ЯknWVm=.:YL{zj#KZEWZVy,ͳk6t lZ$GH{^?-g.fcQy$Jy咹ͤAi+tU?DlٹIf&5YKGlrm_xZ֤{ڨUWjSؕE;L>*9vj1l1TKb.>qfk%dq wW8--L%Y96@ юNbg V?,B`Q3ͰwySVh^u|Tç~˻۠ Lk m,p8Phm,K-th`ǚQ#G2q.F&$񭴡=3X=V'<㘭۔ţYؑ) ݎnu#^$UV]Y9Buսܧeh5"@UJtTpb In"y̛><7j>vTbiOF֐f9q5/MDEa\&ʭ<еGLBB(Y0.0ƦH =Zd‹p-n&G>`u<)2^TfR0*iPdGj%0q#s1Ť a]fMRjTV Kut elm2pe~rF\g,}{e(w տ1\!jP^h_kmI!R +@+}xDoT ുһ5HzBm'54 XߟjIВJK<W)oZX-7J7.6 c:a[v4eN"ʼn`}ĕ 7g/fw)pEM'=錑R=u-Bi|r¡BxI1%KIyi1K+y,?9)Cx[W?-C)p$p-νD7.7njyX#Yi uw'l0(؂%b/Km)R<]%jmu~[`YS+:e4m'ǸA@PZO|! EV3,>B-NGAGB{twFڛ&*c0d7](;Jx8N{uN&&M B{'}Q[*29`CDEXE&6;̴1^i@ & dZ9*&GfU:\?+sxNÆo晦09D> endobj 642 0 obj [623 0 R] endobj 623 0 obj <>>> endobj 629 0 obj <> endobj 630 0 obj <> endobj 631 0 obj <> endobj 632 0 obj <> endobj 633 0 obj <> endobj 634 0 obj <> endobj 61 0 obj <> endobj 635 0 obj <> endobj 636 0 obj <> endobj 637 0 obj <> endobj 638 0 obj <> endobj 639 0 obj <> endobj 640 0 obj <> endobj 641 0 obj <> endobj 626 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 647 0 obj <> stream xZ9d WThA TOU-ٮ;[odN<_J"%=z60=uHx#˿//F_C+76(t .(WQk [t}q7^7WW⛍PW 2zwOP>=ʉr3m-vû6Uy]kg܃־wLy'.Q.2ĭHu.@h^~ee'TtNk}~|KeΜߚ 6U٦֕d/=rƳ}Jފ,<<,E[|[yv3􅝒α R'@ơ1 z:z3pMjb&+U캚,+MިG >^Y8M^[Tɐ\1'\_W+giYHi lD|T=nS;=bd)esr 1Ԩ9r7;%5p D)H`4C~5]˷mrFQ9[3\.6۠e>* cl\fXTݠͣvCZڈ-+C|eLŷG̡2 Sy[y_3ӽ;8i "Cåqi4*nyEUv%Κc{wՆ(a[WiPz U?E:k]i䰧fŅeЋ{g+{Ob^ Nz,F%>J}ǘvru}c$ 8[f8z~f!(0 AYEE)i]ᠣ4euvF€tnE1u^lA2 6-2z?tB%y?1ʮD x_Dq'VG984!fvP(E8Q`V!q DNdV۶2kOX:i ɝb^_A+0D28&* (;o#7w%z!GpTV!Tmԛ.ݎw {8Ei{/-lOO^K[֧'}s#MP"֭n Xg1cek%ďM@1YߌVq-6b`>1̀ (xc2n6krSe7{A>[ֻ)r'?yWZS{xiz1x'd4:^w܇a g@nJ{S n8דk7Of{Q{~%T2nۯpQ˸ۊ{jQӕTϋ_:"G=Jt xWZT3@yg) [T3]¶Sa>SQ/Im^ZO`ݎ23)k/2)BAa™f2 ~R ,yBpLgYMr)뼊iuMj𶺙fKFiqwi d=Γg]v876\hF[} &SPs`vSsa=̚1q-%ѵŃMOnރFB Nst|,PkPn<RPʟ3QԷfQe@c4}Cކ[K?g:aQ~6]86ұ ?`ٙASr=='$嵙IA])sEYiIj/ѱ /7CdȊôJc@s}LS h)lBflL!ʿvX)H}Q94eZg25zzZS^/]&tpǷ_ӗOj;Re7?ܞDBԟQTqLJ^!uPM$ [,ġ VH1G̑:6 s73vn:?}RYJjޜɊ 7 endstream endobj 646 0 obj <> endobj 672 0 obj [624 0 R 643 0 R 644 0 R 625 0 R] endobj 624 0 obj <>>> endobj 643 0 obj <>>> endobj 644 0 obj <>>> endobj 625 0 obj <> >> endobj 648 0 obj <> endobj 65 0 obj <> endobj 649 0 obj <> endobj 650 0 obj <> endobj 651 0 obj <> endobj 652 0 obj <> endobj 653 0 obj <> endobj 654 0 obj <> endobj 655 0 obj <> endobj 656 0 obj <> endobj 657 0 obj <> endobj 658 0 obj <> endobj 659 0 obj <> endobj 660 0 obj <> endobj 661 0 obj <> endobj 662 0 obj <> endobj 663 0 obj <> endobj 664 0 obj <> endobj 665 0 obj <> endobj 666 0 obj <> endobj 667 0 obj <> endobj 668 0 obj <> endobj 669 0 obj <> endobj 670 0 obj <> endobj 671 0 obj <> endobj 645 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 675 0 obj <> stream xڵɮ$>_~xg@܂\S.C~gwUIEReOe>g>~C/<[(4N9ߏ}r4?}|7$U}&}ld:h|2" 0,!j3EEQk|彶82p)*c2{3o.CnɒWK8 $?!cƄ' vHAT'>[WʔҍRe^ƨA8K`bNͫ"__a @L< 6j8|MrH*wmi߳5'Y>t;:ʦC6;2 r;:`q A&9FVORei#3+lʞQ_zދ;kf{on9V/2s愧#LQ!;tb<ƍD}4 4MEh- L{`~nHəjf_A| oArrD).MG)[#I<d+CHfF&Sʺ LI=1K(]poG8Oiֱ?!h|I.⭚AnpL_4bŒǘx:2m4_⤫}SCWiKi)'Nk60DF6sec6UDly͍K_ ŋf@h4Ol l7^=ovk>S&g6lL4/ziF7r5k#: {š tr]D!6R8 Š9+қЧ_;T@- "\jJFtUb0iQ&ײ'I ).AK*TmL+ꭶ3 Zʮt;QSnژxyq&΃<9r}JBM@٢HFHʾKLp1&e4ʚe+;rDqFnqjkH9cCVA#ﴇ̛Ȳ('ըޖK?o(w:LcŻRbי.DY֕IǂrT);J[=U[ƃDA1kww|뚛#OKpI+)[Ԥ+Iy+`i$$Hԭ|(0rsk%t1ؔgH>wp֌&zn-TI !%="D܄qW @bѱHhdU`sJm .J}TЇS,@C˒׵u d&UGU+.|ϢǨ_"Km.ivMos}lZ%L ˸_ _*xf/jY}"oGOە+~u*X{)ܛU:v*smv?ĽFsk?IDqiK?f;9> ]jqmq!uT7N Wo ގĦ rnt-eX販E5l1gP1nBr׷kNN endstream endobj 674 0 obj <> endobj 676 0 obj <> endobj 677 0 obj <> endobj 678 0 obj <> endobj 673 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 681 0 obj <> stream xZɎ$7WڀDYS|464h(JX60hdgeH(T7yoⶍ1>ccpmYd+y{t:THPfhO](> ς=Un 붺jeC 4iL]qc6m49qP^3JINIYъ=?HI->~] ~OcgF/2G>*D`! 587&(9^X/)5c$Ϭ e-o[g:r8uDf7HiUZjW;k{de\51UpI!y%\•W,JAĂ6 "> {T8˭_jhU}{3,i>JݮR\x.Nxe7e';k5;Nӛ"Z7˦"7 u`{EKv,5PmymyZ?5N[Nig1ٓ t*CXIMe?LRF .R bD΍>) PqKźP08j AmvT=qfbsǹNNY4F*i8!T3Kɵٷc`l@]w–|~5pi3{%H%*7j緜=nG&6x&NM3]h7t zag+=QWsV OV~oj"k )EZ!y߬~XƆ .dN,B7JNYyɔ=Yˈ̥^%Շ&Z=Cɳ T7']Rvܛu9EeN ߢi[_w |#X~p6l΂~ aVՅwP"x|Ee{G׫^kl^akzѸȿo v<|QfqCy˷S\^_C/?fz(i)IRor׷|8 endstream endobj 680 0 obj <> endobj 682 0 obj <> endobj 683 0 obj <> endobj 684 0 obj <> endobj 685 0 obj <> endobj 686 0 obj <> endobj 687 0 obj <> endobj 688 0 obj <> endobj 689 0 obj <> endobj 690 0 obj <> endobj 691 0 obj <> endobj 692 0 obj <> endobj 693 0 obj <> endobj 694 0 obj <> endobj 695 0 obj <> endobj 696 0 obj <> endobj 697 0 obj <> endobj 698 0 obj <> endobj 699 0 obj <> endobj 679 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 702 0 obj <> stream xڽZ9o$WLhGo`0@K3zCC9y?0"Y{|~ݛSrS$H/3c&9@ =cvv ׸~Fg3EeĽ^+2i($M6\uug")UT 3uRdl؉{g9wio Nix!/Y3T‰m-0a$Q#yEִHroE H"[UTyʡnbά5dSHPa-*աz=1ꍸp_og9pA^Omc jЖU%1  SIwV*Mܷ=(.Ҙ;22oU*ҖSdu$k0UbڳfyY#CsZbLm_yǙNrnTq;$ s'kd‹u^~ְ D2s j8 r<i`eC2*5({.6Ƚ蔻Gݫ@6V̫#/cxf욯d$t-Ϥ\܃SqŵΙkm䈩l'{SRE3XNԕGGxF:ąƒr ttc U+Y%q2srVGF Y^z'N>D$Bu&HLA(IrQ SL ?>yl*.y.CI XAӋ&*+[IҞJEד[ LJ0(4([`i30w%bt21eJG<:橙[L)]-]5f(Q'9S  p@cc>u-i )|Kt9<+_H:p*3KI &cW3T1hRֱ`MǝmGBy5`|Z&SYR'.2}],F|zi"]zuI 0#4@wuj:)Lb%QO [@| D}8w}cddBYdy7l?nd-|مb!>%W DU>q'͙$YoKӪ63-cҪȷQ]dzR,뛒 #%ϜԭZcf !$ \+nZ 0cTk]2EWbӭo-f)q"3A)d1/C&{6cfk ^LF[RĭzM N9B:N|aJ%C1)c!L@&Cœ3#%Ԁ,k[)!>Sd*m]^Sˡ[Tt4H:JE̓4=^|סSP^eiTy$׌p@K\>+'``x3Mbڸjb~ƆhUSdur&J{ڡ*Vhiߓ:'ʄyiU8S3FNc{+|O]0L5\׏3@l.MX H]$W4uDDtkݕR f^ݢJLa#r3\\ r=N: 9sZ7npwzrk /=0+1p7Z +rO)m z+<&;)B E4Jk9te /5p( er*H3ę~H3O>w]/;G{oWV|SY-;-;vW%P>RKJj endstream endobj 701 0 obj <> endobj 703 0 obj <> endobj 704 0 obj <> endobj 705 0 obj <> endobj 706 0 obj <> endobj 707 0 obj <> endobj 708 0 obj <> endobj 709 0 obj <> endobj 710 0 obj <> endobj 711 0 obj <> endobj 712 0 obj <> endobj 713 0 obj <> endobj 714 0 obj <> endobj 715 0 obj <> endobj 716 0 obj <> endobj 717 0 obj <> endobj 718 0 obj <> endobj 719 0 obj <> endobj 720 0 obj <> endobj 721 0 obj <> endobj 722 0 obj <> endobj 723 0 obj <> endobj 700 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 727 0 obj <> stream xZn7+L 59&\p[90åXc)y$O߿Hz{tD`IWz<9鏳*sn#zҷz -KYM{+&:y6'FJ tn_Yq ֮Ty_؆PWĿA̿n'^% ( w4T$Q][=SF$2l(٪3KrQ O7mŖZ+*pҹY3(YK6})Ҏ^з~REєC&3{BbDK㩧pn>:UbFVw>V4JOTgc*eq%wNLRšs݈$f4()O\V4 <+)q+iN ѼVZ:Ue)3A*fmgruUk5+JXrF:"=YXj!jKhKKE8j3WK3HDE*R^Ȱ 5K vN6zӾ}<"eyᑅ˝iu-:rҵl;#PYZe\ťJ\_RRCWFV9k2[AK6]!6Hf`PWr,׸+VtmqWU\R =n Tc$K3;E-Rhp'DS#CR d G2ڮK=jBԷ Iq2gâB-n&m ;$oٜA fwq m&ۖD9;I@ #+K!+Swf"v/nᐈI#̥oi2Bv*5~ebLkY7Fw-t61m6a7 51vwA©Hg [(/iҹB  V6ĺWNx⃌2^K~oLʡ]JLX]TV4Q-qOM'jÏoPybAp&3{F'3 /=#PXpm :Rhyۢ^ݝ.Sגw#kNR׊6xdλwy4G>&_&yrVl?AJ@l{u2_Rz}P endstream endobj 726 0 obj <> endobj 757 0 obj [724 0 R] endobj 724 0 obj <>>> endobj 728 0 obj <> endobj 729 0 obj <> endobj 730 0 obj <> endobj 731 0 obj <> endobj 732 0 obj <> endobj 733 0 obj <> endobj 734 0 obj <> endobj 735 0 obj <> endobj 736 0 obj <> endobj 737 0 obj <> endobj 738 0 obj <> endobj 739 0 obj <> endobj 740 0 obj <> endobj 741 0 obj <> endobj 742 0 obj <> endobj 743 0 obj <> endobj 744 0 obj <> endobj 745 0 obj <> endobj 746 0 obj <> endobj 747 0 obj <> endobj 748 0 obj <> endobj 749 0 obj <> endobj 750 0 obj <> endobj 751 0 obj <> endobj 69 0 obj <> endobj 752 0 obj <> endobj 753 0 obj <> endobj 754 0 obj <> endobj 755 0 obj <> endobj 756 0 obj <> endobj 725 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 761 0 obj <> stream xڥVMo!d203|H+VշV9Կ߁NX{B] /7?5#P0 %uz懾{6!|5,8u|Lt$1 wDռ< :OXxw|~c_Hy<NCDV._r%nrEv.^uݕ?E j;1!?Y?԰|8iSJm5rlGV+d"3iUYL,p R.GBq]Ո}iV8qe:Jk]s 6#1Z-0Dmq7-}4@`rdYhPId\%Ejwu[VKmJk9Z".w(/30*%LmxT]e}\~4+^kyk߭ ǠuMCbu?x[  endstream endobj 760 0 obj <> endobj 762 0 obj <> endobj 758 0 obj <> endobj 759 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 769 0 obj <> stream xZɎ7WLszFRߒ)Ar%"Y\[glF[]#'ɟϯOV[8qPtC8Z}_R(RtXo>cFB'Sd\+MHɼ]]ċR3ZzJIj QѽԊM\LENx5xPRIcʅrL8O1GVqm(G6 NPM(ff|ymg)YzҞNZ!KҊu^m+ĀQR天.e^UF^"@nty槴\ 񉋯w#wgu0:K&)֗9|r} |";GkO=9ǫZ< dX(][ :Nťݒv':1|y3- Orf1;'h\wRL`ak +^Cи!l b$J){˖}*j)4]O='#<Оa50(vL*' 7^] tuYN(ʔ;i,e5 3-lLJe1\uzF6fD$0,N YƐlIAےP2ͼ ^XWGn܃"̭k)xlB!5=Ddž$WQ30ޚM\gc gШ{ ZzT5DX5a`\ ]WV;ոR pv}vyxFrVR5KfY@R. UW *"ʵER>0M9vuaz]ހlb&b( sJc[\Rp"3yʇ*U)-8S3=8Dn-bS*N]W/aZHX|@$Ϥm%7XM՝jnFAO3Z 75gH:0rncTt?DRW`$,ތ@yi]S[.Y/r漧/yEwY=9`?M=f>KO~QkzBS I (7'J o0 M4 ʷ+?w$x~| SpF`=LoO:ȄB{UôBhDGL-Db&U&T借n!a`.ef3Y+ntuJLwPB%7jN?3mL@Tʸ6@o(Q6N¯"I_-^NSIn*鱌eN;>oqi?2$'Օ]v]E7){%53Z؜Iv SIASBS}5w+8mFp#0VVP #ۃ}rcPW\׶\3uxben Vi%EIfú;nq/:j:ݬ@PpX|{A$l#s-շvtrݺܭ1 L#i̷gmѵ=v# hʘ,c[)X)ʄ&xJιS\.|.n(RfoKŇya7 SrkV)_ܔ=&;%V( %sY:j%r[NK~;h ʘOU䧩dPߦ:ʦv}"OT_Txק󟎐BQЏc7ʣ6_<$3{J4&TOwJ -)GcgXh~5At_StMo.>;M jK4$%.bX6)G endstream endobj 768 0 obj <> endobj 787 0 obj [763 0 R 765 0 R 766 0 R 764 0 R] endobj 763 0 obj <>>> endobj 765 0 obj <>>> endobj 766 0 obj <>>> endobj 764 0 obj <> >> endobj 770 0 obj <> endobj 771 0 obj <> endobj 772 0 obj <> endobj 773 0 obj <> endobj 774 0 obj <> endobj 775 0 obj <> endobj 776 0 obj <> endobj 777 0 obj <> endobj 778 0 obj <> endobj 779 0 obj <> endobj 780 0 obj <> endobj 73 0 obj <> endobj 781 0 obj <> endobj 782 0 obj <> endobj 783 0 obj <> endobj 784 0 obj <> endobj 785 0 obj <> endobj 77 0 obj <> endobj 786 0 obj <> endobj 767 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 790 0 obj <> stream xZ͏+' "<60R)Tyom  JU5?<}|ǷW4cBdσo4X ߇ߎZZ_酴{y ?^?5}SOœ~\]7fL nO|Q&kբ&ƩVU#lEA/"w*y++M┍v"@l.#h9٤]x߳QĥslAvRa[HL"א8hYPӋ |( #+\/1"wjb䵍sUU$XV j\}JS(g)nndzIAQӭܲ@Ŝ7뛑}L6vV6ssS&Tsg %f)_DHlK$߯`]ߙ^APj{8ļVHL燦jqùq$?na=7z z57M6al7 qQBfQ:,/CHغ"UxĶ{HX:ieG&ŔncjEDTTQ!ז;тV^o%Xwn;v*Rb |rbPE;]LURȉROΒ^z:j] tVruģ́BGj.6.?. vqNtSt!agz,b#͑_o ' (ρW Z7t0ػոu`$^}~4d )]Qfߙ~6+=H&0+TA zY/i}X}Ѱ_6IVJ]\p)N+Oy> -^{G \8qV:+z7YRʪyo{"1Ssݗ y!p>W/4]LX7յ2ǝ얂Y#s)Vbj"CƱ +JRA1 H+S%/kC) =i벿`$\vwWW:Y'3Q MSW@ c"43z7-}B'g>JÍi̒C`%ʏ*ū (,Xm-+v\ P> V$8rгM74ٸ*ur/1P$lT×{? ,SG]״/h>`c3%v :Obv9H̘EA=ɭ B1ӃrQ endstream endobj 789 0 obj <> endobj 791 0 obj <> endobj 81 0 obj <> endobj 85 0 obj <> endobj 89 0 obj <> endobj 93 0 obj <> endobj 788 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 794 0 obj <> stream xZI# 19-<pr~$)-$ET.wcAlDq*uE]~o=mh%]D sll^_0J9>_($ݚdy?߯΅B^?L,_TO{'h]M!TTd.-f &ӝ]]ّ&ݐ_܊e}gʐ 4I!IcbgMchYea=(_?OŠ.ÕV>5~,צK z(^VA}!%f(kfª"êWHE+螹b R7|5k>/ލQ"^Рڜ͹3k m _&R endstream endobj 793 0 obj <> endobj 795 0 obj <> endobj 97 0 obj <> endobj 792 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 801 0 obj <> stream xڵI#^}T]s]lؗKD0df4Ԫd` %//>^~zwQR$]>yQ+sL&Ǐ˯W)ҦI7uO2h˩1=|\CxF«4oro ̽XVh=: #>ٙ5 ׂs1p⊷*f㗗 OO쏲3'CѦn2Lgj]FϧcV|k2 `QPDc6;% O$ސ]*b1 o5A?cg~1jp$GkVFѐ"᜝Ę"\VHѳ:OmW=za&ʬHq*FSsEb`xh ,K1s^ȤM97B>9P[5y,e#-u ę(aP!Κ!Ll HypTZ>o{I5j*Cm*h8:@ʚSkϑ8GCXǦ^G 'pΝHrMaA̋qz"׋՛AMDu@OHmC1vuɽs,У[WVypg]>19"=uºLAS'O#\vFF{˝ B~b^} cw,X,2@FzBzKx_ ,ff (Xv(Ȣe1XHi9ipeB_wp RJ 'arΙ)\ _锁=ݍ}įʨyvw7(Fx֊ɭty*NgʕE($⛳r"[ Bq 4`ƷE3))_[|Ϡȡ]Ik\<Ŗde\% V]R*{˓MŊm<ڛ,39凞WWS3U눷o'INB́KL=N+E0vZ^Q oJc7v ^f/ QyI㦚RG%l}S:pG,l>ѡIyC^qgo?vQZhIuFIO:O ݢadiU{#Ua Y۫,CX׏Bu>IPNSa*~ӊ&Epn¤.B7{V!ue߱܆`SkC\Ei*yNrZN(kF󫀬lUQwȊyGpgP+ n<|[|f.X2"65Jk>&-LQUZcEjO@s3]0IhB O7 s x'Yt kXjⴸk/̢}xđzaOy$@]kh}N&-z7Жu+eT̵ ;8kJ' =4﫭Ҁֿ\,UԊh 6rW qɗ֌GC8٬fh0]2.-6~j Nj32r=E}`.9.i.$Xy jg5)౼ypiw'UA-Hs:IҼx .9>/.ǝ'!㶅Ґv08c'^p>޾h3"$+g4(xuf%Z? F#̏Ľ.h}N5Tgs_~0;ֶc K/lqbx_䗿\ȉ?u(&/@'R%9%&)dEe V c#o^d + Z$sGl ~OL2`dNfGsZYa?ېMffe:{mE-XlgYח,t)济:ҷ,F *!S%ǠySf =}|}2G Y fSCiF endstream endobj 800 0 obj <> endobj 805 0 obj [797 0 R 798 0 R 804 0 R] endobj 797 0 obj <>>> endobj 798 0 obj <> >> endobj 804 0 obj <> >> endobj 802 0 obj <> endobj 101 0 obj <> endobj 803 0 obj <> endobj 799 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 808 0 obj <> stream xڽZˎ# Wx,ZW@À{ %&6z,J*ۓoKQ{G'ELxAAah[CX:1ʘ6ԵQ<ʠdwt2v$(F pLk9%-F$}>ȶķe J>S R?ErC7:7-L 'Y.@"5m,b;G_%N?-vK&^# _B*F|hmTR9泼*˕6dr4ba+$D$8.l73)*xLsPҼaK8bGLn[l$mg JcI9U_%d3=~1p:iŕ Wv̔'xyxy=IdyQHr,9Q~kcXbAvjK)w㌇v.֭RҤ>bl(Z.eyXM(wY zsl ~g^+e{!n@ d3|T2ys|3039'Kc[fl<{ |T,nyo ^T.5ˎ4~.E>'c$6dἲ}?c*%csa" 7w ;56S@2-zG۷ N z/̼@\n$*\vjen'2ޙTjj SXOx;pDcll k CY^&,5FӠYkiD䄡۹xGT DM=Q nPTTTqj8QbwdÈbzZf[PnX-PAÙ f_m/hlя[PomL0 t8Oe=ޭ\ {7=` ]ŐFZl,k9Jo IJqPR輍)ͿL*Z8-!T~yx|R(WJyz$k7 GoeuU3o t»̄{# Z%~jOڞ^ 蹸0r]74N.;}P\j/<ܲK2pV|1*DRjaAߕ̹hgoho)ŏ!bRP^z 6U0൥Œyh2K2v. endstream endobj 807 0 obj <> endobj 809 0 obj <> endobj 105 0 obj <> endobj 810 0 obj <> endobj 811 0 obj <> endobj 812 0 obj <> endobj 813 0 obj <> endobj 109 0 obj <> endobj 814 0 obj <> endobj 806 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 819 0 obj <> stream xڽn_~\k/rK[S4)Udn'xڒb+o۟ߟ~;3Zm}f*mr)>Iks6xPyZë>=ۄ`?9F|B޵7 g(xG+i{=\׭0r6*pcTJpVhIB &GnGeb2X&W,;'<˹96GpZ|ZlAb=X IؠyN:JPWDb -fM(~kn_m97-䖧/T!S-&voж߀].?Ԑ]o)p ] p MCCOo8:Ǜ$ WQJys_6moX'~'^ݹ:5;H( #rAc:v͇Dlu,Iέ'P%9e hxieQ-/BPb3 DpK$jl`Ԇ- =O 2%H[))Xy\]2ħIf-⬉yUxi4guo+@M%^t>{-9`{.U9+;.l >N"1{bO:V4Sj*5o}Ф0lfj@:A(SjZRSZ6gILަ :Ӣq<4=7" b/ck`^h;S۾a`fM{ 9 鳽Ѭ̚:< ]Pi0Jܙ ^ȌŎ_+jǰ1:tR:=힮:ANە͛S b|l8$AZnU< malUdf vvalq1=+ ;xqBgP_9a[UiS\A}>4vSii '[ MaoMMnFsHtuu&-Ԥ:)='ojhD=H1jK6(e3siy$w v9z1q%jSI ?D&^HUoW=i_eMIrXPO-R/zjrյG CIk֕3Vʚ8W.tv;7Y`iF\XG@.$z. ~WdUV&h:R. Ĺ'WU2(@ZY7rm{e0s.?mnK ut4iV *lz B:8-@FVu([u;cˊ}M?jy P w4 T?]Ka>HL*Bٻt8'-cQrC X܎2_r DBA;5{m! -=˧=4vN l;y3SElyI"[}JT. Ҏ8 oO-P[BGPL\j`L[]ANZyknd*M…BRn3HIߗY"yw3 1HrmrǷ7[y endstream endobj 818 0 obj <> endobj 822 0 obj [815 0 R] endobj 815 0 obj <>>> endobj 820 0 obj <> endobj 821 0 obj <> endobj 817 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 827 0 obj <> stream xڽɎ\ťz<=|KᓃK~?ŭX[F =Ծ&o?ׯ))n_qSFx ۯ/R*R__g+%oRocQ_pxlOߞi~ k# &=U! " cAIGt%݂>$Pn-u -C:y*R"#|c]7l3#2 :Q)"] r[,tLg=-;YrkZo*\, qpH?Jp=F:lZgm8#4΀M݉ތ`TƢY_ޝ_VQ(g ӧ RIɆ.7sF 4ڊ|5a"+Yz2֊/|6yy`z}$Lk,9B^0Q[jc9"?_ y;QQU&-0j|b:}8Q.J(whOL#]1WuU  O3 힬U&gM. G6< h `e bѲ)e"`:Y;ĹE,jK,+"-.~k'dL% g[Y\4Rf[i%?$,!a2@hÕB ŀ7yRA1&^ЩqGdB~ϟ UXӀϽCGD@QVZ>CP3C%%n.j.X9G.X9For`9'cׇZƱ'M@nTcD5f6q \[M?t=CAnno"K:*' ᠻ/#r}5^&ᦲSw*2m-zRQ>[̀MFpS)f1\)ziQN??ӊ&f7Sn)I`jy%9p@dvX"kZtIg!84T-U^&qvͱA-EZHA*PqVha|-rnVh>?DZ\ƴWKbR$Q5U%vj hSFt93[8kv=(=vlf!kn)̍3y_ǺLV˃#{Vۚlc"Ko'LK\O{-$Bğ*4@W⣆@]p.8PP0Wb:~HEZ,v(ԡc7N 儑a?"uZFbnQzf1PWX㭹_큄H3+ϭer/Pa=.>YR%2[eu$A7z x-IXqON\yć՚yasuqnW_ź~cV[`ptTG&ˁ.CDZ_njI<"5Edp]{eJTP=6Tne_lg;\\"0.}rޫ} +Td[Fm2Q ohd) 9@56tҺx-dQL]b !gDkdGZ}&ϚT#e\!0qhV1a6<]9LԅV}iH-#oYp+ymjoTG5EfwP:TϥO&?3:n *VP~g~8P'}q 6<[bQVWnZgڨ(I9]ʬK_)enzwq$1Y L)(w`a~uB8~Of.w=X}`wp-)9*(4]ˆK񁞌fcqP0&TԀB!:,ԯdtKӡ42 _C+<}p endstream endobj 826 0 obj <> endobj 831 0 obj [816 0 R 823 0 R 824 0 R 830 0 R] endobj 816 0 obj <>>> endobj 823 0 obj <>>> endobj 824 0 obj <> >> endobj 830 0 obj <> >> endobj 828 0 obj <> endobj 113 0 obj <> endobj 117 0 obj <> endobj 829 0 obj <> endobj 825 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 834 0 obj <> stream xZˎ# WZW@wlUHJJe;L]*=(:BeNH+˳yYV:^7q}ރ.9 {ڠb^L&9lm᳻_W}=܉N'ӳ\ՑTNby )Ҹߏ7k;N^`~c˒o`|Dɒ7֟5[ZxZ>oņVxn@^MųbL⼂.Fd· -j`[7 g沗i[eAΨxƟО:h~⿾su.OU1*{oJW.URz892++!Цg-EDeCr[AF`eTDznȁၹ=D"JaF@'I &97ZekmLg [՞5Vi=qz4ߗe%v&QA8KnX٘y:)He:+cxlŷXo"ቆ:&ҚC`j:> ^ XKv'?{>Lꛆcq^)inO4~M&~[pp^ Y˹qG2?m433lY¹|NqUp'G B\؜q}Q/Y8vno9up q!E#q@ OCx9)%C5L\X\c v*Q1:UdBt'k& MuV lUpU)qC G<7\, bP2 gy"j-5?IZXM.dE ̳B(Sryi!lge G)?v}v.N?t;w걩 ޢۓy1-eRv&^#NWz`r7?aOAb%.KvUVD O "XF*eFۜ2ݘW%$d-Ryv)wZiҝ(IUUC.W@QmVڸbVP4¢w2Gm 3K9oƉɿaqtFCh^#[YAhϕ۫́ "HD|^)gu@Y@T%qYrhtrQV{佚8Ȍ \kY[O,;\RE3cAګ+z,d(& $QSU{^ \_`Dk4d]&d=(3?mfAf4 hU٘ˢp95Z%#V;Yq]8%o3c\AN֖9W(R4lׅ7Qj v8ڳf6(VVr%;5%&]$`%ϙ4&Z7ˁ?: endstream endobj 833 0 obj <> endobj 835 0 obj <> endobj 121 0 obj <> endobj 832 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 840 0 obj <> stream xڕYn37 )H"F]=hOAѾBq`8BRwE//zE/w41*9gbhF_cr.-wzӚF'^vt ;x;yb^,=m;u^/];h4}vE3^EmY4*Bs΍8k|[Pg ۮLúGX8Kl&m<䁈ueYX*Mġ$mF uj=TڤYhNشUw;Ħ梮2hӔ&A(Xfqe֕@`U $Uhr^֭~ReqRa}dWdbWBB$} m|\ZH" ՙA{4`T[;_ 7]l-֒IOѧ2~Lc3,;6ZsNҀf kȔ%}u9]C;qi#f FIy㮆jhL?cHSTxT6Pj2vsw2b^n&"ko¼ԫ(=NC\Be#>ڼPklR avsҔ%6tV仺g!$aZp8.y G #W8~ 7#ܾm& KUBWe|s \uլ*q! p*SXuȷ/8PF2. '?陘:}c)dkژF=t/kyuPh`'N7p%soU"3B$W!C @&QR֦7-Ѻ|ŊU}?^ { #2;5za4GkULk`bK^@{]3 beAƃHWd|R-h-qV0Q&P|#uB!,#/y΢XCuBuwWmqcUeBH_0&&Q 0AhNl+ ?5DYSȈJ5Ȼ!k~ ]ֶ_ǑCT ̤ v n5֣)#|@;\TtXӠ0N^B m$ʮV~/; 6)"_TpZQ>jwծ6$]|Ey/+26?> .Rtm> endobj 843 0 obj [836 0 R] endobj 837 0 obj <> stream x{TW=؝=gsIwQ'tH'i3( `:q+~ #D Vy 02FF!$@c#ad,lmHL'_UIBch?Gu>GUV`hll`I Vd2Ѳf4mR+ … $[R^'嶷,ٞRnUUE--)Wf ɖ[YYi`!+I),v3i6%_1KJ>zg_rg'_,kҮafUVm?x_7?|U͡G6,{zH즍o?P䷞}k1̀TV>}VXIg?WJqksq_OP 'mN-)89G 96{2tܹmE۩M*ewI>bb.f j4jjg3,e~h[+LY=TiLzdJ~?d+?e[ZLfdCo7?hKo6}-uvl*ٞU}CcC}c#f VTTTQ6fYcC/99s~ǙT[ {QqGŞUUƧldx_-^Ok2?yX3gk[$c/mmg!OȺŁ,˖/UPGV m.?|`Ol%k3ѥƎ%yx\6[LOȒPpφCkȵgS3PwdO @PY=Yq ѼC85]HJfT[SHgȧb}d_O*է鞎=E;( dajawpI)-O>i wO-E[#у;cB/m<'6~eѼ~jmx _'N40 JJJ{K5u_ys:MIJSkjl9w_Zuo$'Fv0{nCfD]Ʀw2}I]v+J3w{˳u>lim^<=I,M|;{PmPٚ Ҟ40 +Wm>9%庖V#Xm}[ksUyɌ'Mm`uW 1fS$%ZAqU}jlR{L"ᓺ6n0:['[VYC7ֱmsuڲ^4ٚ덦&?J*.t@'pwJJYT ‰V5Cq/2?/'lJ1^\4Ww[sI N%0?|R(.ݷ3A;ӎ74UpP@8Qq@H  y $@=vR_T*q 4r={ ܜ 982fgg8@h *  u>{! 8p dqАpO8ξK=mm$$'YO><0g릧C\E;SUu%HHHN}2y`nMKg5ZdKJU !!=h}2yl놀 UYNJWoܱnmHHHN}2yl놀NUSZ[[$謧s @ !^/2 Ag=dvҺ_f),2  tӹ?O릥s8 n\֝1՚za]`݅]) oD$UJcc8V)-\.@ 3.ueQF4OAnZ$D01=d]e?G+,)&XXwA+e{+dIu#8:9v:oLX-0A󴮈qtZשz6 T]! Jc^! I=n dj+ט!f}ah]>p5t qp"{Ö#j|Ց1i% a2QXw2>XHE"w&y]&p{,8 ;irwݦIq9vD~į3Q3 Qw7PQ]}8&2:w<ȼnHO^?3 ,iXXw86Yfw ݙvMy`w4`]X.օu/e Ag=X^ZnyGO-([DBT ùB:ܟϯUº ~ >_fu18vf9UUW$:'nKq=mt𑐐Dg=d) .X`].Kum۶mAz:a‘#GZ[[$謧sֽ/TVV~x}XPSS366z:ae]|9ේúa`݉SgxٔEbxЬJa&0FI\t\~׌e=[W&dX*D (nZ$bj]e?G+,3sPmr].k WN獉`ݹX7IǯeQ #XXR+`%l7$\(I:i$ %v"`wZ˸&| 0VL*z/$Iw1C̈3B`|e\$xDry/Be$.{V 篎I+QL c]R('Gu.](NRuN[ӛ͆<1;!5_nQBcZ 21&t%5y#Rj\^6UXd*xmƤjSI\ySSM3鍣贮A6-+5 "2.g?F)@!]' I:w6~j[݃)c'[c8Iz{# e=*&R&7gݠe\4O\G7܆݅cru&NSuFsd '-YۜfǺ~uӪ= 1m2zn-I{ߏi[wj.GrN/XnwӂOu|22Ǯujd"?zvqFy2uպ^I[ȨӂYwJ}b^X<;ۻi3v5*Imw_bv6iBXa\.SjTF+bYYZHUT9C1<;>>XI!kc"ؼ2ܼ.Snq\=ep֝uɻfX์ĪbEB@Pc= 1#%pbsʳ~3 v=<+00#=K) Kw֝/N!\d pzo01>=h0><<摃ˌf.6vV(H".(xX*,IJ$ԆIbXX9`ݿTƾ{_h4ϟ/°z:a]X* X ab]\qgee8@hqU1r[uۺ8L!Odf놠X7K;f`rW~9`ԒT A+. Kunٺ!hֽ)I+qCցoAn 8 U2uC {;Py~72-ZW $qXwf8|(Cl0#VL^F0&NCi't_X$VU/T/. Z"|mJtױ&<#S<ڔ>.Nc S~bk]K<֠a7DƤqZ!_6% ˇM|mщ%@{U~yxx8`8^*׬?eƙ;]+Xy_z')NӜR[sh%ֵEQtxo /L֥|VR[\~IJk)%\nMmSi42$GN-Oa[dg0U)RO杼Z*Ve@Kׯ_122¯jO,~󓂟8ʎ[)[/f=}w~u^4oϋ~so+ypŰn!.O ~ǯj/ v 7CFL҅4Zv0ȼn -d?r6J )Zu]{ځ3zn }Jgen Y7xȺy\.0xJb۩5ZS? _r;|?.T ZwqÆ_ʇ=ȺWJ(E1LL&a]ޓmW 2<,؇:ibG%$IB c >FE@n >B[K==u dj䎪$>$V/9J&F5fqFkJIp]ΝZkU1YZvQtshDm`ʛ|׺TScZ?Y)D Vd7o.{n{T|^krﺣ϶o2OI_n}c k W~M.Z uͱdҽHEzf^npgG$O-%jD\` ) fJv+vWcu',qt h9+h'[].i}ࡄk{{ vVA;M '-J޺w-ܤpϰ5X]%n֝~u:\в/i:z+TƱ}ި~z_ջZ~[zENI̟~#o^?WիIo{ ?W̺6M+ra'X2uȮ!]<YWf;NrоԢ)QfY 1'hl\Ou"0'gSl[ڴu.Yq9)'ʆ b|;b{犽3i.\uYW[UbmHf@5ie˶~aVP.kɑ}RNoV|*ٺS[yf@~O¿~oe+>_}yh䚷Y*:܅ JLDiѦ3`˩TR: Y7׺܊}߄$#& vdnGl5kݫC|]ȨwnVhҦc/'~m###$9&Tg xs^I"@ JP䱞!R!%Ȥib((w; ;ّn/N:ə a(>Xg]%kO}fq6kv]vm%R=f/nϜ9s9~oZ>09uTt ݓ6}˴mɒۅuX(x ëW CCChX,===$р]jݩHɮTmAeK6'!OeYN=ETM$H% BY;1>>>n-6/wf R'rC+aZ*,IJ$Ԇ .!nŰ}p֥yClº,~ u]Vfi]܇Ba]uvmntk@l~#x[ ~͛PXuƽƺlضmL&Ba]ulؿPXe8.nhHquua]XX.. º.օua]`]Xօu º. ua]XXօuu º.. `]`]Xօua] º. XXօuua]Xօua]`]X. º.uua]XXօu. º.. `]`]Xօu º. ].. ºօua]`]X. º. º.uua]XXօu. º.. `]`]Xօua] º. `]XXօuua]rA.Kº*ٺ!hօuXrW~9`ԒT A+. Kunٺ!hօuXpdf놠X`IXlvÛz͇9T A+. º>z*<<<0L!gnZua]u룣9FFFUr-kϧ5Qi[)[/~8S ׯm*mq7]"az2OIL V*ܸYa(i/ll$l%ʺ|+|jlؐQ>~mZZua]uf~͛wu&vvs1kQ3kg]U2uC tW~$YEJ|_V36,u}[SJM̾º,!ޜ㝛 }Һӵ{uj=º,nqxe2ctwyʹ mu2]shօuX֥#wT)N'ez#OXvllׄOpx|yjZ :V`]X%a]Rӭ.xV`]XXօuu|HWdf놠X`X[HnNOЭbº, ;9^'րFby)Sйqb.`6պ mpX`].`]us@[7==wMCA t<]g9X رclllbb}?qܾ}֭[T {+"T\gSV4.!H WXTPYAwDQRaV- !0L x`Ǻyɱd`U澎rQ1*Q/1@=YZ+H?*J/ueB2X*6$d6wHJb>az.V$6)8tI[g@NR6uue20Ccn`3C޸qJR1*تHw0R-0l} r*T(=ccMDi쾙loB6KX VL̕q(BӃ@i%:/V:uI&+`^ũjl6)] Uh V7`e!c4f7پ5j[8I7{b-&iT Qf=ӕʈ fFGg=z^IW^*Ǡs-淳C/\׳ŒJTr+uBg5[zy-AcH }yU0QCrnMif5 Tw#wd4͍1aSNJ)`A6ឦ: ;j 21) b'xrPNo $ODB @8YM6::z .?u$:4ź-6_ d[59I6U"VhYdpWR*O3ڝA$ƣKT]f* ApWLȁ3ρ$^u}|+=!ȳ:==u;떕Qdr|˘j PuݳH79y|C/VƯ ]FB#/_d4" w\ϖ5!$+n7wG$hӍ7t:T u'pOn $y>>rpzVfkݬ v7i2nQDa`m j]wrLm6NU\do]^!;Ӎbֵ% iaQ!ϿMg]}X-4rq0A.xuѣG) \DZQ2ZM'؟Ïq[UU֭[?Z/!jގݽncEZWz$]bӅ+ԫFcB^Po:.^)l{2 >CBA/_,27ӽ度+&%<@7pRke.Kq23''go'—9_xq͚59\q ?K!\o4ҹݽtbH'K.U5K6?KuXZ Zxu~&lvѨɱ[n]6ܼa=M5DGk]{}SgOy.ܿu:C뼧?{Ϝh82XD<`]BI___\\\QQQϹ###8 .ݺ5tVcO7?y=Ԏ~?Nq]]]%%%[l>}M-泶J.tN:Y&sm7<ml:y`+vfn|v̦Z|w4[+j劢?Xss  s Nڳgh<{dJII|<\%Tm3](m?CBO|*ִc%Ŀ`W^ϏȦZ䉔wh# ZyXO:~3gΟ;O"^(QUN$ti`ćё-~yto?r;t5ŋOzjj*潆ږ.K?Lx`h5u%kK&szJ%%Z`W^|go>B9cTe֎d|r ȧ֛̝+#KڦʺS5OV(vӈº Վ;)\pBoo/ҥK.ee}ai|㵭,Rkg쾴~yˬ Uoy֓l;ZOqfy.o;-2nTJjws|']wP}v;zN4X,*~xyAyJ/֕jȽS-˳Jeoa~YA}RIM5?e\+VNjK삺ʠj~6u5z"B#uTݿ[[ɊGp~hck?iӁƶoW/R?ps|væCMך6otu yP [C2?NmGwzN.讣4ta[%qHe$4o-*-:_9lWϯY+5uf~xtLg{/ޖU@=TTќu tN:|0OI_NqN}^6iqimc2̎ݴZ1v >^ 9ߞ\+)MftmnF5|FB{yxVkvv6O2 ]OR0ɊXYoRjԪkl&SUC+Lw~FV+6vގߖ }H9994X1qϡ* +9VګګkZ,-hR5MT&ku~ݪ1Oח6gIg~Mqh37|zL5+Lj[NV'2iD.o]Ųo߾z>FFF[##rUw>:"LPMTGu{`o@Ϳ@ɺ(O=\@R쭒ϯ#o?*ķ??3] RRRhDnKKKb9\2٬Qg:So6uRoҲ7yR?9=8/|0_SecU2U&>Z {j$L E  9{ݻZ#׃h8šgj[(2=s*75Ng ܳ3Q3Ta~W \kEm2g_znk--=K\fWlgZNj9r1Poq8h,4ʓٻi7XӶw5YζX[:<¦fKwdUY6R <"Tsm$7kJ[^#*9O~*iVO@w77Qo۬NQܞB#4Ÿ/~WEEE$+:gcú}lњOV~q!-w 'P E3'^Ok2=1>T9yW)i:?KXhD.꼉 FB39g:mmg/w]h`겵u(dIj_~drxaл w-;ӰOllOK+-[gkZfXhD.ŷfط_wϭ+ͫ+}r]2t][ClZoޒxi 7n򳱗/_ٴ%l9G5w_8g8wR3ʮI>}g+JމzKo(h,sԅu1tܹK"w$^ž={4{2@KKcn{aQJv^&>'L9̦+ [;w(c.!.N|+Wlnn&[vo?ϭVSR͝WFo\4:>qelR[3?u/8N2mee\._f{[oE+I>eIYdNСC[l?&&F=~Ro4XX,t8y:PoC'v?ܦtxkk+UNN;~PoC'v>`]P@_2nPo "۩q/I7k}8 [7==BC:u ioo߶mr322p@ ʥ ry:tB\ ,rˤ܃@Ǻ8>)))G!(8\2)ѣ8P2)WTX@h E endstream endobj 836 0 obj <>>> endobj 841 0 obj <> endobj 125 0 obj <> endobj 129 0 obj <> endobj 133 0 obj <> endobj 842 0 obj <> endobj 137 0 obj <> endobj 838 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/XObject<>/ProcSet[/PDF/Text/ImageC]>> endobj 849 0 obj <> stream xڭ[K W19X+zmOw%m%{H.QI$ETUhwJȏFyӷ?}oF˿LyF}E R}-w+ :}MY>wNo=rUǺoo6nߺ|@=J.RO8rʙq [+N%WMd[)H6ЦKϘ݃6}z5f\]v?ddA%`ySHJ6N5av=%m KOPlB1*3n%,A6&VLʢ!.iPfm"fSjf;8%M5nl۹;n!ckyRl,oONe6c*bS:Gݖmo.%)$ձU-_|Uz@o-0N3*Iε3[;sX?ڧnRȔN[ 2!)-䠢Nd#6]*d5oʒա\ OeUP?WQHԶ R6F,Mt،J OR:[۩#%0*ff7d^ K7G( ;NB\=b+Y߸P8Uo|j!u1^zOcRǠOV]4L]{|J3Ԗ34O&e.8YkL-3դ-=Y *deAm dɲT$TV6R zq̝3qo&\ T.pYx#$%rf'>iѬfP8e#K 1>)iL?QN$l~7EA/Z4fH &]jl\!m>boxU)B|{7A3:'.5dG*h ,`ߺ7VWfZ.$ Si P8 D[{,PT]RKޒ?=]QE L<5cS7e2 kGB|EG76>_|* ^$U" CXqro*}Mj v9Т $nCWKuci*|̚GS5E NvPa/li-! DC+lAո3W$r0&I|nmtǝ¯-KS{nb]J#xB!^Gk50"A}-Rw-;Hc;2Љe|2?,/[eL9H3aanryŊ,gzk|J"&u"o':uzR0םI'A pt""d:'{P67wt20D"pOʓq&T481*c"vJirTyTI1g~? |$,W{:J7?RSv4ZI$]k-")N$i6c ;WFVƀ}X ծZxIF2ɘVԫGLE bQE\WqK~:8΍Fv] |Z%;e6e6nrau^J8cV'u-H$T4NCpZieoN(>*ᇄ:Kr-5nRqSmأm|-~a - E܈:$YxdˈKN=x[h1 Ѥ Q*(*(W•in z.ֳrGP]کXzcGl+QlENqKp y}~'ή꺱e3Ynx~Ze}8{*rFk~T~/\&z\WeBaW x!tr=lrs>q/bjM^.&%K6{`LV W,dL t U" ?׊Pcf7串;&ꓦɩLti̓ |M9smou)9.3]aC(>P5A l6_P%E5\la7p8YS֍wjEȗe@ESf_[Utf?`<YɰNc(:_yJ#g9홫xU Di}xdVйPBv*Qm]yuY.I.lc u -̞u@,& SsʼpZA[b9>jkzYo| L$@rp591 f52>~U^1I`buȖ]3+k$F85x\Q5Lp@VDjr/f&ۈ.29Q%RSE-O <`%av;"Z"RL`Uv]LS:|c7[߱2vfaW$l?(꫄]|2yiʜx=1G 1^#SkrEW$Y,,e?&~3Vel#MC@rF ^ۥ?{Q Eo}W}{ysqfPLkm苛> gPW.8Pe,y9O% 0Mۜ{oۿۧ: Ad%<7>h*puvQ)ԉPui͖Z> endobj 854 0 obj [844 0 R 846 0 R 845 0 R] endobj 844 0 obj <>>> endobj 846 0 obj <>>> endobj 845 0 obj <> >> endobj 850 0 obj <> endobj 141 0 obj <> endobj 145 0 obj <> endobj 852 0 obj <> endobj 853 0 obj <> endobj 847 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 858 0 obj <> stream xڵZɎ#W[ٮ`N6a|;HFA&MQ{,{_o ,l\Oe",KpVߗۗqKko-TmJj ˯R+RZ#or >^}\ޕ< lye-}vbHMٲ)[* #E~,~L%ކ˻J"6e˻1=?ziwGϲA%&;[bJaANuw>bbP!#^:!Y|a Os]U*SMl=UuV󩤇#ΛƐ[9!u^v}lpZQ/OUNsAؠa?HfΈ^ g1⒒"IIC|VBfG$bkqC_kah\ T;^ᝇg2 &æL_ ;Oh'z4l:}GV{W\~24HޥE A5gwGq(#"ͨf+i@ w8{Mk,x)|IՂY =ә??KZG!Oag6o5PfK,8c8{NNQLw7㺈Ӗ|d%Qwur6 *qL XOcگk{uTAţ:FMHٳm~ڿale&M^x+ax<ȅߍֈu6SU1m+%@@z5L=?Rt h)g3f5B̀_+=g4agLFY {OpKaʯɑ!ٚ=MaPοiDZ YG܍ 8Vhd4 ȶb=: |-k;3윙 -]"wә& 5RގK2}k旇V`سJXۀ5_sNœ (A|66}gS:'PѵQS19jR Qz>BS~+O*~64<}@$i2cinƨ\I@$FV*~N㐏+ᯱh7f]FTDW݊;Va dϭjX%ӤoPWKqщ'+(2+'q1B k'*VJ\LxVJod}>5 6<3jA*Ϩ[Ψњ-*[VK_̒_1QXja]L%d.pSP^Q]{4yʼn]GܩXcc[ݜDtaa_DcNQ$m\A)2^@ꃄp Cu%nBB$"ܤRfS'P6F*YXX_FgCmikwBWʉN㯇YW$ď P@&ԍA.L[6iIC7Xܸ%{_pӠ;:(Uz'sy'Y#20 mmz\X[ΞRi MWz*^\śB]omxxY^֮~^4+Ӕl[ ،=3JΕ_/duaү҄ʝw(<' O z;fs9&ٳ_eںw*PɽN(&<zyy`2ZEp;ƛwXrynex3PaXam䯠us endstream endobj 857 0 obj <> endobj 861 0 obj [855 0 R] endobj 855 0 obj <>>> endobj 859 0 obj <> endobj 860 0 obj <> endobj 149 0 obj <> endobj 856 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 864 0 obj <> stream xZM6W!936n-i(%)ɴ\im4>μ62tY)kϢ+>=\~<]-d.WFG+>ܿ_qZ{g!&% POz}ЃeCvj\oxZ 냶A ZBۧÛGt+T ^ўD7c{cݝ@D1"pG^4"EXlɌ}w=}ܵj1I5oqh<i|)$Oꗣ[$(86$PaWDGbŮ pmgD4O D'pօx]Vccf-@3Ea=P7<mԇpp5,Bdz4HXR}2.+D4|.N F`DTGQ%)) :$[*K*K\ j.-.Q49.źoDJ[|QW u$Ejm?yn˒17Y2¹$Dd:h+4"&)e 5Gv@=żN[6 d/y;AozWRWҋsp2+e3cgh!Wt ȅ[}.+ +Uc1 /  h/qE ЍY聽W0%9_Xù+kG$h'sg*@Dn ގU'*>:YGc"<CA 0*)V2&O CЮL Ќ? 0ia ;4i3%Q7?EQG'- QR$h3{C\Osނ~zLL>]i>QkMU[=[:YF;e7emavUfo%k_ %_Q8{Ӝuœy ^ޥw *䎢^K'# * 7;JWI[VŕQ"yᯔ6^imi͞HH[yYڰC6c#m-m5i[.m68҅+)"yk6~hy|!c9u%O2Osކ67>#bo*a~3eLwŒte74zI? [b#;7l6zf׷P3Xcvuv7lavUfC8mYoF1[tVK)Z6Ҳ *Yb#l;PK3H܁VxCyгnMEUvVU;ޱ.b+W naTa0 ^m͞XffColvMN^$%o9= 7_ytЂX9iOٲo:b ڱ)\9}8g4[G# ִ Q+f(C1ʰ5J#"r Cb] P8J?amɏa"k,Nk1bͣΑC!:cq<}KPO\ΏP$3Qn >uئն}_N%fHjC endstream endobj 863 0 obj <> endobj 865 0 obj <> endobj 866 0 obj <> endobj 862 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 869 0 obj <> stream xZɎ#7 WZZÀgs߂\S-$Ed{ Nu$HOO_>>};8.>:E@>EK鏳j tyXyݿ\/o.庲wpFdJ}L[DZW(xAC|X!=iD @*WQ#*.}̰(,֐Mf(nv5FXVO<5v_x*%@-Bɵ󓻜)04Q8\V? $՝(fÁ:fHNldj>Y=¹L:1lB\ϴn#ͺ07ewq~q,vPQ\R^Yo(D82fyo6>)~Q B([٠kgh ʹV#[LyO_03t`AOL!y@Ƚ(7u5S3J`S:lv?;;w|G;x|{mW~?IYI?jƪv+h7KFu;3 *q*}]^g`%5%}eT3%+f_`zFdn1e+}S7% #xy*$/oU66C\(> endobj 870 0 obj <> endobj 871 0 obj <> endobj 872 0 obj <> endobj 873 0 obj <> endobj 874 0 obj <> endobj 875 0 obj <> endobj 876 0 obj <> endobj 877 0 obj <> endobj 878 0 obj <> endobj 879 0 obj <> endobj 880 0 obj <> endobj 881 0 obj <> endobj 882 0 obj <> endobj 883 0 obj <> endobj 884 0 obj <> endobj 885 0 obj <> endobj 867 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 889 0 obj <> stream xYn6+)U\@=@oA)!EX=ZT˫W e`dd_(OGSx@3og[>o;_CmES#<'9rr+piG1Efyο<Ev}lyNJ{6rj0VA &٪$VR45)5ςCxSZV$tpqvN$Pf\UZENed_,94;ݭdq(?OM-\]ɖjP:=[Oe^ b߇U8ȹ)3ʎIsl+ g =%˱!Ij,bפlgn΋ /@ $p,QL:.)dL-B;˕W?A2Z3hwܜ$67e(% Qm4PUU޴PBooʋ ՈjW@s>nH)ڪ^.ljUEڃw,*R}IhWRȪ 4jh٣+BZǰћ5McYxK_;e.nj~ԵuԑsH9 U>d[oިŽ'՛2[82[7ܞ/><; ԩeib97} lg gƦcְ;w`xm=r^RŞX^ endstream endobj 888 0 obj <> endobj 890 0 obj <> endobj 891 0 obj <> endobj 892 0 obj <> endobj 893 0 obj <> endobj 894 0 obj <> endobj 895 0 obj <> endobj 896 0 obj <> endobj 897 0 obj <> endobj 898 0 obj <> endobj 899 0 obj <> endobj 900 0 obj <> endobj 901 0 obj <> endobj 902 0 obj <> endobj 903 0 obj <> endobj 904 0 obj <> endobj 905 0 obj <> endobj 906 0 obj <> endobj 907 0 obj <> endobj 908 0 obj <> endobj 909 0 obj <> endobj 910 0 obj <> endobj 911 0 obj <> endobj 912 0 obj <> endobj 913 0 obj <> endobj 914 0 obj <> endobj 915 0 obj <> endobj 916 0 obj <> endobj 917 0 obj <> endobj 918 0 obj <> endobj 919 0 obj <> endobj 920 0 obj <> endobj 887 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 924 0 obj <> stream x$-߯زDR/`@Nȉ?$Rꞁ78jJ%Q|?2_F{X%|b6%`0.x31_"bqXHG1xmS=3!Nqs )'Ȇ|CO؁6gA:^\bz/nu]XoL}I[i:P{SFc>OˣemTc^WG W*Wl1&^觃etW- ,j'yW係cj`CASpM:> WޠSW܅+,]|LaX ,C10yߨ8fj*x4APhBce&$48 xy!v~ޝ3˚Cؼ7]@HˬbEaZU:a1ZdIP&Qn/._BO&;PZE"ʰ͛B}WIJU2汈]LͩT(Y 9ܭ)dw"cɾ}1@߃J+'XJR|4&t%O#EV|ǣ;u# "nMU o`wq(aG"hG̣ >UXHTUeQkx55 ׮-rtNn ⳳ7) '|jG[DXV #̵p^4*6m_vUL QN{fU,olѺX:i IXҥBG)wJ+w1+/%3 QyU.ug}QJWkLH]̩S.t8^m: #fEW3/wђP.V6._~`8dOǁN: t@IB:ꀗZM`AeQ~P2HF|RDl'¯D+3#&)< КEY/-.=}>W2go= *Ѻֲi g#IǾ&SSkԌ6nNd\6;f0TkwjγxFqKNy)+2%T^̨4N*rRbP䪸~6Re!: /܂:/S_tN3`*k5󱭄l:%W{QSF.m~ LBxx-?^ffk>e=넟kt[Cq{ zSeYQC ڌH.Uc7ǧ|Lhw +8e:iW62pQOL/'}MILG ~h\a n=N\t+82!a+I\ #,_6ha#(Mae}w^Ғt ŌTY(F1K9 8d*K]PGr;kAwUk}RՆ@Xf5#&1IZE:*M+8oZaF;k iҴ4N)q [2"|i 1~imi z|58nQi71"c-Wཏ":VugMlvׄz&?s{O0z]~ `m=jBa_v*JfoCJB::NiF2/]ؚQUWdz-$H5쾠hthP e6/:d8!']7i ~f6-sՇh7J˱&GBVG>fii^O Lmiinr@ @(,Q jEFYzn:R"n:rJpJ j$Tz`h_MA1N߾й^l.,2kA ںGs- cIIJw78NZ͛+p-%yG9̖+{vC#H?̆p endstream endobj 923 0 obj <> endobj 951 0 obj [921 0 R] endobj 921 0 obj <>>> endobj 925 0 obj <> endobj 926 0 obj <> endobj 927 0 obj <> endobj 928 0 obj <> endobj 929 0 obj <> endobj 930 0 obj <> endobj 931 0 obj <> endobj 932 0 obj <> endobj 933 0 obj <> endobj 934 0 obj <> endobj 935 0 obj <> endobj 936 0 obj <> endobj 937 0 obj <> endobj 938 0 obj <> endobj 939 0 obj <> endobj 940 0 obj <> endobj 941 0 obj <> endobj 942 0 obj <> endobj 943 0 obj <> endobj 944 0 obj <> endobj 945 0 obj <> endobj 946 0 obj <> endobj 947 0 obj <> endobj 948 0 obj <> endobj 949 0 obj <> endobj 950 0 obj <> endobj 922 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 954 0 obj <> stream xXn6 +ѕ%00:vߖLڛ޶&d=CR<]~[U%䅕W˚d?X H*H3_]gZYuJ/Az:u:tBj__~zjJjyYEBU`jahjSG j%\j;0j]aLwitu*}ϸ fhԦWmOS\ 5.xd 4^:*T"Խ_wvd}.ߪzʪ'LG-Yɏx.lJP$bbC70M:B4ktm*EA+z}D=@ -zn5E F}̸lBhX۪Ck[|lMv`AH5p>>pDa[Rڠ =?b1G˨XgYs?tQsp& l*#5߮*qaFBSioT9((' g ȩ~WNV}7cN <ŞXRx(e25M b;5mRlm:rVc V՝O%ppIt{kf]6;)AaȐ4˪/]AB&)SC_L_a:yXj8aa!/'vU_ pGE b06tqd_.<|!~M& 9~zq.~GރhMRw }UMLcӐ˧!"vזwO>ߡ޸ o!.mtpj %yu8|ّLJeL(ܩ2I܇RaIҡ8W=`q endstream endobj 953 0 obj <> endobj 955 0 obj <> endobj 956 0 obj <> endobj 957 0 obj <> endobj 958 0 obj <> endobj 959 0 obj <> endobj 960 0 obj <> endobj 961 0 obj <> endobj 962 0 obj <> endobj 963 0 obj <> endobj 964 0 obj <> endobj 965 0 obj <> endobj 966 0 obj <> endobj 967 0 obj <> endobj 968 0 obj <> endobj 969 0 obj <> endobj 970 0 obj <> endobj 971 0 obj <> endobj 972 0 obj <> endobj 973 0 obj <> endobj 974 0 obj <> endobj 975 0 obj <> endobj 976 0 obj <> endobj 977 0 obj <> endobj 978 0 obj <> endobj 979 0 obj <> endobj 980 0 obj <> endobj 981 0 obj <> endobj 982 0 obj <> endobj 983 0 obj <> endobj 984 0 obj <> endobj 985 0 obj <> endobj 986 0 obj <> endobj 987 0 obj <> endobj 988 0 obj <> endobj 989 0 obj <> endobj 990 0 obj <> endobj 991 0 obj <> endobj 992 0 obj <> endobj 993 0 obj <> endobj 994 0 obj <> endobj 995 0 obj <> endobj 996 0 obj <> endobj 952 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 1003 0 obj <> stream xڭY, +*J m`3ۓ7a'MIRUu,FoO^OoE7C^bRT0q_~?hE)m׷?}|TqNt%XlZ>,|hmϴ/E@~Pf [Pkpⵞ-ۣO $ܖ2nioĶɾ8s U0#)>Gb.38uXUˬF!KSa+7@ǧ`Ra&L/awO|rʙx̣"" #9yUej^ğ 8zhg"3uc3$MD~ `z2cAaIf_`v$k̺3+zQb΅6u2뻼*W6U76 <Jq] D \8c!ɚovG?[Hy~uIu+v_A0^8IzQT\g7++Q|{(Ĵih~[8z 9ƹzã%"vt_A8%A2HHa#sR;D]haڮm(gKSĠ61-ɕ!rAsvڬ%C=oz.]hwZÕ=piD,#P:1&ՄԑU@5%ZA[ͦM:#{%2 ~.Ps#`#Bt,E ͅQ2&J > tBGBN @iE!XE%L ګhF ꢔ;cJrՔ@ʧ^Ws=MhJD徦IW]':%W|'nSD# fx]!j:"EZ6QbJVu$9(j/HE;-)j;~~o YP)hcXp A"{iGY*:OUN(ꬉ:sHQ!UXLu'9uTD3Kz.ˣEu"[Kbk;͜gHcMy/>wS~]7 'g[zK1uIpkW_Mq#sO?j9K :`bL mK<w)M~5ŒUaWBo]-C>iS~C#Waiy‹Jw͊y4B;ax[=z*֪q&ipόƍNj6|lɰarxô(%W|91[Q>'j7:={ʄDZP JpE?H򊞤HW>+]TI\tHƑWYzv Q3-;V;(q,1Ra).& @q aebKlAV^L@-kaP$0J/1 0~`*P4[Xո擫4,N9Hsk,f1kEiC\{&3Z+/eLuP"JE69qmASBcqMVnc9F# endstream endobj 1002 0 obj <> endobj 1016 0 obj [997 0 R 998 0 R] endobj 997 0 obj <>>> endobj 998 0 obj <>>> endobj 1004 0 obj <> endobj 1005 0 obj <> endobj 1006 0 obj <> endobj 1007 0 obj <> endobj 1008 0 obj <> endobj 1009 0 obj <> endobj 1010 0 obj <> endobj 1011 0 obj <> endobj 1012 0 obj <> endobj 1013 0 obj <> endobj 1014 0 obj <> endobj 1015 0 obj <> endobj 1001 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 1021 0 obj <> stream x[ˎ\ WXD4(2.6Y&^(]ݪnA0S{%Jb˿/z_h.FF ʹt xoZZ?O?@qZ6u>(?<![>F]="Z<àSF >i[ggssph=Xt`]Յ>|/aZ\,ߗ;9 Qp\N`v6,)ԅlȧS?VGƦs~/C3#׭\z!eOU*fM q%e[,ZSݪæ1ob'>5й IRDzZxggXr{h7eLxv^_Y'|L*h$.rkؔBkF̪8lWgE7pa#6Ξ6*t^i:_;Wxz׵jyYܚl8[e[0 ԃHZݻp& pW#|S[aSnH:O@sd^yt%\lL*}6=on9~QUhO܉ZT1"tINח;UE6 gQNxui6AqRybn8-s('5POV6?sӗ;Îd*R݇g*@\g7Pp͘?)abUոeFAVo,N3KK0ׂ@ '#ˈ3 L7+3 ` _%l3H+gs31bhL&}9tRe‘s2%&6@yw0'W>&ͺ0~"SşL< ;)O8IܺeQAXGE9gI_&߻[_];\BKbp}5VJpv7Rbw;}{r6jjwFYMœgƞf|k7굱 \[,;u1{p3UJ&EZ=]%{z ά{O)೔(TȀT3 |1#mڐ:C L;V>qlȹ0 )iaahE(1^˻D֖(h z(+Aq<cww!VLIMF5Mdi`3*3'C^z(JJ[є["c7@5+}Hf%ŤukNJ{Y}3T6mC )(2:'vpezVS"B`R(݀U./q.wͷ#>/既3noVW1߇N5Nӵ=n`N6/Ǔ=:/S)BcT>p#REvNމKJwhoLZhpaO7QxbFp>8"F% 3.VʩNK\R\`vSgjޟf(~+w;W,oMJȡ&ki'뽸Pu0Lu{|`!`IqVwt~|*^;f%d?A}$?Dj؈KƋd(=v"C}_dwb{-HU>Kȷ=1D ɛ[Ƽ«W9_/}$34}~vym]E][a˜Itk19waOߊ^:Dfv{aL!JuQY (whߢ`|ByWSr΃8]{9P)C]`%ftܞCkbE؝v|+4&ɴ65rLaֱ|V85Uk w*2q\^L7x 5 k%zt)fDCV;hK9 dIN6I-7N!'vLf٘%2i ,P~³RYOCb3SѱehlMh({rvs4ӕv& endstream endobj 1020 0 obj <> endobj 1023 0 obj [999 0 R 1000 0 R 1017 0 R] endobj 999 0 obj <>>> endobj 1000 0 obj <>>> endobj 1017 0 obj <>>> endobj 1022 0 obj <> endobj 153 0 obj <> endobj 157 0 obj <> endobj 161 0 obj <> endobj 1019 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 1026 0 obj <> stream xڽˎ+r?pPh8RU6ExEAӶgDG>P7/˯?4}}x1Zm:|b7T{ xv[Z{K-}mǽڐ{ݙv;Gn|iyk+aEm0CB {5}'W1#QwUvFxd%r4a(lP;3)5V,RI~_b.[ܔG2:3fSу6ȼ}rBb4 &pU_(ҲD+%h .)Үbt 5H6bҩ(ahMiQN)D J7-XYn\GdpB{^ʍ~> _cͼpg(L7):}F݂vFPnV<[7y+uЇ>BO6U('KvZ;Wxmv10t q.Mj'tBj>\d_aM"j蚴DZi"lġ蛺#JK鯵(W6B*n_P5 ˡ]ƨ umUT 9MtQy K$G *O퐤)%qڳ,i__|+St#M3O+2 ;g'BLkZj_%lN&<p>ŵZsF ? >7W&($U~OmUM71Eiu؁я k! }#[]NnBPU `IR-T1B& v0GӦ-TX'3U~zpo h->;&u,]*̢f;dv>jnV켣OzB4W.7 <9\j@YsZZ$V ="3VZq 8Ecn{?;8VX$@cekJSy"\!!dBHNr:e0/?2$qVh"Fd|6PWKC.q!&ֽN^`OkheKK|U(eqv NA6j3c2Q"hI g770<-$z@8Y8UV=y'G64Y\X1s'/x냲q _Wʥ?Bh|8QD6#?2lȍx|)4x( u]c8 EǷD'4'GFؾ-ibP&Krs/>Geώ<]&edHد8*9̦o=pŪ ?gg3V11_h&<ϳ%d4D.|r \|]AG:W_u)7TC/jg_84zd(V] \o]yY: oji8˫((NiJd*j?#5 hp&l;;AөJ76^>ǫ߶: |[q jưX^ 8\a&/zϨӵobٕٽ˯0Osj':Mʆ?&A`&Jtn*g7 ⩜{/.[[*gS=ޛkԧOtK^ UZH_%UppK _%n3un+o*FEe|OfOZ1iT"_?e:<ls%myM5ѧ}x_ -e?6Dжj`pʹ(%ԕ endstream endobj 1025 0 obj <> endobj 1028 0 obj [1018 0 R] endobj 1018 0 obj <>>> endobj 1027 0 obj <> endobj 165 0 obj <> endobj 169 0 obj <> endobj 1024 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 1036 0 obj <> stream xZn, +F`h.wYMlr&J"ݹ`PӮ*yQ&j.K2,׏L2 ;Ih<>)a'rJ,=i&y?*m̸5(L!M8y 8tz\6k˚Γhw?DhCxXy9ӜOٓmP_@ ssO'A96O4fso!bs=w>-ؘRB Jx*eq7ðsx_|ժdeݾjYL"<9|`O4<WL;D 5vѠ0MQU/ 'fz* -d{dc~D3g^vn7XztaՕ&3^q |⎤A  {|dJ-`&|en^4j (fa}"rIe*i}rv檫󗽣j{]' ^A` 7ρ]"FA(x޸{[yb97ojY0Ȍ)O >w+@q)XT]Zyq&".GA )OG> 2nQo[ٓHYm8@ =K+Q`t*]n3W Vi` г+摷uk o  Ru-@ԍUґu,*N%qnйX}%h=C;է&kD:eێ :F/h yIOYV؊<)JptD@IbMZ"UHuo=֥oQڔ[76#GXcS`!heiXtg,L_B5k<0]R$.DK#Z@`A H kJ5 R6u<⩲;]O0B 9@>k[r`ViV2Ҙkg"I&T]T~dzw6~#QFoggT wVSt\9='{JiaVUNJ]a}1yOe8"(鏋O\x;!Q lRgAٝ~a<[ZǫAL\ν&[Oaj~~&*Ee~)鸰d)Rbz(NoɊs3#'٬7z 5{-?>}D'\TJU!|C):6 aҩfL{a"c'ԦaҝdB.oK/ @΄tٚ*r{O6Nk?d+F-ww9gd׺0NftFi *QmF [&)#t!!x1 ݏ~:k _bn.,}EvYKP3IJ>`4 d92!pj0^VQHΝ Z+ߒD39Վ;DCKđXy>Z]H0FGC =U%Z񠜮ߢRPўd=}<a& endstream endobj 1035 0 obj <> endobj 1040 0 obj [1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R] endobj 1029 0 obj <>>> endobj 1030 0 obj <>>> endobj 1031 0 obj <>>> endobj 1032 0 obj <>>> endobj 1033 0 obj <> >> endobj 1037 0 obj <> endobj 173 0 obj <> endobj 177 0 obj <> endobj 1038 0 obj <> endobj 1039 0 obj <> endobj 1034 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 1047 0 obj <> stream xڵZK# $R/р$s[i9$PT*b౫֧//z~dJ~dhD\: b&4,Y 0 |ɒ|DHG6Xl Ehkml>.N%MRvHakRCނALJ˨c8",2-#u W,tg+S`$\|t' zaĞ=k\&l|AM9%S0'weR&&bpFd`Ikg_X9߰peFp-8]EwA N1`k7S$wG [h!4ƃR灩fξk9 0.Sa#+KVmqA[LQer쎜<_yOj𤺕:oI'JlwOL(,tϋ[ XnQ|N܎oҳ^._!B#[fC[v#7,Aq{6o叾5QycNA77\}(ǧe53eД ֍v !Ռ/&̰DQ9$w̵,fu܉Y뙘Ӗ>ׄuy>*yᒻup1yxoдą"6 S /vt-;ݣ:K.xOLKVz߀;.Ts,=&elG%C};@~K/^־튧 L11Q%l5ajBmg1) Z 0gIkuCG/ӚIk-*'I$>Io 7E+FU4I>]Y6iC5ޮpK6x}P쪡rj`jm(-=0 qf7<菤!*4\ ߩw~KpY@ǜokBOkfXA+zHFp*44ԜUc3SK3p{/;cuOfk}ص'Egc~]@mY>ayz En^hk:r˗9C_[7UiT6Uݾ1ӝqRoH8o;Yo0珗0IT 94 a7H2' hH}_1ݎbwWB/@98~:~ô.g\Wb,G^aQʶ3x0@e:EuJRTr\޹f?0tZ9 @8T+? endstream endobj 1046 0 obj <> endobj 1051 0 obj [1043 0 R 1049 0 R 1044 0 R] endobj 1043 0 obj <> >> endobj 1049 0 obj <> >> endobj 1044 0 obj <>>> endobj 1048 0 obj <> endobj 181 0 obj <> endobj 185 0 obj <> endobj 189 0 obj <> endobj 1050 0 obj <> endobj 1045 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 1058 0 obj <> stream xڭZn$7 W" hh9䚜h!%Jn;.-%R#)}/o.FMϿ/&./^jNkξͧV~|ۅVGkX)؏ܚƤowkLQ/}a8x$[鷾km; e9AK "*pZ7ށ\"4HgWαݝN9*/Ϲp=*<*·m7.U}/L PEBqlɫ4eJXtbVW_Iwޥ!78%GvѮQs;a 1v|̙+طוgõ$U'j7'ʵ;7*Ƅ {?KR[ q\1U+6.\ΕVBrA<";D>]fm*ݺ|ׁ.i)/T)w3d6,7e uE+2;œ8bܵyHxk` D iEL+t}c!?`U9nWjC˵ӴZ%(@ϔ [Np6+g@2"_ܺuA)le+–%⤏Dے!+v@OHhBՈk0wkCZק"pA߰^x(+*Py_ӰEYs+Ӭ F8վ!+1 XLB|g+ 1OTq` :^gxtpJH#squ˛Z9 k&F;0{_;g ݊7 tD}Lhj3{SK)Wh68OJޫ9 ":](9@Qu-cL6\֋/^毰'`⃏ W9PrT5-HU6DK좶8Z,yuG]/i>?GlaEB՞?`(Rr@φ۫6ݳ]uK0ku&=DVbr)up*u|`߫čx;YZ%98Vn#!_a.(j =\t~` @@QSnFZTܞoR7cʧ恾ݔfGx QjY@bɉƧ-0&Qtq "@mn&LQ݃2a"/@![\VP|dLЩOkY/D ]sn)xb K՘"%uA6# GkH-'b*-S-;OThEv "F@mJ*gޤ!.1(y?/܅m*tPT pXbX܌:H1m:IͳXyb.XXm,{Cd0KѰ[a{95}s)`Zʭ0 ku稌gYqS t%o\t|drE0z^'w!*ofuفd=ʚ*E17 :oj\)nS5as9XULԭMl;^=!O=djnQ4 H3jhzC F eskٯ ;f.=ʉ彙I[4#gH~QD`儸znwU{ZP=P[OQ5^m$uN&UK'> cRkqzwPcN%-!T( Mg`),@?t.fD@Q0x<)Fuc9ģ%dw$o߱nf ]IY7kA(,5A]@ScJ O#H{ٍW[/W`J6k$Qt`)eL!sϦ!4IL Rwh 2vF^0ܲdګzphH `+Y2$ZV]eZ0ɷT8u% 2V'lΜޟG~0%#aG[wzTeyv6nҏtW~wIj3#0T[n\1g'W +2 ?-["ߔxG<acr\l\7f(gU6^[:RMSIKEbY3& B0qlxXqքB<qJt|awY ȑ@KtG~#ts23oNoImiOzP ûJcic0,K?yȊ^K[}ߔ0[\~uqE#coutN>}^ٖ5{wj⽀*}c̙̙ᗽ/<7 ;A0Bq /%&#F]QXi٫`Յd = \L f~oTGW][S'C={قtCtfNV^ qPFg'Xb ]ܛ0-|VׇKKq@TqOSkaHl^}>#C6o}7su9;4\9DKOYA0~{9h+]+Qpc`iDq mbt+jGXYlٗv)9-;颶f9?!/ endstream endobj 1057 0 obj <> endobj 1059 0 obj <> endobj 1060 0 obj <> endobj 1061 0 obj <> endobj 1056 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 1 0 obj <<>> endobj 2 0 obj <<>> endobj 3 0 obj << /pgfprgb [/Pattern /DeviceRGB] >> endobj 1066 0 obj <> stream xZ͎$'S *zʒoW};걬=F9]I&A~D)O9/|{RRDN>)|"ANN_O?J FJuk._Dί z'JJ/=~6'$j /"4^{ㇲKڀ.Qº,jY[+@mx69xAWR2gVyk,/FkU8^$lMDͽBN#\l(6X؄HQ߷ j\P `4.&‚DyLi{jK9ZT;)Z)օH]QE1.;fv׽Fv}-QovnaF^H}т0C.0nhM{d!dѦ:Ő>Cci;bn6#\%o$_}/ȭrk'c0cY4وD)^\HkCّ<̴v~3gq]]xz5QF ʗ74 ][wV!Q}R$.Źl.+њ@a!&3edd%L@t*}^x>`a#buA_+ E ]pSt3ZE= +sEtW372ҝj3.Mlpr6`^@V}Uzg vLXo= z3B`U6<⸺ѥq]{H'鼉iY,Tv:&Y6 ͣFZ?9SF]v$G0ffqfik($BÜ4BCEʺl`(1:y/xW[4 #䴩dߘ =:4 > 0pt?0[k9irKȼ>r.~} a)wI̯Bp<1cKe=)S૷"{F#<&kU*&bVrӌ5;)-Lmx!JS =.'. m'àK, QFvpx)[M"$ǰयa e/[^M\1IjK0L^hGheS1`*z%Ag"pX J eбxeU9k ӚmNBu#Y)[Vn؛HB֘ŕ \U8n썺Kɑ^ZNwf&Om:q;7wTj3Ŕ*מz`x>n#+m d!i[ &)Yu`mwҶhP+%ݴr fL!j XMa&ݴzx+e+(mqX|:ѱ[+*6K(+dobv:569Рr̔⽦fϩkUuўY(qղn^ I7WJVr˦u82!_I{JeO9')M֔׺a8(/Jtam:r#a39cTƁqa5 1:ia%` O̽S[ϤÑ[SvlK^]߶yjs Ɖc'+dH Nwl 1WO+D2`tX"Ṗ ӡYi/R!+V%onQHBo"ZI> ~N8DKi32=x̳qӏ!X2쌎E58д>!lK*bʺȖ%Gr%F [5akݶۊٮlGV<]--c[J$$ooѩÈzMU,;`0a%&;W0JߺK`!-;Bh9RtZF:s$p#IO|}=fE>%1)=itj g߁h)~% rƕ'4N{2o Z`;z̢Uoa>ixoU,8.5s*s}^u-[1Xjy(}e6"[ӱ~Hpdl$-}rg]r[(!T\8 8c߾۩ϤZ~Q=+vNr6\ygi붂m;SN-S%cǛD`H$elZvŝ-4׀1˜`m>c endstream endobj 1065 0 obj <> endobj 1072 0 obj [1052 0 R 1054 0 R 1062 0 R 1053 0 R 1055 0 R 1063 0 R] endobj 1052 0 obj <>>> endobj 1054 0 obj <>>> endobj 1062 0 obj <>>> endobj 1053 0 obj <> >> endobj 1055 0 obj <> >> endobj 1063 0 obj <> >> endobj 1067 0 obj <> endobj 193 0 obj <> endobj 1068 0 obj <> endobj 1069 0 obj <> endobj 1070 0 obj <> endobj 1064 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 1075 0 obj <> stream xڅ 0 Dw9YRlCP:{+]۩VАM ,IKzahc&FGA)GJYrRvGs/.W_׽5O~ ?$1uv}Nd}vOhB,Ut]I endstream endobj 1074 0 obj <> endobj 1076 0 obj <> endobj 1073 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font<>/ProcSet[/PDF/Text]>> endobj 1042 0 obj [1074 0 R/Fit] endobj 1041 0 obj [1074 0 R/Fit] endobj 1078 0 obj [544.9] endobj 1080 0 obj [644.7] endobj 1082 0 obj [531.3] endobj 1083 0 obj [706.2] endobj 1084 0 obj [569.4] endobj 1085 0 obj [41[525]46[525 525 525]53[525]64[525]66[525]68[525]70[525 525 525 525 525]77[525 525 525 525 525]83[525 525 525 525]] endobj 1086 0 obj <> stream xc`8 endstream endobj 1087 0 obj <> stream xuW TW*21ZԪVQ|tVԀBB! &@DBHHxV|GjԖn[{7˞Iڳ9sLxY׭{lھM#ʗsEY+ssa(g?Gǃzrӏ %pnϛ?vSAЧLh4!g$S)"I8W8fE5RIH+JLQFEȄ-i^d\M&*8q r#rX@rbG% FubxBl%&ۉ> d4Qԩmbov;z,%D,ԝ0"/l=ʚ<Rc ڸ|ހgl"L r#P6~(` `55:$i]ՙWUI N!G0@A2~Kj җ_dcA2,*+z]UB3^,B2EŦ^uL U sMh5p︒zieA!ꆔ+*~כd V6;XYhڝZg6(Jk3ֱԝI((ϼO0Uי ŠPaHO9"G"r/Th0/P0SV ͂-Ft'L''JP .|fdWI4MyPf 8֜BV!OBv=CA9.-j51cIa@FSq_c hpzz& "ߜ?X@dSi0 |skKQ Nk#@X]̆k@3?1CY>b W}| l$qXT;=$J v^OL&KؠRc?`TXI$b t 4ԉED~>!)xEh6b{74aLCriG:|h [aSEѤt`^2GVGQ7ri<( 8{#TT.(+pm!Q`Y#JZ3粷CN/£ed <??Og4W.6)4HXٯ0YLGűAX y ZH65:[[G>'Al>?_Y`y@ߐi?\>5b[;qr/cL=8s8rE~xT5(n{x{KPdASMet?]enu'n6T鬪H676daSaza434K| %# @bBg;rɽrEIRw\[o075_y-h>͙ٙolؓY,Ƽ!:x )w|Jpη^MB qBuNgH3>he2Pj;"7ԃH >Lg(^Pon,yP3JHI M ?R^:stOES_&Ni-6g•**Y^ڔVm->9,d~-3NepC>zX=#u&O K]V!9]Ʈt jD]}` yܪ"Hhd ƳuJu1g3\'‡?oϿ]!VT2 DWt㡟jtzh:qDQnpl~ |x%Zcu g°܋q (t`КG:{">ډW|[0%7SJ\"f9Pˌb.ؤ- SY?Z0pܥ.cA̎+2ǺQ 5PϠ.P1!4kS F*lIOA*6nMCR}Zs'LP_.QqH\zdk*#~͋P*oĕ(&eEKtv ZZHj' R9ŽVU8TMcQA;t l4 0 BF uNUjI% &}rJXDR&m}4zOjrRhbgiU TfU=&J y+]2q)kIvXWɍS,ڋ^x & _ omSTr.yE qZp*sحo`aXQ9sVɻVzZS[*kO7f21`.O6p113BQ[.XuW+vs{*,6,K0?;t~_7FGƿł_8z Y9 }`8j MqN3 endstream endobj 1088 0 obj <> endobj 1089 0 obj <> stream xڅRj0}WLkmK0Ҁa&-o4 b2K~uSX66g朙#n^7єF7TF%BAiVU+Ay0\Iv9fxxj9߷kaPG3uu0Gl@ % ³sոH| ~/$gðsI̜ěSg^7>y$^kZM߶Gt{;f؅Pqt=ok@qL3űkk$-aWIPyPzlfԿE}@S/BqQ,GaUk1}ڬ<e@iؒya]d6K>.x9VNo C%8 endstream endobj 393 0 obj <> endobj 1090 0 obj <>>> endobj 1091 0 obj [14[525]66[525]68[525 525 525 525 525 525 525]76[525 525 525 525 525 525]83[525 525 525]88[525]] endobj 1092 0 obj <> stream xc`bw} endstream endobj 1093 0 obj <> stream x}V PSW!$\)Jvjw}acZ@_* HBHBBLȫRbyY0mζǮNg{b;'ݙٜ39hb%nZb_>mKqPV](,X\/'{pbx1a XᤨLvh[?G?x ŊLEOhfG͡b]3/!1Wd3əBQava.~K, II+D⤭ RҤqn,PBLya7S+Ujj JޡQ F*DmPiv6Ŋ}z2ޡ Yﱾʌz^=Qrr1/)ӧXbg{N`yٹɇY2n`%(=Gc#;hjGg9h βɔUZTmw>c]KLZAqXhz t4̻G-@9f;\FYk(R[&PCMJaw *B^WlpunfX  5܌Wq;x 'q$Pl;gIvAF ط^=`Mj]QK@Cm]kx"OX^8loF4kAo2TJCPZ7m'Fp:9I|ybnHu} 8E͢55Qsᘔ~fM#A@k;fgQhZy@ /|[[F7`.P]ЖSt'48 'Z l0>zn[i ]OB;GF[U x[kkxkX:taln6AsCfN%%A+}_j &-@gvTMTd|:. %ޒPw,;جv[ ? i'ҧLJWA мI<GY|)8 euJpMeym n.)dry$k|uo70kYa:$IS6d —ה3Ԗ;뻺544/ DEjۋ+M\ ;2˴:-j 9pOݐ)Epӭ=h @Թt7Tli(c)3kAK@ hi|DHC0P6H"D#-|MEQ luڪǡ|Z_T`Kߡo/"ngܥdr,3d Aj{h?ΘmeH 2ާЗc{-|E2TAUpYhUCԤb:7{u+w;wߦ-jRU2}u뙁 v0t~}]sO{= +=F3[oQyTàމX #Ha-C(a?=hǤAN^8ד1 3W V]Y/[r&np*lNń38dUAhVJE­nt-XQ_:HUe"0XGs߿q@_x6-ì6. yMV7sĽ=.ԇ0YGGkAyījjFp U2u'մVh93rrvzA1 wChWxT4:`}ٳ rzN@g0hMzbŅƆoԯÉ^3.-͛-EQfbF< RȫTDZ)#Qz§h2ChOg6k.Z^ 2zsGqG\20hu ={\Dte{?'J?ZP$yWQL=h~ ֽ~\D{(? G?<1W9v mc)Uzx3.  ZU-cմ pFȴI/^k "FdUZc=R߄Et|~6n.ifٓn|oxu5⦸bbaVz"6 endstream endobj 1094 0 obj <> endobj 1095 0 obj <> stream xڅRn0+$8yPJP$ Tʡ@>^%bG!T*ɱvwv<;vf &B0FJ׆c0}K4 Tv(Pj+-t,S8SX lQ ğ-~/=eEd6?JDs+u+ 74jmE.1Wb ?m³bR s ;?sD^8|TY,2lRroچ Lb1'X2k)nᙂzX^̡KRK].Zڇa endstream endobj 351 0 obj <> endobj 1096 0 obj <>>> endobj 1098 0 obj [833.1] endobj 1100 0 obj [220.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 477.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 555.4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 888.7] endobj 1101 0 obj [14[358]48[766]66[511]68[460 511 460 306 460]74[306]78[817 562 511 511]83[421 408 332 536 460]] endobj 1102 0 obj <> stream xc`bQ4 endstream endobj 1103 0 obj <> stream xڭW PUC,*1?i뮭VyIB rx$#%m"-غV)V[W;:vioݛ:n2|2 W<11^d\+o^a},r|"@'p_!,!_.qw/pQbz&dL-*Ŋ|q(HF6GbӤ2(K!%d=xYX[$߹G2dr }(>hV|#h ["W(ɬea121`ML 1Llfpߒc|p{?w*P 'GUW4'vC .nJtEn#mݸtn~wp ]nBɫ8fsr/Z UV;jz 5t,TF0Vj+;Pף<~'X' +>8 g\4Ad/{%WX4C'?Op&ȯlrh}$)P۷ 6 ^"X5=i;<ޯ<qyP vA Hz^:dB3ëmvh+!$ pNS %Ƀdp&E^HJsEe9J"qbDA=VXp h4kpbrR˟85v@%KJ|$|ΧEE~ YChg j|5kwLiU6*4{4<փe , % X< )l.f0d>\ihdT5:WZȮV( w -vM^`kAFE},_4E+U;G7nyW* g$#dѪϽ'<CN'R>+VI22`/h!Ŀjs>Pڲ-d ;pzppQGF 4iI4'%Vu.9v^˿MkEShӰJyL?O~M`aiJwGLx]%)|(=}xyҸ h(;<{7o zEZ)!*PМ`\8kj>y{}@<2)@mR)2ɫ,7WY-0~gq׵Y Pl> [)2ie)& ?ɍ)d&C+1te}r/|7W|Y(좽w['p qI--wI^,B6TX*!|?p u7wJbu2 gds>#F V~9E]ǍXƞ~[m͠*ԁ/qJXH-X#Mؚ2! glA$ZPf]pT-N=hB]u֎&t/Y=ǁ#^@ݲ/cc!5[*)Nv*9.u T L3*-K2:x :dtC"uV%\J|[ ]*VAvI0i]Ъ٩3@֫:ǣg!{@7ٲ"V{8=;{l ˂Mo8tlNGm0 m3^;2s9葮}_sx4}p= N_ߝt##=9K,c,Tm͗'Se@ s^|/RPRM493jРm}v EE;2zhzKxO\AYP jj[WL*hBIUX8x5n=ټWoI=z&sk` <6-}$iiN.oI<ī@ s\lPq2dWQZLPzdόH?>˛F$[cVg>8 rW@|C(`WgAk-+k]CADjɼDD ӽv4չ[P?},{>|;/}k8A$9]_PH5dw>V.hwYj,6f ſ= )H endstream endobj 1104 0 obj <> endobj 1105 0 obj <> stream x}RMO0W JU`UR@EJԞt-5v8{vS$Tf'W*zzQ~;z0KݱdТ`m4tQ.K%5Ku{ nn_V-mQMT yj&x-^jM$TxVb[w'9鄝S ?o'7\{msߩ[sYf R{^Hj:9 1?u0kds2A.hjG6' + J|ajל)./|gi(.}6{3?2Fb6^Fl]V> iCDtwg` /{\ wM]bj endstream endobj 247 0 obj <> endobj 1106 0 obj <>>> endobj 1107 0 obj [2[525 525]5[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]29[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]60[525 525 525]64[525]66[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]150[525]232[525]522[525]] endobj 1108 0 obj <> stream x3 `  v endstream endobj 1109 0 obj <> stream xڵzw\SRT8A[u]֪uT*Zn^afaHa8pՅ5ֶb犿>$/纮9TޔÛ W\vnWE{ʤ>aq+yȿ ߤ(^Z F+߶}q% n;y.5a'|) -engx϶E\3(0,tʠO/`PROA>e=]VEuuz{n rT_HB9Q@ʙSR,5L RQSoR%\ap-mj5ECKPcqx=j5DMPSitj5E}HͦP󨏩j!ZLRRK(7j)ZNVRՔ;ZKS&ʃLS{P67QzRŔա:xVAqoU1e@az>}H*:Lb}m7>ɎJ+|4`8/v>!~CW/Ae 1q!;|79ז:zo|7p34Ireyػî 7km7ُ}%w +|9`.\9+CCR$#b`'xMU2qB]T u#yB%}]~ Z1G|9jQl^i\t K& uNeǔJ҇tJ$^j窪vg|A`׺TMtd=2YhK4IJ4$4<,&HkwkeTArHґo¡>k?1(brR !d Bry9{-WZYe n!t9͡  !6_ӉC 0j''0)8Y0 xׅ!$][^ei:&%PtThWH!TP] jsdŒ*eara/ڜ^P A\Bd@gLS5䄦Vi4|%ϋ/HNת1d߬PjuP<.C Z8't5yFo c2et%!cxR q"_@܈# [z{w߼=,ϳF%3b6ħ&E t3;CⳢL*w5Z}NY,!途x l( slTQ|1W 9\?wffkr JELJC059% 9fo}C>%~+.I/{yr<GZ~ydyǕCWpN`:I)eOY}XiIJoA}L P" j6?EPE2>%sښt&FAMrTYXJ(+;^R%*2o Hr[|"|à[ĉ5cNSX7qK)H.:z ܁6dX~U !KI\qp۲6 l8o-8\ز?jk: "`BJCW2/-+p‹XpiWXǘb(-,_rvr,++[ " cЛ2[f=Y\EYrI_ݐC|FRpAt(d $&A:|W,J)B8|݂*)N~ƁGٿ7lVl gp*D/2W'!(J@W];G~0 4' #~&8 {M}C+0;7}5&<ŒD=wt{tDzrŭ5 qw~Pˆ)))JbBKdU}mWl_rg6}2wK\aG̜UiӵJ|;EXϙ[ZH߽JMi2,!@z1rݣpYc\zr6,d*+3˂ |Ҍ柚qAభ),B'2]\4Abg x4R8} $/M*שDH]yC8` O `79t3=Vlٸm[#l&se@=K*xpOo d[K?,53pu(Yr X E4%hqc<~;03?iے=p!LOhm| t$xn/m:Y,N2@^rlOxWT\ѯ_|z)-n{a?VܓZh/ăxI/&v+0"qG\ge#@#.'nZ..q۷SjEŕ]]})\2l*M& Õm:rBWүgl2 'VuΚ;Lڼq#Lձ" %T*!SpUBW{E LP EJKxyQ-n,;hu(EʛE]vΞAp4ЌA?NwY~5D-txf):'H99ڻ51Zl%lH)oJzʓBO0+)PȨcQM=oz].Irfh濺Tj RӸ=MX] VObVvOúQk0~Wlf00Sڞv:Q-f<ǒC`t%exEq&s\ZJт:{V6X n0?auʐIL1DIgld0-.Dp qùHB^~VW\S/BbVr&k'osG[FcLLQ >OS0! Hu0phGhE<F?m۽nM3 Gklo9Gڵ "PyR=xGOmdxD3: Q˹ 7͛2f<|evaжWo?K(J.2e\ƹLOM(%'SnRy0F}͍CB,#oL E? ?/Uj/nН$xXtm!hߚm[:Kˠ_^zq*nh]ko|u\8=,9vҾ(HNSD]ķ9'b~`$m,? "ƌ"%w7Z\9Js߶7V3so=YGb+:uq:Fj{ Ŧ@7MG;A:Hy{y5"-+*sgM53ةϖֻ4DX[l"0 dXPB|!#~ڔP2@h2 5yܸ7ڤhQW)P3rE0r]MydjIWmaĿ4{nq0ʶ}"Bc! \~tH`mMAIn}8nӆByΖQQs>?s/çNb5ǚJWZӺO f͸~|sɦ epmq=WO~><|"#\*iofo;ZY[:3ݕ,2cYjv~ueXy}OȅbnjJ7N8IX_VF) ,~#€utFt]'ͰtTyٸ"|a3 {@ޘMΝxiaevJIj~HPm$vǀ#I\qJTn+À *%{|K4$pы,"m ɥXBop`^Igg:g=qf,Ua?'}١Z@y(ӌrϵ=FXҧ;h& q[蘚;[GHL-w 5ad斘+Tf"kMIE25eyl(K(DI FXGN@Zw4`ԅ|oODB'.Uƨ` l<ܝwI5Tw(HaP௽8@U4sJ}jܑ=Vu O 2LS~Ӝ?' @p\ItPAtF4pWz Y9P*JQ!8xc8Clϙg1TF)m4ɨ(eƣeQt!.6G97ZEk7S?]9asZIDx FBpIDWa\"*/eWg2.K@C*"2Es74&VkPUyex8Qc^u*"ui]Yi Z>bd"~qJLKK=aSWuJg]qNm{A<_(j$m\l\P&`yllz +Fp(RTOdV]ЌS3 2sujJNE&N~խɻL<RFs_-Դi"8D+T!!Dn< U˫kB!AaAn$5Lsk$}VPa|o=BH+m).*T؞@)bb$v8 p,ܳ. pJI߯b6dG”̂\(a A?ps=^:7)k{jZ* y8M"߃h{}j~g _Z endstream endobj 1110 0 obj <> endobj 1111 0 obj <> stream xڍRMk0WLZv>-||hlՑ&YA,Yfɿ_i7P{x73o5zؖы4&Ovؚ VUF]ڽ!Ji [kDƫb]h=IX&-xG+7~?V9Oݹ{ξ?)pm~s-W ,xX㨴Wp{$";K.Ѱb?Y^H#߭D zb5(,@U5B(?Urז[a8pKFbTmO"OPo糾pSOaB!M2J%>9d&4yÊ>P-)9{r 3;sB9͏Fڐ:%ß2VtzWk/4 Unu@9 P endstream endobj 238 0 obj <> endobj 1112 0 obj <>>> endobj 1113 0 obj [9[388 388 500 778 277 333 278 500 500 500 500 500 500 500 500 500 500 500 277 278 778]31[778]34[750 708 722 763 680 652 784 750 361 513 777 625 916 750 777 680 777 736 555 722 750 750 1027 750 750 611]64[778]66[500 555 444 555 444 305 500 555 277 305 527 277 833 555 500 555 527 391 394 388 555 527 722 527 527 444]164[500 500]167[444]208[764]288[555]639[333]1608[500 1000]1611[278 278]1621[500 834]2174[580]2181[302]2231[583 555 555 833]] endobj 1114 0 obj <> stream xc xd" `)L,o<H ) endstream endobj 1115 0 obj <> stream xڵz|SewJ897 ERxR2DLe=EmӦiƕiӴ;mґNeJ)"({=W9}]k8w999\4{̕#f.\'|B3UGzF;@A•K=_t~+!^>s7Gn3j13CGlvu9'm(%!|CVq <$/06?3;$t }Q>nb;u ZvQC: !zNY[􂨏E$DE/^"'/zU$&($z]4X4D4T4L4\4B4RhhhhM8[ IɢEfff} -#+'/Z Z(Z$Z,Z"Z*Z&Z.Z!Z)Z%Z-Z#Z+Z'Z/ 'nI9U(^Gb`&ѦnEVcnnӺޭB&]F#qijY{ LA=?'~纞{Uƹާ_x>S/~K2e|]꿭ӫ>Vrw3nqn'Pʁ=땃ː[C>ۆ6 4L>p#FzcSOzrEI1SW %T2Ozf ‹Z/p0Τ }ll(aN޷Y ҍ F0>%/; A9`og*H-a"$UJWgpI,=`1|  ,ƽ *P/ hbCq@|L% %1 AأN8#~L a5va;yٞˁ%sZkߕ&IcԘ! 83"a9(+=r WtDē{L^%1^Ar. Q Ńb;$"]YDx\"ĤS! 9cV'W829G͙ SoH44HC Cbp c`ҙe,$B*%dm4}uԓ:V*)rvk:, +!'bF0?dJ5J5M9}ٳa3/:dEb ^$E'IĹ/>dw=-a^>H928 GWlPbZTX`b˂6 Kl)NADgp'yY1V;jc4Ic@I+M: rc5 r[Hnqtѣ.-pQ+BLZP{T\12Rܩ#aω3a~sy  rvN)+H {ކwW,Dd("(nb1dm.M;mSJMlݹ ;߹#_,6I3Ÿc#O]F7)5SL [IcVg`S:e{s1֌ڷH&&+:+\d.*Bp%7ÒYJHQ)ը]XAIVC@7cd CV90PJgA"=H2=%C OUg$)J)J)VF+cRbR JREr~cSk~Ъ!6fQo~"8L`j'PrzE {`IbHT ar4jUZ"2k!hrqՇY. 'x }TO9|5  )Y}5 ʵw ,\5(e,mqh V~Ө9VO$'}$5r|;ֱ5f MX5D";r5t:ƕp6ep2*rFz o{6\.΍ũNd:'rd~ NKLwlv;v3^]*@=%Hȭc-;&&o]`[O?{3݆UXNP-m'~˸$F|< J7}9X_ m gD7F|>KiJ<#kkNqb2`T<2L oOyGvNHZow@ pcT`V0N=7d_t?^vCI+N?G:9#]Zow5];?jҵ6ûό]irataQ;Hk}-1G6܏pb_-◰; ]0|/o^|wTCCcfop9YIs%߅tOzCfY{|[ ;j?(Oqf׊n|uqkuBr^bկS)`4g#{K~yd 4chxV)0]j,"!HIj ߻ 8!;='Wy])MK$5eEr [iViVXgS†P9O%|&%GۿX)Ƀb]TA j/2Q'lN?mB3E<<ÛA[<2A"^28dB#+_\Gig:5nyH7OaqO,_W8>+å6qBjU/po+_is9_;؄GЎ6s@]FeV|W!O=U+=<`FEso⾀G>sO?pŹz=<1s0% 0%X@:z$ ͍kW!I*PQSoTR2&ҫMshaBՇ.ƕVV$"3'B0L5:欮^gQR!5N/TS ocMwR=Jx|^ `D8AD--鐽vHo5Q+T;fGazh@dt[\o6s6J|g3׺mO&8Qv &3ƤɅ0L;o2;+ ;P XjvkՕvԨ*Do#yAyȀ*M0Pݐj_@gީsBHOExCƘbL`fz.“y~=]]cԒ m.p~%늷B 4J^->ѥk3NÒ{GC !D> ̙`|Ook8QsF}\9͈,cz&eװ/~(ڨ C3^kaW66"~UVVݬ۠ zFk7YMU "!S d43Ӻ+#<㯙A z_ ,bBQjQ L"iLBtF:N _gS %Cؗ| dצɾ좬|4|x22!ڕ 1rPɤT M*s]Oب4 5Pp` dq&(xO(ŔDYHh/4'iLF P(0'cv¤*@'h0Z4 $[dJSRd }uYasV mEӷEHH.lTc٥*V>746ZNlTg(,:/'f`6o}55 д-ͮep#gnĭkSal'Y#;9\tCF9u;ʩyuyMk?#W%0Nֻ͆ ͰJ|KF匐yIDGye 5ޟjGwYgUQTA}j _ku?!w]+3~C8K8bURXz$gI@6TSZP+QSw B@ST&[2K 7sB҇ Oc>cFW$nJ,0x7> w65[;_9k0ӕɠ\_g3V0P]peRd7A)M0#psz5QbCV(`/`t8vݹ¢-p'l-^ }q${eC6!)Ÿc+?'ͽ·wUJKB0.1ќtD{1/fljGY*֮i?ZݻsҾ?N ~>rw8'=CF ^,vc7ϥQ0rҋw@9p!a4gulXg^piZ U[[Kxx(su@rZm1q d*RW) Qs) i_:e19d(.X!T/.4$TS( 88Hؔ󄀋Ij 6Q{^xxjVp G۷GoWOWӳ7 #Fz tYWדO\} ?D{g q*#Fc);1E 'Nw,ǑKv^e{R:(Mky{I!nd8eGCzLVP83~S|OIwJQ1OkR]d8^INN0RZh˩fߜ::t*נPRs`}96"H/v ;EEta^}e8TzӌwgɥʮxK}@}J5SЩ(C'&i)jOlZ>s`9燔GUU/a&BxMM.=#4 ]V.+6iceכRBzMTq,w<|;=w)गtҏ@ \"mMrF]3 EUSM׺7d8;1[QyXFcP֐! 3&[9i7;fho4et3 DxLF!-r!=+݂UZ"#H8E6#JѪ :1Qv2.(xn$x4~sBc hrv!?3RѐAG+:;聯3-:(jEd 1:k,}mZ"CR#9:AbjDn6`j6k-&UvPf OFb&MH/VaπRS)4i˄R2qZY?ЧC"7^&e{ Ǫ VZxtUHZLΝƼ掣JmP]eH<*њ!Th)?0)ɀus 6C.^׼'7K۠KtSї"lS_ wGx?9χ  Q]~m:mZLtDڢM4 iXGxxU" zL#l|dɏJ  6թɆO;d tU|T綹$Lր|O&+#8JeSUcQj%@{1)wПGkۏfCYhI^^pa(4<*ë\C^k1nFhcNɟV+F.[{1؅*[ݻ-\K[?4n\HYo_"Nu*&?)LЫuŏ$Pai)ْyirba V)ԥWXtMPzXޞe2'9l@N!I۸H3dAP3pdaIоa*PMXu"RZ,^WAov9f; '7q_F@ט@{[SpY04ImˡД|{5{yٴ2,m'3Lk %~it6SkΫj3xo—x1VtT|WWxv**DH2A[h;3UqS'n—[R'2Y5e}a> *C^x& m ᜏ/9_Fِko`똹?[xაi_>Ӆ⾡v[ל'Ǖb q^_tCh+n3ܲ=̢ǽ*- 4)\cJS$,Sr G86O[)%X~@f}&d"IW֭U(0n2ν+٘oݻ44s$R@y#%ˠK8v^v'^r=itNvj]IȬ=ٝy#\]/ 'aYlk^ywj5"q~W*l*uz1=vK\z.k>'t(5O/Q+q@IF^zO2swqHOGh5ٚ$UQXqliYQ{[B·gMz'HNS ; ;Hk@bPW 2ěʟQh)rqRƂ_CB{Q "RK<}`gxS\4D&]r[N0} x~,XgĝۉB/h@)_ڣ]x{SC n/--ͫ>e"7քn/ }K.ݯ8[dVF TtkYr |_Dܟw5} EY8ȐSBk{, ݳGfρ5ԳmFʔeѳ [xb endstream endobj 1116 0 obj <> endobj 1117 0 obj <> stream x}Q0EvcHù˽"<):SY9hiɏ]앳=UfΙLVmym@ ; rSefVËIުr0f=OJ\G æw?W,|AוoBkp1Kc&ƞMt_ꝉWι1Jfm{ǼwHvBdGLpW-$,oVUX0oooDxZufӧ&#vq'ILlz+`n|+Mn;8:`>iaaVB%BY-6IP[> endobj 1118 0 obj <>>> endobj 1119 0 obj [14[367 305 550 550 550 550 550 550 550 550 550 550 550]34[733 733 703 794 642 611]41[794 325]45[580 978 794 794 703]51[703 611 733 764 733 1039 733]66[525 561 489 561 511 336 550 561 255]76[530 255 866 561 550 561 561 372 422 404 561 500 744 500 500]1901[586]] endobj 1120 0 obj <> stream xc`>0 w9 endstream endobj 1121 0 obj <> stream x}yxW8F3Ę@B`Ɣ%,%BH@!۸ %7,˖,m ne1lp H !%l{?#4sɇ1y|+:56'nN$qO% 'x#xL1 &+&2 h \dJ+d8BxjĈQ XUƜY fy-1!=:E8!*%:#p7cR7Fo ILPRk^sz.Ө{4NƟ< `g2ǘǙdf 3yyLgff2f,3yY<ϼ,a^c2˘י f%Ĭf0o0k7uzflf0[mv.ޗz^,|>[ͨ7roN5 g6GW%׷g:kR.kil609O'sR皵n*[+KNB_r%3]xMY'i9˧UT u଱"|.pge@<r81O?ڐ<|yXd!>\\9zp$4e_ Q'8(l72#—,6<9]5%u;95@DT$酌 4n-acjD|E8knqhtYq?{r#%l-ZH~ga%5 }ys7vjKP &3h䂗JfRP,NΖlm]!F * QXO㮜}L%/G'\}O$x!9|.` sEPs)ons*<"O,׹D_P[`E m\BI\]xF,_.Qt$P2P~IzN3oxSX#}[V> N|,9񈰟*OwT$Y#z.s{I3%e!7,(r+q^%n)|P&vg]F[4!<ox&.6TޭQ2-εB+X-UzlՀ>{צ !Tnޥ/͇B0uq[ PA\ӾŁx9M~/";~CmM-*.|{!C3 \\wp 5Fd&8("-4<+i[,ZGaU_(\Xb^pbـrQw{n`&JTJgAP'& 6وv7 X;4K֢5!)(̕;P I_*M-z]5|Kkϟ&<wz} WU}s %|< )oؿ›|X>kr#چ7NAɺ)@' |xG@_9ׯUV^= Ћ>|'2w|E 1煗Nޏnf%з uɟ_Zn|SMg&hb Hy7G Үxhו X /7敄|ؑ'~7`.¢Ws_?ra.SyY:{~Dq9kmY zwD)6k>hjd3!鹪k)h 6rպdDv Rr8 u|ww]'U\!J5qk}|CsH&}H>Mwpzjj)Rz:;׾ H,nPDT$\gd͓[2 i9iaC|WLS7ʻdk|+xy>+#2TxnE>?QNI^bUjim+jSc0^eSN\ "|`5GD7$dtrA_% +pcbjk _Z<ɧ zr"ZUR@+ [X: Db 25 [PSʄ{A?BӻeUgD.MHCF`u:a{,ub1נs,(/!O?w(ٚAw8ã}SLt4UW}&S ,j,c :9th8Sv ös26 sK&WWo4h4d獼̦T9 lFD㍤טӭ\% 7 **pV7Y\1BcC HVՖSh6R".{>mc'l, jxkx%%!dBl%{hI&6XȪ鴆%Vtᑴ\F#Zւ \#Zxoa F7MKcS8Fg"V;CZH-Di*/Tr7p^k&,`ZH& Ϳw~>ݒ|X8C[kWPǑ4eKd7)=[<T8>vp] Eh/a$7*w粧O_3MfAªx!LAZvjQ3XDzւm6{ 5ͤp$cN"7EٺurCQ9 s޶Jo\V >H- 'Gqح};D &:5_g Ѡֆ4R^mon/y ޮc @g֜: }6^E(S-݅l%WK@6I֤YAh- BM"c 2/Wd^fMjtvx&\P tE쳘[@+ ʁV<_~lO—p@m%Rfg:Uhguꨬ~ VPuV/C%ȞF[? ӹ2qc?JKr`qPF\Xv?g\Rbyك}|=6Fʁw}2^G>푔VaGVt*f^WVdT:٫&.kp7u}#uT:&E'*RQeAs|K۶W_B0hA8~3hjܡ9OW|& lM:.25x&K]n Vjb<נ+$$]F+)l2`!MQ{0G6FMx^ al&tq!wň KQR _Gf/iwSdUܕ3/N.6 9O#9*[eq>*GEYF`akh͗sU 4ض1K>Udd;2h2LhDRO9,(*[m߱w4s"?4F2߷^.(bO(rhGF* ?,YP toE"CC2Kʫ(.t=KFMz6klނ"Xy2P-c5CT:^y^Rtx,b/sx%bX<9# X=W iܔ{-PGQ;ןj!a *B0"%^%'SkưRBQ~Oy\[A#?NZOh%;̒-8ů/7PYlR??<g)m~d?%h endstream endobj 1122 0 obj <> endobj 1123 0 obj <> stream xڅR0+@줛v MٲHTKF${[̛FO}ٗѓ4Gް3mT-r#u(QNֈ{oЪ#ry8MI+~DbAJ6,#d՟&PnSF?Br9'Y˭iOv,B![S <WAugs<%3iV~Y&\~ `Eԃ0sa& > endobj 1124 0 obj <>>> endobj 1125 0 obj [9[447 447]13[319]15[319]17[575 575 575 575]25[575]27[319]33[894 869]36[830]39[723]44[901]47[900 863 786]55[869 1188]66[559 638 511 638 527 351 575 638 319]76[606 319 958 638 575 638]83[473 453 447 638]88[830 606 606]167[511]1493[319]2113[639]] endobj 1126 0 obj <> stream xcH<`(`d 9* endstream endobj 1127 0 obj <> stream xڝX TW֮tWFM5bbL&nD4qWTPZEv7l j\1d'fAMbѹG{vxw?pu*PKF]o}~Y쳌c~HOTX XOQ*Ib⧲݆^,B=22؉o߼Sog)nEҷpv9b2AXR!|tqĕ̋"k`g[:}?IR%sj+-AWWk)}h]d]B*!Pϡ#qj!@E;b`4B:]Y[Uv߼]=-4AyŒJdFzHR Rr<@^ظ#8p@'DWD}' hdUփNN=jc6c܃FL^M3C3t*TQ;W :cv=xaσsLv qJ )M쏑aԩ*Wse`1QkG?Oᄞtp! pM!zO/d\F^pA#Fh@9䴥i_{>#9koMn<%ߣ V+a)Юt_ΑWDpn<݊{qjժף W^{BȔFqŵ 0}259b?j kij-%XV>H41 c1hHaCpB?FIp>֜WS\OPN70KMI7)-ױN// kh'2 Uk x{CD,v[s,;pVv.DD[4xs ofl:}C^!)UWJ‘_BK{N7|gIv]-'{Z}w$/=%6YWZ%;VY}?>P5@s\@/yVɒ Y\q"$xsLFOq1qd>?Xql"+BDty Kd7+SZpdο{tHBo5;KB+&4∅ ޹^o:Nj%fSE'Fn57q8m߬a)|;#.4v= tL=˓k̄BFaGL%SDܢnjDi+q_(St9RY[~*KY;͸8 æ8!10y\7j4pނ̇菷 ΀-}X ZV t!0Rsn=NJJ3ֈZ*+ED'+qvC8A{(a)]"hRwa%(uZ| DƴGC ~ImQ|eݶ*/яT˳`Iӥ@ p5P<v+3r Q#,cMT6ЉEP5G3LyznPA.^Z E?3@K"3x0~ ]p:Vq&9b4A%R>nr'T 5۩V.TWOqM+yS=OTT؇X K^,[E?'jo~sup2yvQf5ʨߌކ0Moe }QAoWy(g@BpJFHv|fJ @f~Qݤ6Ww%&s\Aќ3|(>R BC2Gzw ~fZ3vN ɓ~ܔf/Fmula-@/6!/>bgeGÎ BJD:PG3ȌMDغƦ.ŖMBஷ.QeI! S8^a&-&j) 75/1BzBLJNV(8># ЉFv9ՃE<7o*3M=vwd DpMr>qOTֵ6T#9?rSNLFu8 Gw1BE~7!S|R kchZ<H%\ %"=9]!q?;bpra 7dl沨1\E^v6N>\M_0WDwMQudGqLF'gJFA!ۼ=մ\ӌoO`&v?-)t! iޛVQ#8)*N i׶ n-]A-X0jU㦮ڎ3c żrfd(.i:yBh5OB;+MY|Ȣݟj,#Sc![{kOϢ%raRVIvXqV|Zۇahop״Tun)jūQfA8t?ؙy$;diC d8wќp s3Ѿ*DW[[RV]׺CH~g KV,26/+kK'hA\-pfեXaF=[3q~.'P۷x55C9fٴBQ q7]2pPoeQ6aKETаP>r|0 6rFJ6xjkkD|(&AWJ#ÿtC?1&xGUl+| Vjd4/7ۢh{.Bפ\)ۜLJCV 6Tfsߑꥰ58JALתM,]D,LŴttɮuđLp\>H "0AI?;20)6_kT>F]`>c4 N$yDm-WӰ6۾x:"[HFX04g`ik~RIYs xPNbL9}qjM z trޔ/mp tmPb(4Πǚ z2l Eq!Ǽ!q{(0JSdWF%]>/] ֜bKN`$O5c4غecF~Hx:k30h  QA+SL̪bh# ʉ4sz 8ZKC7na{XB ))Uv 2c,~ ZRAԌ|B7,t1+:rS:CC)4D64T_]|l^GTSh&Z^Z,) v5B M$3\!K)H-yr_՞d{iQ7/umOhPWI}Hy[m2uV!{W#|-KSlOY^i&Y.of߳?|]}UhĤamuh'a5¬eEiWˎҧNt'\XD f@@> endobj 1129 0 obj <> stream x}S]0|Wr\GBr$zI+K 2_{.R)vvƞ)wr]3{ZYC  iN)2(f6?o;vq7J;jnFr=1\js^9K7 Y[LvJ 5:dr\&;|BFݻTݲŇvkqTBۑW6fPmo`0n!Puwyk` :zZbբеy*W:>)oHu)C:v.DG \cYGmrBUқt.b$L7p+Ŝ\dLQ{Qd';-\־s3DW4̕> endobj 1130 0 obj <>>> endobj 1131 0 obj <> stream xڝeT5' !8lmݝ݃×{;zfUUG7% @bdeb%QZYX()U-@րAT88Zy#0BU$@o$llܼ$l,,\uKgaln&X(l,A$G 3  h2g :;9 Ȗ$e"Q5p$1ߧU;'#k c[C %p[?l!i`W,l$4 /3?<M3ߖ$&b6+9"V`G7&=@edǬwȈ__ o\l${9?T 6xyڑZ;,LJbba "1Y`o[`J-'a7ݿjb v/ YJKTB]QQ[WF6NFo\\$l8IXyO?DWF*4%w/E~cdh5$_da ;wftR4%chca?QgIhfNֆ;,2[?ղpp(Y=2! PuH0FGG@Rhlkb4#QLCt6vrp{`Omj@`hkhYT+x0j*eQ-:"e%WNؠɔW@9r;S u"k,CsNdu1ކ@ @!&_ڔ]@dSS牆!x{ǎ3?bvLu-R6a_; F Yr@.x-?Oo}|r9:wDm*|h$ #eel4-X4gO{"J26JE  nڒf?aoY[D ҂s쪂˥,}O̖МY8^VBL[JN:8E}x,o=< f)il2 K_(L <63E2:$t:1벗]yVfNaOʜ_J [Cղn՞([C17aMg1_sz[Wݹ/ 3 -ݲީ)5̾U*(?U' 枥ŢgL}!A!nԉlp.9~al$th:w}s,`GŹ54x5H=1p4pM‹>I+mh9 *.`;&ױ!?6y;+5Y 8N%V:sxs/ hl^QIùc(}l8o"âbr4`emt)!qO-ªLѱTy9Gp!wI q҅:4[1og~3YRωe.q{/lVG(Qdd_ޝ Oǻg2]UTzؓv!y505W*\9_{=ҽZ LOP]@۔/lfaÈ ?xP/j"l$UЙUp˹ P\dJ_u`-B ZxXtXZX! (tRSյ;C59i\g* %~Q| ak)V1Zodz0_n)+qowoZ?FrPe~-l4]}l xxLǔ3k{n 3W8"k#}F(c7{e,r, ]$XWs Eپ"IvP|jT΁MF}R|/Nj-Ā'U#[~ BO0#ߪ ycy T4`W퉁 vg7D,1ͬS;Y`Fut>Y4"uU`e^"4C(ɫ#B3U~Vy}YVuZ#LTDb2sEe|/I :'bOA#~lȯI,l7C ^qN51dh-7蔜Z('Ӵ *A^Wʍعe{9'm-=Y.a2fI)BjBy 2ڄĮwGIQh( 8]HI;f\`џ#^(# R)uN3fKSRq#~a}u4 x@Ch@B+9a&֌o%잣##U+,y·UJY;0gbLBUi<}3QT/4m-ˊ|6ˢcWw٧9G,<7|^,phs.6*mI]Gf>FѨD[Y;_InVN5Z"Y r=XV"iY g>3A*m0x:ϝ/- wB|)0=$ȉ@F{_6cR[h*gHUǓ~+xP`2 eGjŲf22RCǂCmOɰf$\d} 6rU B$"??^5nJ1/^smu =`gYqQc1e^OwfwD]C7tեj}F%40}#>d_պ*Idv\ׯ1+ en8EƵ8dOr.ft-VlN[f(҈T|plA;N ՆK\C $ZGEI}DvE[J``Z{F/~%x>`}TZvن^w'?]Lxt`V}GnR[Kόz@bo{]/N?ѷI^z`%腶[4.?}zZU8Y˄OvH-D/ezx9;BBX>";q{A;И*۟EIsН1xIPj|g. ;=@YwDGu̳g%Q|>W|=fb?82źMƚ !m%(!TzOF A:9tQz (DcuKBȏ0ţ+y':W0eDwJ /Obhl5rl;JWq 9 %ߖP[x(0$g yEKWǎ 䋴r~R:] gj aՔ`-&3[|ψtegr?%qc_mlJ0bXڕr5BdtH=>r2@ sQ[>沍+ck},b!@*_BS^Qn"+V/A}R `eE5<9^۝\ Cp i R$qegEd>Я5ͥtJL  YHvri%$%BtU-I3@awl2r8C ZP-|*K =JݜV]6:RЧWg(o?P2tOuQX9+m#?U+kG{rru]o^o.y2u/^av?U2w7ܖNLh?6&pJ5&xN*/^d~5c?ZΰqbDh}F ?eU>Wc6[\۞+IT5C{+T=ޱ ]$Hm[q_ČFdbAMx_IA9p?xyqHd{;QhLMt>OcP^gwfRz6lקoCad)}Bּwar[?֖$ᐿӔ]8'y{ ;ωAzмNO`X]6?ODmo]b˓3ihY`yA}VgRT~>WJ`6KEm/b7E\ZH胮&kW@o|9mm[r/:GH=e}哯6m92Tm=Zg-]?Nnhg#9e%J޴9?$<5yzr΋&tu1Kw 3 d?j猩! e2%}#I0 EÇ1$#~_`R:/c(z?3n= s|u(ɴ pw3P!X@Uy,2XnuhZULK_nf PRO #[Ijf/Ugߐ {}_40=gGΊL !B-dh~Ga4? !i ?Eα)#bjDtxmQRB3ݔV$Pz#F lEo-Π$Kh`7_J'e\<Ȭ{j<4ɲd?+'ӦQ9\1XR;Zb͆z}l1 ' EG148 K>&&'[oL97̝ l`zi@?zhџDo8_ۺ9b`ꅃACRv߮S%'dwҟeZlj&Kx}HμNDvhxIJ6J IS^;H/^y cb,wf;P^"L4l)yWڨ-D*GoSϟf A頖PoK+wClx2VG{dSY`:8%uǂ򮪃hߏzܹ.D _1uwts#/Z1"3dn._/;8"<[e1v4B`8aMC62&}F,//*en_'TD]iaMx]%q_D_㵞J֗̀̓x&>t4iY܅fЍTM) [%&䴗"vyj)P 7Jڐ Cw+0Uθe:eZ砈|"s{hX_?m[Ŕ<5v)WR/ i%DkP[|+7gs wKEϡ lTDFFj&dW~*B"Xm |k JQ\./{{EY1 ώ F1Ro-#NbE`du5`[>J,lZ?0tzsT"7d4oWz)J(lUr4ֵBޜ!pkΟkwC 5!}ݚu*Ā/2bmѱoؒwz|%CL-l`{ٿ.P qsѠ z54#WגxԚ,aT|S=$ :9cEScT^unӞ`r[ b[E;Ib;$0'3;/%dPZB~%%Lh/lH~Yyơ@_0ْꛡOLow\Nwl>`)W|ߡi5T7mnnqj'^@x^yS"5.Gk{B`sb-SUMXB&bfL{ԗ'%Q$HF+\t+j[+i-xpWa m'h<4Н!%$DeR]]htL^j7_X1}{\iՐUv5 M1]T29:}h[GZW53lUI|jbH;GŽ -˅c2q"=Ho)۱_SN܀pύK1#VU8esM&2VYRe$]su?N:Ngf2,ejj핕e;՜o_md\3ShOǧ)I(:0OÊ-uT1d7 gޙ>CDtB+$ǙϮT8S<"KC_Z>]/ȉ&tVЉ's`&x#UMߞz&vP]qauHwmTQm QmL/=7+!ctݕVm~J{yEmvGUjyf0?:HZ %CA]ZE$Mۭ)0#+.W#) >>@oǚk_,JXpapa#oe0,ZN(Jʎw>\/jo~XHuߴrF=:{,3M: qpنsv|ӽ*z1*BB+Y9tT^YfLx>Y°sdqsz>O(A} .2Ar7]߈ lfԉ- ds~=Uh.fwÙ^{" :ŗe5ƱXC `Ѭb9j lߩ8X0Vףf|kw,-8"{'BTfd~ r@`0h`Rfs|i2Mu_Q'yL #:I6[+A9ٮ@% E9u|KˉGی7gHF"@ņ%>Γas^;(&&Riܪj^t&.&{"5;^ ЯkCRXu%](NsFa<ۚ؏gCFOG1'/q,bar <>C'L~?A,5,LC܏J&-`H2ns^}W>dswα?VwJCXP='Ɛ0W`>O*,i|b < !`?( &D U%U66>vH.{W ^zob Qw)W_%JSan=zZ?Zk+Xe6V-8`߂˳ /fxBv{8..M9zVّ=U}lh7qsqA; $I*=+Z?{WY:3~3~Y}Q4,GA5q[sXVpsġYyN^ƈ#EU,>ǗDQ3Q6Y5qP)n{3 '3DiTfg xWs":'}<MATBI`l*Q ʄ_fk^nfgqV¶>r5?l;=~[R+qP>Q-a} )P `-+ɤѬ,G|@ \Shu/$br4DW0\XKڥ4 NwqiPblx L]f a\- ANN'f!,Fls+z.d41l91 cSйGp鰕hN]íjv9s}t0]7ƍqʧZP:AC{2JptR6O{fIߋ=V=y;/c6\#)?ߠLHw؇: iutI1Mهi]rjX9lIsr{ý^T.鲞lps8˂PyC%Cۙk)"^ 1xe}5\eL X!ln cKYBmRQҪO/0RIt3Ij08e-?ߜv<(pVA2T -GxwU;0f5{ziJ%/!0(#8N c*0RHoGbפ1Y I, ?bnlߘo}_Erzp0yDžNu^I%U1b=ch +_8G~{'nI삢@()>uq(^!r3&54z$ϴCN+K]'9a(X#)lC—jɎb")"N5FB>HoDA9tog]DHtcEU~ /L\5DU~]/AJyMcxc1<)v'2mH*@O\oh]?\Ï&CK>^1tdH#/C|U+x P]jƘ]5je{J:!5?>D8r{J~=_㗬B!aL\襍cA U%v\|~_O*V2o,Y{ +4x/$>vjڋOhxN-LiTȒqAlV~Sey>0ouMI)&@*WGSktv#kp}ܻm$FqR&ֽ\bc&TMvi)Ƹ pzn/`;~>/ A&|ejٓ?uqJ/@R$0y{͎ 'u?U,B6d1'GkX,_%)h"hmEHqȎ6|A5Ir)Jƽ=F ~ Yˌ'=v|DaJ':o%~a.w՞'mc[Y\{rQyr5?'j)hƼPETU`[KM@?37gfл^ [UR!VM<20!*!_zpǁ1k)t_YTB|7XaޗPԮ׸. !閐E$x|8W^"Y 7Zm9`DdwV8:Hhc>|ǀ=i% j^`q\OPoNzV硫/qhr!lB?Q893|,1O>;3P,ZǹpUςV}-i,z+Rp1ajIaZj WT0.PyK?vnsܝʯ.d B#B sĮ;ئ(I+ҭQ"TVv[ß9ZE%@X +ֈVLa4p< ݵsr烺Td*8"H'2J/6tbN[GJHX+ᖎBjkwtbdpN07lQ&Ēp7T@CmL:[thF16s2]'1Iq}s;6#Yu8;m=vG]Ģ?[84\ݐ>GqGbxw 2@SZ|=wJmWqOF@J? W}ݩ45qTZ_3p=uBoEgAEϣYz CZf%Qw M'\G RRśo>ezYwo_,~i!pC@R y w4?bt3)bk0È.C"@Y$h#lnem°ڵĐA+!4@|Fx.Jc,~\TtZaprOգV}Ky"p{a9UP{@S?L5OZn l(8\2/#ڤgn3_TmЃܕZ^W[bkӴoR\\$`o+ c誌,@8 ?:e;/`/S{zaGƢЖX </K F endstream endobj 1132 0 obj <> endobj 1133 0 obj <> stream xڵTy{Lg4bNQ<1w /Bbhk++pE&ggD@{A0+]9N#-grP_ok#I3ş(y#XcOɠDהȲв<冀swF2Z_zp\T]Z L2<#-w<{(Y&k|Dť]ʟ/Dw_&tr#q_suO^lˍƴ҂ 2*~C"9V6#:j™1 a%)*ƢSմ`|W[YI2.-uY'Jo=ik=Qa0LFMyMEO(Pr׃iLEYj]6հ:;|ߺIƫz0nϽi^*s\z_իp k짣/ny'@K]w=K#˥M!˖Goi=5W+7Vbzē_0p1~rJzVh'`㶱TyPxM E|6"\`H-5ӻH%{C6ۆ> ?h.<|gBYˮMf\8q2,+AU___1Vň/.?۳jLxL5v߬ۥW F:hu6?.j\=hnIl+Ʌԍj]y˳w%Լ`=?=)q+d[wTvO 2Z(1+Mbie<}1Sc_KsF֫E^4es5B{OGiBmCqo'},%W\l8=LHv{t<>):#z؎W.Jm mY1M-r GqEjAܗ\ ][;7QswwSz'o,'Vz ʂM,>tVuE3{yLmfÇ е\yErk Ot=dꖼC ƭ]:c}mEI uţYm][Q ighy}|j?k9{{䌬iOZ/oG'9"eղŝStL{N۶D=}ޛ29:l%wf6* U2u"{ G.I}M/>)/RMlr7M6z]Ym^fѾh-y \:Lt4Ϯ2{[{Ss7otko9~иIA5\oņ)KWj:ʧ7 [ŭQ'Gsvć7xKfEqr#O'^09ëb0cRS;oKƪ;|Vq2}zZ9,s=8Z[O/w/kPXH}ђtD*eYš>E !sCW5]l/b0pVݎE^bU8<5/aL΢zx-ErDnEVSN elVv|tZ^xOۢ;} u V;n[?4l,\sme"֖5cRۏmTOyGJU Z#uBdؤF߰6x*:$mU|Q{Uwj,Cނ$c '86/}Zs Z{2u rT@+TdnS13RiafL \ۧyٚ?zпYd}C!~r5aoZ> endobj 1135 0 obj <> stream xڵT{@s h3x4݅ưb(F= BXl82!@aFFb 1*B2| ,bT C2bDAa!i: ēp;70LZ?]S(uvss!L @ @f7 6"@Kw/ЭQ|g~( S1p7|ma!&̇3Fgq!Dg!a,ZZP?R 8O*4g}#N93`B<8L9~NM6.2It#5SfIT( 8Lp`$@Y 0 % AVlҌ#,}c>MȲQ `b4?C/; !0?󆤨]QA XI'퓕.D*x)4>.iZW++B`b*sA8/?C 9mqfxg%bi ebe H1 (PL?BEpPAz !R{ n{Kc4MTGqPp;:_uM5E4^T|Rtdw D&S/kX(km\Pƅ=gvҎN1#~cʴYU m,,O\=:o4ߺP rjN崢!^NiVM^$lše/s} VɮHM/m̪jGo;̯_y')Uy]?-j>&¼bu݀=BUyvvomj33ͫWt9C9j5z^efX ueUIř9]ik럩2gr1`nS^Ke2>|(sA|@bl4Xu7f{<*WpOԆvEzW^{xJ<1Ϟ{:WiڐN EA9^ňvykŒ26Iʑh`ղ礬zBP[~7ܡ[Nq1 o Z|bܭ?vZH53+LZ,=1u{@]sӖDv̰A_&_V -b)5WAnTiIwjS2b}`V‹E#7MqkŜjk.Z`hM_oU:dI-Ͽr8,l]7v?n[Bw XoU,'LN^<+&G^޺yxP~"nfͅKN'DE]&[nZ~v9_Z5G7шe!p-/1L*X  훕K(@u?nQrBRW ڻ/_Vˣ߸SYI#h(=%Nv-VȳxaԼwzRpZYUZ8\NQx5ǫxY9crs2'k 9$L52]qPUL&$Sj8.I[{y0)+샚$ׄgxJ:tM55]:2*MkHt!srKѶ#ec@h 5y흝_sDIsɺU+ne-3laռrF b02܅aVSS+A;J xQ* ` ldPo$gvۊHveӃ|ƚB%3{^VًVuhqBYOfߎG,pTQӂp5wϥ:\ ;"]2o!믖OA&9@w8)m4=nMg fŤe~7\²=V=S h6uAqPlrI,^ˏj`cf[93J%o9Aimhy٣[=ŷ55rݨOZ?Z6o5#*Oc7sS]|SSjk E4GECI.XuPsHnqZ6Cc9=#pn>ĺdcjI7^Щ_+];NګB%oXԢ:NAjoz3BR[ĩozoϐnQ@-mƚ_V۶|mKudWR'/aWEk;X-S8RQ%_<܃׷ZlC,K?E{bጙj<;.c3-yYJ"Uƺn[hvmSeNewH }GDΎIC٥ I^HCwSpo%؄ endstream endobj 1136 0 obj <> endobj 1137 0 obj <> stream xڴeT\ͺ-]{NN@%xpww >s9{=zGg͚Ucєj掦@)G#+ @^AāQhfg`cba@w$L@@>7 dH`aEH.Ns@2QrhL(;MM\?@Kk Go vFƿf1Ll=\m&9&&LJ@0ZY-@m@ZUICY飰aWSאfH*K i 5Wu~Ko :ʒ`]\lT#+ȉÃbd>u+kW-C + ]7I_N*?>ߚv \yeey``2}|.濡9~L?Wq6stpv"`amY;cSUTSg;L O?JxXJ:;vEKO G/K׶>/nNn@Y0!v寙?'G'+qCq5q@.n@?+7 !͂OuY GH_g~RsG;/9Y!rS4'gbomoF?|֮R֞@sekտ]d}QK;Ǣc>tqX=,l A/\<$ͭ,l\/!qr|X?4mG)f&GG ptAfG_#¿W韱emq(ˇ.X?eo (G+[LӇ`q[ٿΈ4nP 4CX^p4Ii +̟*e:ҖZNj#& 5S8'9iS`ٽ7'VNޚ+Hfk2i+,ues̤ĵ4Fy:&ѯZVs= Xaax.,M1c.a8uw~j9vP>jw>~4Uf1uq8~p3Dҹw^ 0X1OdyYy,9 {'e f7@@ Ǿ&SO]"1leG8ˬagsB\H$Q PHώH߬T 4UJ-05|!)]7=+rZ`nJƤVop"+EFfRbRi'~ˑ1̆sgvm댢o|z`+j0N|AO0(c L.`Ӗ^N$뱾b@OsK/P.΁ gLE_)")=@ )_f:nZu'Gds ›ROsqVh0djeqPn[?9>b:LE£$7T /WCiٿZwm`# ,A=yʤ ?ރk=qAiBU43"ցHYC}Ө\B!B8 Kc?j&&Ɂ$yUؕIt7ʊa6 z}I3\C7yelɧV[ măj|5qSv7SXE&!wvu)2N z+ B%m4HceiAgVsG^_àajzLەx%D.yY1n}cC&vJ;g·tFY 2Nr TgU~ԎPsweBy고a bO3`T$\A=^Ewu=BQd^^_Tyx[i ?n% ֯.>Ύv gT> iCa3nj.hKZ=iHĤEU[A{aR#}s8n`W"N)r23/!pGFJX AAd=i81U9H\)E3hX~VC*35^dT_r:xyd60߿[w 24ӳO%%蝸<޴ W|6xBd_hʓlL]1jc6aX`S%'uy 8GtS_?XmP?2ݏvMnLCߨf_+z Vl*~e掲'%Vj^eu[ nOɌ_Ok =KB ٶ,]#·I5~[) 5 r\8U?k\ MgogxXXĬ<0nF\ +rJ}br*tUm_ ˸RB0GL =h|9flu/F.JR~Qm#ąo_E2`Nx EI2}:{oT1;v&74xBKbӁ~N _"^30J!TQؘ /u s?Pk"^H7k|elWRO"px;~ | %ůq'GM+Ol/JO;?B . ŮJ?yJ x\{+X`!>ml}H9&xgpTJvifHcr.`&*9{.a'Èq 7:tBRY)t1ԝ^rFˮJocyr\AhMw< "aC[͝&@ic2GO.@MƮ.U_o<{BG|ÎU˝YܾEC8{/a4 t|3ryQ3TOtޫ!.e'-;-̂jV尐).wm62DWsBoDȩm"zK~-9F 60) j9= 3uLpNbرu[ܵ/}A~Sk: Ut.?snRgIJ VV Q_Or.if pTN Sѯ`eT"ƒ^|R1W"4\m$է @ꦏ+nzPe})ؚڱa kͽ|1|:~_D7 \a8st}mJ3 }M*"fûܳZ\G[/RInQ w}c,(ZWgE{ݴ:;J)wQf"~/جpsOo ekzZ2}\E3|0d6RLYHBC8l:qfr CJmd0NPۂGP'c+.\=2}^d%Xts"藼 4OI_T4}43w]Q2ג_GN M.iLpe[*FOS)Oit$bƌ7]l ID \Y ݣ{P,Y#e ʻ-69g #6a2 Tt}PYZo*A< !wVmH/RVRfX|Tdٙi¦z1Ae8TS5rъmN c/vZpNeW7qtEkFVrZ9{m=2hy2H<Ezyȕzn/xiz2O+ޝM_2!<*~Cm`v}'~e Ci+%I".C6i3a\n weOFōt"8^%*%&.ȶ{zƢ;%_1DyPm&Q\E~ewNNJ{33P"L>F+;] m?ImYC5O+rΎc.NՃeF͙V*m:,e /2i#a>isax7 ^+z%"~l w kitC Kh^ȷ?-w*C=XY}rt`R? pfW.׼CTJ1 5EejYoE7\hy:JYR'riqdb2JA~F_%DwQ x&kAg /YS88LkQ}8Q&S+J)HWUѣW\]ؾa q֭9;gPwR\MWl?4dmηrtú}#vkڿ}ݯh*UbYf4H@/S د!d vvWe/tV˃c2!+d*5f!.o|'ؒ+kHU,od4>u9WJ җd_h"L9Z>/Xy'+çsq=Q)NLn>»/09ޑ6޺i `VTP!U#v-91QkY[O.e$(3)yU]Ԓlj"Q,[(ge f31ܞ"929ǰk>׼ы@ݳlb ;a"B[qaI6V/'H~=R0 y*M3MVlr3'}* u-z"sK6ܽW4f}6zUeQ b|Dp6^=⦅ R W򞵭M ʋV:3XzS1 y1wSMX̿_ƃC-cBYA('Yaڀ.1'FW[n^v98VSۯ.7KG-X, 1ih^HU6wX}<ȃ{!(疓"Vp볒Ɋ؟ qNX[[Vw2.z9BOd'>B|› :W^LÆm蟼*IMǺ~A-2YK~6$6=|V 3,H@r1@DƢoLO ~mmӯY8j-Jq$IT.3\!DUu6~'|j6L#1;. K vA2dzhP Q6eL(;1pl)r + BuŪ{Su\3t.)L[3OR+8aJG?Z)+DdTHQۄR~z2G+3nIE#:HE+0M 68Ɏ̾=b1A[2h}afUE{be'47wYK4e#x!$|B[s?K>|!YG$w]6|ށlWM\ZsAM ADhwx\5րff%J?e{!2{C?ƌf(q8>~}T^Dw,4A*M9{ 81`%NfS (xG7-:B':ܒS`^ORi6%M7)4GUd\M-`ÈEMZ5:uPQdjkssr}R0OlHo͋*|&V[Z:j`v0iʇy!Z6Gwj$:[#ŷp+PdWzټ88p3_gV"Edq ^ 0 7LS鮛 } Th~BBR4X$14$ռ%2=m* "D$ K򾫝.ЩQگA*C/.ggXg%d%v!#MV؎%䬾1h|#} +m",d7eG픽F J?Nǘ7% 6s8oi{";ty\"%z2)#z2$U)8/ڍކYӌsr&4ۥ! !"YiƙR cp-E&FF5Y17Gqe"0Ba]y?;I[M.0O\clO҆JQ_I]ny9|@ Zydj6S7"nɢI!u^V \fVk_( tk ge|"h >3?ր5U#ZT {[PVR@nY}Ӷ3i,R籚DF#iov<^l\.IX$6ʣG0\P-6x fO1%j>NkCH? V/9mʆÔXPK֙:^m\~~5,Ŀ_fJ4M@CS* m,A,et< |_vr*"X`fP,Ĉ^/1XF/4L vhW]ƔҘU&*6 ԁIַZLA[gffhuf 3~\6LSӼPx7 5T~3@P Y\>E1HBQShZt[a,Z "0:iT?=]+R[œ"ED-͒ϙ6|fKw $2HxY(CUX6I Ay]#J~!Q#u?W'ᐪgqav۞:z_~ WHc'c 0ˮBzom⒔ VFb_SY n,Z[e r>{]tSb`.^q#:b #i`=è1b'q[pr5k/¶&hn-wA?uԹi\0$\5 NJB,$y1 ښ 0@ۗڡ{T !Y#2۴/.pYՏO9_m6 /m=]d\%[D P{R3g>ePٟ~Y$N5Wڙ%=煬\ȩNooMyInctyJcuq:5T <_EEJBYG28Ώ_]3iv/̓Mh/9AcBdwf"Xʊɫ#5Dm7\oF >!@{C뀿1,'E [r6̺zT~[T3Gd/) $NɱUn;N|ތwUk\A֜^g&)wK#GTr\i7]@mw;i7+ɮEQժ3v)^# ?P(tUyLasukG(|$ah{[v S#h7qjiCEj3i2ULbEm;F-ba_vB ؏J#xIMs4QV͞nYZa51,4S5n\k'Vì }^',וf3TŴj$h6٩ `3͞ ~ O95p8%gl =xaM]ӰtcG^ gB8?3!>14԰ pkP' Lmg ؜fºNMit*L@兰 Z~ $}l"<):4{k/ٯҌ7ȿ0''go-pkDU{)KglT^*_;b#UWi!έ ]{F&{bI`$OB,E f)-\]&+uOf!LyF+(_c=0^F˔ZQDh#$:*r':"af*dcM*WsDCRD#`DMC㩮mmmz]IB7`0k[;E%HIp7q M"[[ý¾j\_]3e[מuuVmT|֌3DL:Y`O8O_#UNƞ8׮v`;Ѥcd,`8>*~f.)ocwoȊ mJtcKG6Wǔbޟ:#ݞ&>m3^¸vZ`Zb5$ zCkߡ]u5bVUaXIQ3&C+څ|lCSz ¨]'Egِ7 rmo,1 S`+GB6/| ʲn\@Ҥ@!瑰|+"=}v Я#:FOk'F )ih=E \ ݎ[rLF[ŽhxXREd}Ѣ2D )ބCn6vjk q}w$*Og<1'VݎذX%R09,d4:/Xn]bu2S2*2jaEZz"Vj.8)J1J~1f{4(e=Uv2 ]6H ^feJNtnᨬOdC;k"/˹oG^g>9#t4Tgc*Wwmm_Nb0PyBP5;jm^ϑ4H5KP/o?qk&b K /zg~kbu9.F-dOÊAw.Oލyb'W>g #pl߷ӐN21{䩡2TS)bƱ<:m01Ƨ;xx|1+ڐևMeհ[؆Ӳ<:~ 8ZAIId.[B< k 7摒XUT4>Zzy'}pS]p_C\#1?A1}(mw>e͖Bo[Qq wr75ִ@&Xk/ft7w[<#4c&/M͘->ڣQœ]>Vm`-9/|Q^*UQ8=_˺΋F]̰B"oD@-b_IM8ci\83ISp~'l' yRTng֝xMQ%c 2O! iR3%>7JGL?!ec}ZPdj赩aNC㊖- ?Grn6񨦠,<AG^ҢNOrטF9/ӗ M4,Ca{DHDed9\d):Q{UA^tyǝ8}oQC%-]Clʊ^|j] Yu;D/_)GM_&^![ɏp9l#z/ A$|`aZ?S]i |&- `! TKEKŽ$y -ɰ?BJIu-AFs`н$qfGY}qƘ5L(qbvOuP=$]fwych%qhB=CLv8ΰ̷=Yqhf48#is,&aIygdhgs!y Vy3:0ՙzuf%]${?ElX 6kNBmz(;rnT7wlۺȠTOOhg` m_(9A+ep(sqvۍ{#eP$nlUَ|l3.=ö] ?qԫp Jܬ@qBYq/؏ܦ; &̳76Ca. ޲qbs-<Tuz$P]-:_ԜdCKzi^Qg=:i)$FuR}mٲ?tm{3GrfK8Yu恊 N9"DIזh NX'b|h㞔9v;\e:ipV}'GKN7O᳼}E+ `ў2⑗@ .euReevߡ:fsDyQ2;N@{Rv!V-}[@x#c[wN6V.O=KtixLeАQ>4vP'31"Yĉ <[Ii0s[1ffFg>?OGzk_r!?y&m14D|/'Mۑ3iDE70)&Ixf}6ZEe&qZƽ{ KwA :æ;?c1aF>u~NBݲ/Jσ&>P/n:i=n߉w8*L6ފq`2&qZ- B$w]ALZOOS"8u"sޢ,WQ6 ;J .k7ch֗ZZLqJ ٭'Sbd6ǸQj.M-U!voιWtAǟ'P + mH5l{]J+"fǯbJE޸O0 }B7ET@_J(&aZ %%BB(Şc{Pf  4yYWs##_N;cFxQGu:C3]ԛFv4 VbCVXk7/D} 7K(f0M!f"EnAXkZQ'~ 84;2g%KM6%vv3g{}Q$3]J'5$q{54A5Z+r+5@:/;p$K\w.=\;vQka}~ܵ8 0Jx,{t:a}*Sp̓-19QIxH)#|b|ߥ3}$.Df]mWv,FGYAڳʊOK ){ifչ蔈ar[ &`Qd13˖t7XѦuɘ~} **hVW%(wˠԌ$0 to9ዪ7T86BFhT. U8s@nq|i]q^,{bkڣRO`VKX˯+)R Tt; sb=ASmh%ygtaqv x,>‘3+%%D^Rhbw밫Ԟ]mg\TFAF1VAeP*YXvwUZl_Wt}u#[Ƚ3ӫțJGGup Z]$m;/Yq(Z"OMC8/tXiBP? e }dK!pKXy8v]h'uh͵MA`Ι!B {uC ֎ +6z C :xeZvb1PJcE73K| iҝ w7lqɭ&RjU|=R_1\ӎۗe4/o 1^maG3!LpniOhVtk v^_ uxOp5&0j.YJ距n뷖P%vO7`Ή%j;t81w@l.{}}46rw!^Yo?Ӯ!rĹB\(|}E+{:E423`OiwgysP ˕2&ڧ/Dg -ubݽyѣ9d0 X_1KpeW1 L`Oٸm!z]I&},eHwa>1|+M9Yb}SR[Q{9\FM~hr<W>Rz D, B21ERʃfdQ6[@]m.h?f&LzJ#^I6uN~:& XL4n=< d}tYREaDDv+ " ^$-F]؛ȥrsGy ͓|^5NmOOC \ޓbMp[)8*=oBҒ-yVY!2W}Fv:7(+̦{_zp[LƂl˥Oԯ<>9c*M/@PeΥtKuS-^ɲu2o@^Yqꄮ 9GOaq\lb"e=)5TC S%a5eԒ$Lb8 [[0S}l+wM~:,@O}bI%)G #4NIJg}5[%t1x՚._bB[J SbM_Wm 8&wV\P|M݋[M(ϗauh'sסsTAL\ h1Y:Tn[$|G\Z"1"_eDJ_bKaC)aGq/N#aPYS,F wY>/t ѴUM晰L5ܯOaw.8չ;':H:.oV_)V`Հ!ͣjQ(S(1 Kvӡr }*C{} 0)xd$O+> [{m t~Fk1q?,!wDF*g8ֻ ܵsY~x3,zM $ᷗ Mu, FSoþ'`CvD {V#c^wGIqw0(őxeq@:R^qgm掸5h쌁ZA{\5ZP˽DM5/rS?:iH0X(QpAg8@@[ ))7 qǔҿ) ؤ*y.!I*A$ͱ'#UE p-ۼzih>s|&rbv 6w*\Wfv80Bc('M,hgmo7bW)wRGeȵdMF$laF}ӌI"ێ^g u21TSڱMOɅ6'#ͯ}nr1Y>xjO&. =LKtw Ź*5yƛKq\6pkj!S*甌&@WRo&m]GW(YJTBg/&XMŖNCd/bkKI=tS0416zfXzCeQH0wBoaH!j z|]^G% jVȝ`xP,,nA*3LIe}O:!K̀q$= ȦG]u8Ĝ vlq(;?=8H*6 WU KH'.:bv[;HvUX߭35l$J1ͨaX\"}I'oAA/'UWF/j k_?t]x'QR(}]# -nw *lb GJqL)_c|Si<-oD6)2b \!-X ٓӶo`h endstream endobj 1138 0 obj <> endobj 1139 0 obj <> stream xڵct$ܺ-cWұm۶Umum۶ɗ~9pF(R"eZA;#3-#@FVЖV hbm`c``%%v:[ي:ycNXR84ydΆ*@F? ;'gZ#CO7H"lghaf3-JRVvnNVC[,@h Mv@UYTI $LIYX+DTD@5W'~3ʧo鲢** `,ldg? \nnntf.NtvftS1p9Z>q5 ca uMϤOIߚ 8\33 ` 4!@ @ov96 ]sg:^ކnyb.N߶ӿ*?6YA9I1QeZO}cKOz"2\6#' S&v66`'bɓk+[;7[njakby{zU[ E` `@wcsQ_3_' ^vSCk') pvtz{Oǿ`&ΟBKښ8eD߮?J9&v), (%bm-ghOJ3"#B+,,܁& "_vIgO ښY?qc2|4:9q?i TR4O `h)&VV㧦M(@Ogkwq9=MN-+Z nay)YCgG wmO]0~?I_Il!!;w/ZϽ2q2Y8Lk;M~2 ݁ư vA)!>Setg|RqSX"9;@f ; .]$" t;E]CY\DQl5:Հ %Nbc6iM]yNf^`-?kmR~T+P0BCeIB|1丗|k_}Fs_ɤGqs q ;ѠڋE?$˄Z@wGu|k!˝PkM O ʣdG8nQ kET هe lh`60i?j6|_Z4Y'$[r,!C;8 6eR}-ǶYH[M "#%.fy"cBJD!G3&"jە/>˾»c2#ezKú c=~b 4C$& Tx(&j6B"x؎d5L:^"9"SCt끣qgݒ'TB9zZl[! xoZO"bv3Da#IrVxl+ozߋ%hDv)!;1CU|‰40j\ߔoP mbF} }~G5=b,=s4$R[eIR0= y #()q͛ EJ6Ȫ$evgby f`%%XIދ^cQݢ3#!7hITڻA`qD6{Um_N݀J dJTZAoSCxv|&)]Q%|xPon0#||>`3)\p{YmT~J8 rG)hpFOt QRV].lc 7NS6pIK%mt;lGBjAWo׶K6/b;l΍鐑sf>0JxHY |ڶ!`$-g";oHfKE}z-ng0qߌﻵjy(rע_;G2v\=J,\o`-@ LuU~Gw'Jz.RsQ5]%.>-ԧ7QҿϙIw$ Ln )%TX)䄣瑻VeLJn9tT,SΤX+b( CK(2 *6_ӯm]t(ƶځͪm9/k,J_` MBB`u ̮Y-ZMMa"O৴\23衮ɠ먽<4eyE+Q.Qs16:p`YJ%r2&vg$̧͊c._IP.A:nx@]Ho  P/yzCY򰬜nBaܔQeo~p# c.ޤIHIO&݇BQ;{UWDИmd ,[4!)jw%7WDy*CIh6FxXVqf*grx ;cW{p5YZvAXP80&m%y)w]h Py,t)Q$E^={JE\d R$es'Ǘ\mH@C_JH@-ˀc8/;LlBpjwMҿ`D Y&U} |,.e{8ɛ< zT'vUZ#L{WuOga#Γ8UiM\+:~xHb<S>vdb"2jyKUbeZ<$[U~,c7 DXzG)vd-&jY~:l! aIt{"tdJzC|yeǁus@#=aQCR@ 4+8?Bd_po/:[JB{ZL)G109R )|8ٙk;iʵ|nGI RӠDXαko}-[9UhwE1gN#nF_`[: 0ܕvtf%a+-SwSѯ_1U$0 e٩! )F3]yHxғ^z4 =v= R(|̵Te;aF^S# ry)itDBs֚dСgcIymOsTFcGۓvʫDy6}ЎS4Dɛ-lrP a+Rq6L\DMHlqHm2|-6tD[*lFO+%b|k+\<NʸWK8&>[z ~4ur^+GANY9#mXF 3mXzث,m FT[*U1 IUB߇/(W*nM&Zؕ}|[$YB$6UN+W @chx~u7R-X^u`KizeMxey/M~%eSb<| _l1l)Rh,]bFV2JNQmer7)"̋3 &kދ?3x\8 F@:P7E_AmSEbxeT㞖jWʄמ3)#vْht`8Xa*[mjDYy3[>hBfGگ;ЋLQm=kb+P܋,[#: (}.N8=L}r_8Ān𢡊73/UB_"=kx@+cMO& }@킣LBym,Lnws]s|ݥZp by5,_lCz1A&Ka19 u [w=X%ONVʐZ.Π$LgdqI_g/t/fg7]͊I\Xm%*VσSKhZ6M f@ygكCE>ZҠ&$Hs9x*(f5: x͓"C"Sh*,P6ԈparDBuƞ>GoVop} m&56M#lAg9F}qwYJ%%SEP Q)G-W9 t't `cBqP<!Df oM7m qy[D-xM-z7rL}s n$6ZQza 3m 3_p&"|MSaB3cǜ/Vj^uX =^L9yYjm4PgER<8JjN!=dR|L _nJբ?4xTs!o_+!0 >aZH?q;Iw]tLn+uT i{[/$X &׏Zg"YFYR׏#) +3ZDlY޼42 ҫ2y}YX@e`Tƣ^Q^D]Bq{̊A_2s900aj+B;(@fq&V/GRn1sKfPTLMa[1&#~? ޜ{8LoUEl`GEwshw$8M 5kJDu|JާxHVҐڀP Wڸ ][@KpzY{uȚ\g~f-bDZ{5.ۇ$$LB \OC/r!xUMj}bg.곢5?g_{DwjǸAf QLlcmshFdWJes]Kkx&5K^pcW_SnEM 597TTI[FlE~.vƺKbѸsa҂y]i}orSۊkk6(T_1ݕOBgggqC؋U7S:c fA~bpkBwxlZ{7a2[K(m(EtRhFR< q1m[>Uۀ6p V/⡧7Br'|7(jy`aS/dDڇJcVZՎțdDuN^u^(iE:kec.+I-iT}ط]u.lBl oo!4&5e؏O &9#Tc2 ayKX>%xič#-.%LF{ޔ:hcNZa"͵Gj*4M{̈́]׭o5oVadCm.4Ɵ-_u~PxqAJ1p@?ٴ b[ޅ8+#d tMog)hRM-RAw$.'-\2l緩iׄ߉rD2(!N_`4E{b[T:ԝ^ɴT>L]/Ʋ 5CNeGy&R=z(PB;z@$unq Rd /cWxQ$ZlgN?'92/^ڳb)P*b@щ %4QӁNs~^CƓVC9? B.C\m[{BDTxOT{۞fjխB2>|$%fM]g|RWS.|BAWQ+axSC[nP֗ tm-Ij|YvI}FXYuźCEG %yFlW(JvmN㋝굙1r+K e8tv8f)xqwu<8i7 bM,ڛc# "4<}W@~fɀIP vkkQ[DyA';KaPeT'-(Dt_=% T߭/FfV Sw髼A1؜+\]LxLK(Eg#.'8KɁ/yX(O){M$?׸[8c6%k@WsOރ0 i+N|\aΪ;D1X Zް`8UGP,("MR!}ܑ tB a4/{fٛ7t<8x9 %u=B.7sQԂamY,R@.r~ηsXu4zN+2Y)@E ^iZ}(who?+ݤb$q-Lqs6HyY_A*vv^AVS5)&,x'=.>٨,ls.׋3لp Ԇٍb vGڄ<(AKu}qȑ1dbRۇ%79zT@jFHw )$a*s(ufڢ o<]Mjs9KF b+1F(_h߷5;) Yχ]&`-f,o1j;Yi&t~tp 0vse~aN OJlg|HKLhce=wC`J'tR? ( & 1'ISwbt7"l P[ޏ7Ev!9˸Ą`QkK.,[=OнifoT}TL{+ׇXUz`#ԛ]Od\uH70VܧٗwJrݐ*:vpr ^͛WXS^}Tfs2n1b&eۗ9/}7*1߄uc|d`(E3Ox;p*zd~BV5ļ:PUZMXlaɡXpuBDx©vغ}Sk9!λP_mdI!D=a,O"_ďQ;#`|?ԟC6ԯ)ħcjv?UpTKH+]V{}^Y5ik1CniY5I͊ro':Ylj^c[Y襂RBhW>Yh)Qԝ03xLF Aw;ܡFмKeYkHt~ fhXU;mgti8"5XR~l*i폨Za*Ғ"Z}~MJ;)_x(r57盆0=er,E+LvŅZbV<=i/+OA'2~E(DžrGF/\<͠_u[p*eDjGDLYՖÞ7: Tv xI}Yѝs^ f=B-yˆTTԂnL8gόR%֘o;CVٝN3s{mM+ %7 xK@֒a{|F`4U$H;PԞ~1q()J U -eRÐb 1kSꥱ;b[ƾߩp#eTvkNhݬf5tU\mY @F*ZQuGSs3U٢Aj3[W/ 67mKq܉4UAIEMRqiFqHCэAP25'+bP\;]MY&^0Ӫ.ﳃ9-o5rŜbc5uGycG:{XAR0@vM3OJ: $O# Ꭷ$KL#}k2<-}ݱN/3,PFɑOPE$,PQca{4q`VOUa:ӕ}uRt'I֔rze3Wz?&@,& + ^A[% UKәw1P-IJ?I5,-A!Viß|Pu[e5E.^b?0WxF"1{1~8m/x L2&8Lh)ɏW^MUL*q1-!-ɡH7#Z!PeA ?\B2.=1X=j{6bcj>|X{p6:8xVCP,_Tb'5If%CIEluF{oi%"f>8[dTAx=\k0Ĺq2fLY/7ĠtvⲖC;mŶz<\Z7;Я?3iŅt4[J=E YdDkjH-9g]h$V4Z*ČކtxnfIj%A:i-0Aeyk ,l#+2J~4?-P#'(E{7M::V% H-MG {A! ,Py9G?%4.`*r;0HGEU8_(9I0#nsL_p ;Y`::ST9'ZkHshWokvwJ{|)b]cE~v@$*DC c.SXOc]WkPLF =Gϱ=+N'se_p9&,ėܫo*ri| Yզ7C:i3;O"BGbU4U3z[v]%66~&*xD ^f8#03WwU(`d~LrnF gWx]סϼFBls56!n!Deef!@w0.;22ٲ$S,!CH6y;KIb[fA3ꆳx YlB4ha$!K /_<@;|z,@GXP;zO|ULG뮆,>y{3-j}* 4w6BwU ŏx2}Y\YKJg&pn~irʓ c@|<GA5h=Ȑw2I:1$*$: uy&>?A w5cº5HW J\5c y2jb1]ؠإ7Pw ZZ{͟Uf:JT/Qu/XbMӸoK9Y!::d5~.Zp]S8W3U*#jv(O@̝L@m0>|2aoHVn3 Ln l-h-L)j3 0z?yg*&=gl[sO\O9[@0L4gxח&)a%dx If~S!f`1 QLUh!^M#5*1y; 9jRO:]TIL C~hEP+Gð^Y4lNYp/Ȕ`0s-𿀧PܑLJ}1O2ņ 뛢E Tʌ%Cܻދ_Y?.^Hj].v\OqUcNC +fDo~,'S?ʜ!dV=| dzR { )=RJAPEl Q,s eN8daʁ *B3k~. G [ѱa"fpZqk?. ' l) \}A|^ɤdcxM$Ny|Y0NCs[}{6D) a<L&fy&OUYq8Jg؏#/ps!5\J &G}p׶Ub}F 2M̾Jf<0 W-F)qƋgm!4% hduht1;:~gC"bW5XhѶ;`ɮKЛ b-ݿel%B((Cb+o=+~Tq. ]p~m2{|LB][&zr0j Lw^;| hC"퇘cHy!JPG<goE9w=k웨2*%ɯ˩o<~[9cuGI>/Ϟu+LW@Hq]5N^fA˓HቘLӔ{6ERKɧ'QݨaIbE{5 F+\7%Qbs&pfCK*q[+GҬP߾lQ!RNF_}T{nE䱯5؄DvfRjHۘ, p0ә{irICB?f,dyql>3ZmruBN],^Boyd ezNE sGn Ovpp&h<&{&Q#|64Vne -Wl{_Io\Xqk69A?Ӓޖu{U ^>2,kr,-Tkw3Uq2ěܳP)w|aH\LMPpxʌy)uv:g_(^6}p\zZ j&ЃGoMy\. Uܪ^ JÙG$N\ӹ VnΰVILí;/oPʲHkOoPqa59Ь>f 3Q>mCb~PDnY bbdF0# afi7GN$V{ȒWMǣ52뗗9OmRjwCOKP]K̞uχf^Wh\I [pf, l%UU:> endobj 1097 0 obj <> endobj 1099 0 obj <> endobj 1077 0 obj <> endobj 1079 0 obj <> endobj 1081 0 obj <> endobj 330 0 obj <> endobj 325 0 obj <> endobj 851 0 obj <> endobj 414 0 obj <> endobj 424 0 obj <> endobj 410 0 obj <> endobj 423 0 obj <> endobj 239 0 obj <> endobj 352 0 obj <> endobj 622 0 obj <> endobj 796 0 obj <> endobj 886 0 obj <> endobj 1071 0 obj <> endobj 1141 0 obj <> endobj 1142 0 obj <> endobj 194 0 obj <> endobj 190 0 obj <> endobj 186 0 obj <> endobj 182 0 obj <> endobj 178 0 obj <> endobj 174 0 obj <> endobj 170 0 obj <> endobj 166 0 obj <> endobj 162 0 obj <> endobj 158 0 obj <> endobj 154 0 obj <> endobj 150 0 obj <> endobj 146 0 obj <> endobj 142 0 obj <> endobj 138 0 obj <> endobj 134 0 obj <> endobj 130 0 obj <> endobj 126 0 obj <> endobj 122 0 obj <> endobj 118 0 obj <> endobj 114 0 obj <> endobj 110 0 obj <> endobj 106 0 obj <> endobj 102 0 obj <> endobj 98 0 obj <> endobj 94 0 obj <> endobj 90 0 obj <> endobj 86 0 obj <> endobj 82 0 obj <> endobj 78 0 obj <> endobj 74 0 obj <> endobj 70 0 obj <> endobj 66 0 obj <> endobj 62 0 obj <> endobj 58 0 obj <> endobj 54 0 obj <> endobj 50 0 obj <> endobj 46 0 obj <> endobj 42 0 obj <> endobj 38 0 obj <> endobj 34 0 obj <> endobj 30 0 obj <> endobj 26 0 obj <> endobj 22 0 obj <> endobj 18 0 obj <> endobj 14 0 obj <> endobj 10 0 obj <> endobj 6 0 obj <> endobj 1143 0 obj <> endobj 1144 0 obj <> endobj 1145 0 obj <> endobj 1146 0 obj <> endobj 1147 0 obj <> endobj 1148 0 obj <> endobj 1149 0 obj <> endobj 1150 0 obj <> endobj 1151 0 obj <> endobj 1152 0 obj <> endobj 1153 0 obj <> endobj 1154 0 obj <> endobj 1155 0 obj <> endobj 1156 0 obj <> endobj 1157 0 obj <> endobj 1158 0 obj <> endobj 1159 0 obj <> endobj 1160 0 obj <> endobj 1161 0 obj <> endobj 1162 0 obj <> endobj 1163 0 obj <> endobj 1164 0 obj <> endobj 1165 0 obj <> endobj 1166 0 obj << /Author(Philip Kime)/Title(biber)/Subject(A backend bibliography processor for biblatex)/Creator(LaTeX with hyperref package)/Producer(LuaTeX-0.76.0)/Keywords(biblatex, bibliography) /CreationDate (D:20131018223954+02'00')/ModDate (D:20131018223954+02'00')/Trapped/False/PTEX.Fullbanner (This is LuaTeX, Version beta-0.76.0-2013061817 (TeX Live 2013) (rev 4627) (TeX Live 2013) kpathsea version 6.1.1)>> endobj xref 0 1167 0000000000 65535 f 0000198747 00000 n 0000198768 00000 n 0000198789 00000 n 0000000015 00000 n 0000011885 00000 n 0000312729 00000 n 0000000056 00000 n 0000000092 00000 n 0000019781 00000 n 0000312614 00000 n 0000000133 00000 n 0000000165 00000 n 0000019825 00000 n 0000312545 00000 n 0000000212 00000 n 0000000237 00000 n 0000019870 00000 n 0000312464 00000 n 0000000284 00000 n 0000000316 00000 n 0000022868 00000 n 0000312383 00000 n 0000000363 00000 n 0000000403 00000 n 0000022913 00000 n 0000312302 00000 n 0000000450 00000 n 0000000477 00000 n 0000022958 00000 n 0000312221 00000 n 0000000524 00000 n 0000000551 00000 n 0000038223 00000 n 0000312140 00000 n 0000000598 00000 n 0000000629 00000 n 0000038268 00000 n 0000312071 00000 n 0000000676 00000 n 0000000712 00000 n 0000038312 00000 n 0000311951 00000 n 0000000754 00000 n 0000000777 00000 n 0000042611 00000 n 0000311848 00000 n 0000000824 00000 n 0000000867 00000 n 0000051341 00000 n 0000311779 00000 n 0000000919 00000 n 0000000966 00000 n 0000055163 00000 n 0000311698 00000 n 0000001018 00000 n 0000001058 00000 n 0000080357 00000 n 0000311617 00000 n 0000001110 00000 n 0000001152 00000 n 0000087718 00000 n 0000311536 00000 n 0000001204 00000 n 0000001241 00000 n 0000091644 00000 n 0000311455 00000 n 0000001293 00000 n 0000001331 00000 n 0000107786 00000 n 0000311374 00000 n 0000001383 00000 n 0000001420 00000 n 0000112715 00000 n 0000311305 00000 n 0000001472 00000 n 0000001521 00000 n 0000112989 00000 n 0000311224 00000 n 0000001568 00000 n 0000001595 00000 n 0000115255 00000 n 0000311109 00000 n 0000001642 00000 n 0000001689 00000 n 0000115300 00000 n 0000311040 00000 n 0000001741 00000 n 0000001773 00000 n 0000115345 00000 n 0000310971 00000 n 0000001825 00000 n 0000001857 00000 n 0000115390 00000 n 0000310890 00000 n 0000001904 00000 n 0000001931 00000 n 0000118346 00000 n 0000310772 00000 n 0000001978 00000 n 0000002024 00000 n 0000122544 00000 n 0000310712 00000 n 0000002077 00000 n 0000002106 00000 n 0000125288 00000 n 0000310591 00000 n 0000002154 00000 n 0000002192 00000 n 0000125518 00000 n 0000310517 00000 n 0000002245 00000 n 0000002286 00000 n 0000133757 00000 n 0000310430 00000 n 0000002339 00000 n 0000002380 00000 n 0000133803 00000 n 0000310356 00000 n 0000002433 00000 n 0000002462 00000 n 0000136767 00000 n 0000310270 00000 n 0000002510 00000 n 0000002555 00000 n 0000154191 00000 n 0000310148 00000 n 0000002603 00000 n 0000002642 00000 n 0000154237 00000 n 0000310074 00000 n 0000002695 00000 n 0000002721 00000 n 0000154283 00000 n 0000310000 00000 n 0000002774 00000 n 0000002803 00000 n 0000154375 00000 n 0000309914 00000 n 0000002851 00000 n 0000002905 00000 n 0000158608 00000 n 0000309828 00000 n 0000002954 00000 n 0000002999 00000 n 0000158654 00000 n 0000309742 00000 n 0000003048 00000 n 0000003091 00000 n 0000161778 00000 n 0000309633 00000 n 0000003140 00000 n 0000003170 00000 n 0000185227 00000 n 0000309559 00000 n 0000003224 00000 n 0000003289 00000 n 0000185274 00000 n 0000309485 00000 n 0000003343 00000 n 0000003393 00000 n 0000185321 00000 n 0000309375 00000 n 0000003436 00000 n 0000003465 00000 n 0000188375 00000 n 0000309301 00000 n 0000003513 00000 n 0000003547 00000 n 0000188422 00000 n 0000309214 00000 n 0000003595 00000 n 0000003636 00000 n 0000191774 00000 n 0000309091 00000 n 0000003684 00000 n 0000003715 00000 n 0000191821 00000 n 0000309017 00000 n 0000003768 00000 n 0000003792 00000 n 0000195153 00000 n 0000308930 00000 n 0000003845 00000 n 0000003873 00000 n 0000195200 00000 n 0000308856 00000 n 0000003926 00000 n 0000003957 00000 n 0000195247 00000 n 0000308746 00000 n 0000004005 00000 n 0000004034 00000 n 0000202567 00000 n 0000308685 00000 n 0000004087 00000 n 0000004130 00000 n 0000006612 00000 n 0000007013 00000 n 0000007194 00000 n 0000007581 00000 n 0000007720 00000 n 0000007858 00000 n 0000008003 00000 n 0000008148 00000 n 0000008293 00000 n 0000008437 00000 n 0000008582 00000 n 0000008727 00000 n 0000008872 00000 n 0000009012 00000 n 0000009156 00000 n 0000009300 00000 n 0000009589 00000 n 0000009732 00000 n 0000009875 00000 n 0000010017 00000 n 0000010161 00000 n 0000010303 00000 n 0000010593 00000 n 0000010739 00000 n 0000010885 00000 n 0000011030 00000 n 0000011170 00000 n 0000011314 00000 n 0000011458 00000 n 0000011603 00000 n 0000011929 00000 n 0000004176 00000 n 0000011747 00000 n 0000011793 00000 n 0000251070 00000 n 0000007388 00000 n 0000011839 00000 n 0000244570 00000 n 0000236819 00000 n 0000009445 00000 n 0000010448 00000 n 0000225666 00000 n 0000307709 00000 n 0000006738 00000 n 0000014946 00000 n 0000015095 00000 n 0000015289 00000 n 0000014785 00000 n 0000012078 00000 n 0000015243 00000 n 0000215660 00000 n 0000014911 00000 n 0000018663 00000 n 0000018809 00000 n 0000019233 00000 n 0000018950 00000 n 0000019372 00000 n 0000019091 00000 n 0000019544 00000 n 0000022153 00000 n 0000020053 00000 n 0000018462 00000 n 0000015438 00000 n 0000019735 00000 n 0000019915 00000 n 0000019961 00000 n 0000020007 00000 n 0000018588 00000 n 0000022289 00000 n 0000022573 00000 n 0000022431 00000 n 0000023095 00000 n 0000021976 00000 n 0000020202 00000 n 0000022776 00000 n 0000022822 00000 n 0000023003 00000 n 0000023049 00000 n 0000022102 00000 n 0000026510 00000 n 0000026651 00000 n 0000026797 00000 n 0000027039 00000 n 0000026341 00000 n 0000023232 00000 n 0000026947 00000 n 0000026993 00000 n 0000026467 00000 n 0000030333 00000 n 0000030471 00000 n 0000030612 00000 n 0000030753 00000 n 0000031212 00000 n 0000030156 00000 n 0000027164 00000 n 0000030890 00000 n 0000030936 00000 n 0000030982 00000 n 0000031028 00000 n 0000031074 00000 n 0000031120 00000 n 0000031166 00000 n 0000030282 00000 n 0000034931 00000 n 0000034977 00000 n 0000034774 00000 n 0000031337 00000 n 0000034885 00000 n 0000041961 00000 n 0000038357 00000 n 0000038066 00000 n 0000035102 00000 n 0000038177 00000 n 0000042103 00000 n 0000042242 00000 n 0000042381 00000 n 0000042702 00000 n 0000041784 00000 n 0000038506 00000 n 0000042519 00000 n 0000042565 00000 n 0000042656 00000 n 0000041910 00000 n 0000044059 00000 n 0000044105 00000 n 0000043902 00000 n 0000042839 00000 n 0000044013 00000 n 0000306735 00000 n 0000047300 00000 n 0000046223 00000 n 0000044231 00000 n 0000046334 00000 n 0000306581 00000 n 0000046380 00000 n 0000046426 00000 n 0000046472 00000 n 0000046518 00000 n 0000046564 00000 n 0000046610 00000 n 0000046656 00000 n 0000046702 00000 n 0000046748 00000 n 0000046794 00000 n 0000046840 00000 n 0000046886 00000 n 0000046932 00000 n 0000046978 00000 n 0000047024 00000 n 0000047070 00000 n 0000047116 00000 n 0000047162 00000 n 0000047208 00000 n 0000047254 00000 n 0000211474 00000 n 0000307853 00000 n 0000049632 00000 n 0000054530 00000 n 0000054676 00000 n 0000051386 00000 n 0000049479 00000 n 0000047450 00000 n 0000049780 00000 n 0000049826 00000 n 0000049872 00000 n 0000049918 00000 n 0000049964 00000 n 0000050010 00000 n 0000050056 00000 n 0000050102 00000 n 0000050148 00000 n 0000050194 00000 n 0000050240 00000 n 0000050286 00000 n 0000050332 00000 n 0000050378 00000 n 0000050424 00000 n 0000050470 00000 n 0000050515 00000 n 0000050561 00000 n 0000050606 00000 n 0000050652 00000 n 0000050697 00000 n 0000050743 00000 n 0000050789 00000 n 0000050835 00000 n 0000050881 00000 n 0000050927 00000 n 0000050973 00000 n 0000051019 00000 n 0000051065 00000 n 0000051111 00000 n 0000051157 00000 n 0000051203 00000 n 0000051249 00000 n 0000051295 00000 n 0000207431 00000 n 0000049605 00000 n 0000054822 00000 n 0000054972 00000 n 0000055208 00000 n 0000054353 00000 n 0000051549 00000 n 0000055117 00000 n 0000054479 00000 n 0000058127 00000 n 0000058959 00000 n 0000057974 00000 n 0000055370 00000 n 0000058272 00000 n 0000058318 00000 n 0000058364 00000 n 0000058410 00000 n 0000307385 00000 n 0000058456 00000 n 0000058502 00000 n 0000058548 00000 n 0000307047 00000 n 0000058594 00000 n 0000058639 00000 n 0000058685 00000 n 0000058730 00000 n 0000058776 00000 n 0000058821 00000 n 0000058867 00000 n 0000058913 00000 n 0000307547 00000 n 0000307216 00000 n 0000058100 00000 n 0000062659 00000 n 0000061539 00000 n 0000059145 00000 n 0000061650 00000 n 0000061696 00000 n 0000061742 00000 n 0000061788 00000 n 0000061834 00000 n 0000061880 00000 n 0000061926 00000 n 0000061972 00000 n 0000062018 00000 n 0000062064 00000 n 0000062110 00000 n 0000062156 00000 n 0000062202 00000 n 0000062248 00000 n 0000062294 00000 n 0000062340 00000 n 0000062386 00000 n 0000062431 00000 n 0000062477 00000 n 0000062522 00000 n 0000062568 00000 n 0000062613 00000 n 0000066400 00000 n 0000065876 00000 n 0000062784 00000 n 0000065987 00000 n 0000066033 00000 n 0000066079 00000 n 0000066124 00000 n 0000066170 00000 n 0000066216 00000 n 0000066262 00000 n 0000066308 00000 n 0000066354 00000 n 0000070009 00000 n 0000068749 00000 n 0000066538 00000 n 0000068860 00000 n 0000068906 00000 n 0000068952 00000 n 0000068998 00000 n 0000069043 00000 n 0000069089 00000 n 0000069135 00000 n 0000069181 00000 n 0000069227 00000 n 0000069273 00000 n 0000069319 00000 n 0000069365 00000 n 0000069411 00000 n 0000069457 00000 n 0000069503 00000 n 0000069549 00000 n 0000069595 00000 n 0000069641 00000 n 0000069687 00000 n 0000069733 00000 n 0000069779 00000 n 0000069825 00000 n 0000069871 00000 n 0000069917 00000 n 0000069963 00000 n 0000073443 00000 n 0000071770 00000 n 0000070147 00000 n 0000071881 00000 n 0000071927 00000 n 0000071973 00000 n 0000072019 00000 n 0000072065 00000 n 0000072111 00000 n 0000072157 00000 n 0000072203 00000 n 0000072249 00000 n 0000072295 00000 n 0000072341 00000 n 0000072387 00000 n 0000072433 00000 n 0000072479 00000 n 0000072525 00000 n 0000072571 00000 n 0000072617 00000 n 0000072663 00000 n 0000072709 00000 n 0000072755 00000 n 0000072801 00000 n 0000072847 00000 n 0000072893 00000 n 0000072939 00000 n 0000072985 00000 n 0000073031 00000 n 0000073077 00000 n 0000073123 00000 n 0000073169 00000 n 0000073215 00000 n 0000073261 00000 n 0000073307 00000 n 0000073352 00000 n 0000073398 00000 n 0000076869 00000 n 0000075610 00000 n 0000073581 00000 n 0000075721 00000 n 0000075767 00000 n 0000075813 00000 n 0000075859 00000 n 0000075905 00000 n 0000075951 00000 n 0000075997 00000 n 0000076043 00000 n 0000076089 00000 n 0000076135 00000 n 0000076181 00000 n 0000076227 00000 n 0000076273 00000 n 0000076319 00000 n 0000076365 00000 n 0000076411 00000 n 0000076457 00000 n 0000076503 00000 n 0000076549 00000 n 0000076595 00000 n 0000076641 00000 n 0000076687 00000 n 0000076732 00000 n 0000076778 00000 n 0000076823 00000 n 0000079155 00000 n 0000080586 00000 n 0000079002 00000 n 0000077006 00000 n 0000079300 00000 n 0000079346 00000 n 0000079392 00000 n 0000079438 00000 n 0000079484 00000 n 0000079530 00000 n 0000079576 00000 n 0000079622 00000 n 0000079668 00000 n 0000079714 00000 n 0000079760 00000 n 0000079806 00000 n 0000079852 00000 n 0000079898 00000 n 0000079944 00000 n 0000079990 00000 n 0000080036 00000 n 0000080082 00000 n 0000080128 00000 n 0000080174 00000 n 0000080220 00000 n 0000080266 00000 n 0000080311 00000 n 0000080402 00000 n 0000080448 00000 n 0000080494 00000 n 0000080540 00000 n 0000079128 00000 n 0000084292 00000 n 0000082756 00000 n 0000080736 00000 n 0000082867 00000 n 0000082913 00000 n 0000082959 00000 n 0000083005 00000 n 0000083051 00000 n 0000083097 00000 n 0000083143 00000 n 0000083189 00000 n 0000083235 00000 n 0000083281 00000 n 0000083327 00000 n 0000083373 00000 n 0000083419 00000 n 0000083465 00000 n 0000083511 00000 n 0000083557 00000 n 0000083602 00000 n 0000083648 00000 n 0000083694 00000 n 0000083740 00000 n 0000083786 00000 n 0000083832 00000 n 0000083878 00000 n 0000083924 00000 n 0000083970 00000 n 0000084016 00000 n 0000084062 00000 n 0000084108 00000 n 0000084154 00000 n 0000084200 00000 n 0000084246 00000 n 0000307997 00000 n 0000087296 00000 n 0000090980 00000 n 0000091419 00000 n 0000088083 00000 n 0000087143 00000 n 0000084430 00000 n 0000087442 00000 n 0000087488 00000 n 0000087534 00000 n 0000087580 00000 n 0000087626 00000 n 0000087672 00000 n 0000087763 00000 n 0000087809 00000 n 0000087855 00000 n 0000087901 00000 n 0000087947 00000 n 0000087992 00000 n 0000088038 00000 n 0000087269 00000 n 0000091123 00000 n 0000091269 00000 n 0000092745 00000 n 0000090803 00000 n 0000088246 00000 n 0000091598 00000 n 0000091689 00000 n 0000091735 00000 n 0000091781 00000 n 0000091827 00000 n 0000091873 00000 n 0000091919 00000 n 0000091965 00000 n 0000092011 00000 n 0000092057 00000 n 0000092103 00000 n 0000092149 00000 n 0000092195 00000 n 0000092241 00000 n 0000092287 00000 n 0000092333 00000 n 0000092379 00000 n 0000092425 00000 n 0000092471 00000 n 0000092517 00000 n 0000092562 00000 n 0000092608 00000 n 0000092653 00000 n 0000092699 00000 n 0000090929 00000 n 0000096748 00000 n 0000096499 00000 n 0000092908 00000 n 0000096610 00000 n 0000096656 00000 n 0000096702 00000 n 0000100400 00000 n 0000099467 00000 n 0000096873 00000 n 0000099578 00000 n 0000099624 00000 n 0000099670 00000 n 0000099716 00000 n 0000099762 00000 n 0000099808 00000 n 0000099854 00000 n 0000099900 00000 n 0000099946 00000 n 0000099992 00000 n 0000100038 00000 n 0000100080 00000 n 0000100126 00000 n 0000100171 00000 n 0000100217 00000 n 0000100262 00000 n 0000100308 00000 n 0000100354 00000 n 0000104173 00000 n 0000103096 00000 n 0000100525 00000 n 0000103207 00000 n 0000103253 00000 n 0000103299 00000 n 0000103345 00000 n 0000103391 00000 n 0000103437 00000 n 0000103483 00000 n 0000103529 00000 n 0000103575 00000 n 0000103621 00000 n 0000103667 00000 n 0000103713 00000 n 0000103759 00000 n 0000103805 00000 n 0000103851 00000 n 0000103897 00000 n 0000103943 00000 n 0000103989 00000 n 0000104035 00000 n 0000104081 00000 n 0000104127 00000 n 0000106547 00000 n 0000108061 00000 n 0000106394 00000 n 0000104311 00000 n 0000106685 00000 n 0000106731 00000 n 0000106777 00000 n 0000106823 00000 n 0000106869 00000 n 0000106915 00000 n 0000106961 00000 n 0000107007 00000 n 0000107053 00000 n 0000107099 00000 n 0000107145 00000 n 0000107191 00000 n 0000107237 00000 n 0000107283 00000 n 0000107329 00000 n 0000107375 00000 n 0000107420 00000 n 0000107466 00000 n 0000107511 00000 n 0000107557 00000 n 0000107602 00000 n 0000107648 00000 n 0000107694 00000 n 0000107740 00000 n 0000107831 00000 n 0000107877 00000 n 0000107923 00000 n 0000107969 00000 n 0000108015 00000 n 0000106520 00000 n 0000109120 00000 n 0000109166 00000 n 0000108963 00000 n 0000108224 00000 n 0000109074 00000 n 0000111610 00000 n 0000112033 00000 n 0000111750 00000 n 0000111888 00000 n 0000113080 00000 n 0000111433 00000 n 0000109291 00000 n 0000112212 00000 n 0000112258 00000 n 0000112304 00000 n 0000112350 00000 n 0000112396 00000 n 0000112442 00000 n 0000112488 00000 n 0000112534 00000 n 0000112580 00000 n 0000112624 00000 n 0000112670 00000 n 0000112760 00000 n 0000112805 00000 n 0000112851 00000 n 0000112897 00000 n 0000112943 00000 n 0000113034 00000 n 0000111559 00000 n 0000115435 00000 n 0000115098 00000 n 0000113242 00000 n 0000115209 00000 n 0000118390 00000 n 0000118189 00000 n 0000115584 00000 n 0000118300 00000 n 0000308141 00000 n 0000121941 00000 n 0000122080 00000 n 0000122635 00000 n 0000121772 00000 n 0000118551 00000 n 0000122498 00000 n 0000122590 00000 n 0000122289 00000 n 0000121898 00000 n 0000125610 00000 n 0000125131 00000 n 0000122784 00000 n 0000125242 00000 n 0000125334 00000 n 0000125380 00000 n 0000125426 00000 n 0000125472 00000 n 0000125564 00000 n 0000128986 00000 n 0000132919 00000 n 0000129228 00000 n 0000128833 00000 n 0000125759 00000 n 0000129136 00000 n 0000129182 00000 n 0000128959 00000 n 0000133069 00000 n 0000133212 00000 n 0000133895 00000 n 0000132742 00000 n 0000129365 00000 n 0000133711 00000 n 0000133849 00000 n 0000133461 00000 n 0000132868 00000 n 0000136813 00000 n 0000136610 00000 n 0000134032 00000 n 0000136721 00000 n 0000154007 00000 n 0000138889 00000 n 0000154421 00000 n 0000138736 00000 n 0000136950 00000 n 0000154145 00000 n 0000154329 00000 n 0000138862 00000 n 0000158109 00000 n 0000158395 00000 n 0000158252 00000 n 0000158792 00000 n 0000157940 00000 n 0000154602 00000 n 0000158562 00000 n 0000306891 00000 n 0000158700 00000 n 0000158746 00000 n 0000158066 00000 n 0000161548 00000 n 0000161824 00000 n 0000161395 00000 n 0000158941 00000 n 0000161686 00000 n 0000161732 00000 n 0000161521 00000 n 0000163909 00000 n 0000163706 00000 n 0000161961 00000 n 0000163817 00000 n 0000163863 00000 n 0000167230 00000 n 0000166383 00000 n 0000164034 00000 n 0000166494 00000 n 0000166540 00000 n 0000166586 00000 n 0000166632 00000 n 0000166678 00000 n 0000166724 00000 n 0000166770 00000 n 0000166816 00000 n 0000166862 00000 n 0000166908 00000 n 0000166954 00000 n 0000167000 00000 n 0000167046 00000 n 0000167092 00000 n 0000167138 00000 n 0000167184 00000 n 0000308285 00000 n 0000170413 00000 n 0000168880 00000 n 0000167355 00000 n 0000168991 00000 n 0000169037 00000 n 0000169083 00000 n 0000169129 00000 n 0000169175 00000 n 0000169221 00000 n 0000169267 00000 n 0000169313 00000 n 0000169359 00000 n 0000169405 00000 n 0000169451 00000 n 0000169497 00000 n 0000169543 00000 n 0000169589 00000 n 0000169635 00000 n 0000169681 00000 n 0000169727 00000 n 0000169773 00000 n 0000169819 00000 n 0000169865 00000 n 0000169911 00000 n 0000169957 00000 n 0000170003 00000 n 0000170049 00000 n 0000170095 00000 n 0000170141 00000 n 0000170187 00000 n 0000170233 00000 n 0000170279 00000 n 0000170325 00000 n 0000170371 00000 n 0000173123 00000 n 0000174464 00000 n 0000172970 00000 n 0000170538 00000 n 0000173268 00000 n 0000173314 00000 n 0000173360 00000 n 0000173406 00000 n 0000173452 00000 n 0000173498 00000 n 0000173544 00000 n 0000173590 00000 n 0000173636 00000 n 0000173682 00000 n 0000173728 00000 n 0000173774 00000 n 0000173820 00000 n 0000173866 00000 n 0000173912 00000 n 0000173958 00000 n 0000174004 00000 n 0000174050 00000 n 0000174096 00000 n 0000174142 00000 n 0000174188 00000 n 0000174234 00000 n 0000174280 00000 n 0000174326 00000 n 0000174372 00000 n 0000174418 00000 n 0000173096 00000 n 0000177926 00000 n 0000175886 00000 n 0000174589 00000 n 0000175997 00000 n 0000176043 00000 n 0000176089 00000 n 0000176135 00000 n 0000176181 00000 n 0000176227 00000 n 0000176273 00000 n 0000176319 00000 n 0000176365 00000 n 0000176411 00000 n 0000176457 00000 n 0000176503 00000 n 0000176549 00000 n 0000176595 00000 n 0000176641 00000 n 0000176687 00000 n 0000176733 00000 n 0000176779 00000 n 0000176825 00000 n 0000176871 00000 n 0000176917 00000 n 0000176963 00000 n 0000177009 00000 n 0000177055 00000 n 0000177101 00000 n 0000177147 00000 n 0000177193 00000 n 0000177238 00000 n 0000177284 00000 n 0000177329 00000 n 0000177375 00000 n 0000177420 00000 n 0000177466 00000 n 0000177512 00000 n 0000177558 00000 n 0000177604 00000 n 0000177650 00000 n 0000177696 00000 n 0000177742 00000 n 0000177788 00000 n 0000177834 00000 n 0000177880 00000 n 0000180243 00000 n 0000180385 00000 n 0000184727 00000 n 0000184877 00000 n 0000181098 00000 n 0000180077 00000 n 0000178051 00000 n 0000180522 00000 n 0000180570 00000 n 0000180618 00000 n 0000180666 00000 n 0000180714 00000 n 0000180762 00000 n 0000180810 00000 n 0000180858 00000 n 0000180906 00000 n 0000180954 00000 n 0000181002 00000 n 0000181050 00000 n 0000180207 00000 n 0000185028 00000 n 0000188181 00000 n 0000185368 00000 n 0000184551 00000 n 0000181249 00000 n 0000185179 00000 n 0000184681 00000 n 0000188469 00000 n 0000188022 00000 n 0000185506 00000 n 0000188327 00000 n 0000188152 00000 n 0000190960 00000 n 0000191104 00000 n 0000191246 00000 n 0000191390 00000 n 0000191534 00000 n 0000191964 00000 n 0000190765 00000 n 0000188619 00000 n 0000191726 00000 n 0000191868 00000 n 0000191916 00000 n 0000190895 00000 n 0000203443 00000 n 0000203410 00000 n 0000194567 00000 n 0000194961 00000 n 0000195342 00000 n 0000194390 00000 n 0000192102 00000 n 0000195105 00000 n 0000194764 00000 n 0000195294 00000 n 0000194520 00000 n 0000201512 00000 n 0000201944 00000 n 0000201656 00000 n 0000202123 00000 n 0000198621 00000 n 0000198364 00000 n 0000195480 00000 n 0000198478 00000 n 0000198526 00000 n 0000198574 00000 n 0000201800 00000 n 0000202296 00000 n 0000202758 00000 n 0000201307 00000 n 0000198843 00000 n 0000202519 00000 n 0000202614 00000 n 0000202662 00000 n 0000202710 00000 n 0000308435 00000 n 0000201438 00000 n 0000203284 00000 n 0000203121 00000 n 0000202896 00000 n 0000203236 00000 n 0000306402 00000 n 0000203476 00000 n 0000306468 00000 n 0000203502 00000 n 0000306524 00000 n 0000203528 00000 n 0000203554 00000 n 0000203580 00000 n 0000203606 00000 n 0000203742 00000 n 0000203838 00000 n 0000206710 00000 n 0000206934 00000 n 0000207577 00000 n 0000207769 00000 n 0000207884 00000 n 0000207978 00000 n 0000210769 00000 n 0000210997 00000 n 0000211622 00000 n 0000306229 00000 n 0000211816 00000 n 0000306292 00000 n 0000211842 00000 n 0000212188 00000 n 0000212302 00000 n 0000212397 00000 n 0000214956 00000 n 0000215181 00000 n 0000215803 00000 n 0000215992 00000 n 0000216409 00000 n 0000216517 00000 n 0000224936 00000 n 0000225163 00000 n 0000225815 00000 n 0000226010 00000 n 0000226469 00000 n 0000226592 00000 n 0000236040 00000 n 0000236261 00000 n 0000236961 00000 n 0000237149 00000 n 0000237429 00000 n 0000237532 00000 n 0000243844 00000 n 0000244069 00000 n 0000244715 00000 n 0000244906 00000 n 0000245169 00000 n 0000245279 00000 n 0000250288 00000 n 0000250509 00000 n 0000251211 00000 n 0000251398 00000 n 0000265230 00000 n 0000265509 00000 n 0000268614 00000 n 0000268835 00000 n 0000271871 00000 n 0000272093 00000 n 0000290355 00000 n 0000290574 00000 n 0000306010 00000 n 0000308517 00000 n 0000308615 00000 n 0000312797 00000 n 0000313552 00000 n 0000314348 00000 n 0000315226 00000 n 0000316128 00000 n 0000317030 00000 n 0000317938 00000 n 0000318844 00000 n 0000319762 00000 n 0000320680 00000 n 0000321603 00000 n 0000322505 00000 n 0000323411 00000 n 0000324317 00000 n 0000325246 00000 n 0000326187 00000 n 0000327043 00000 n 0000327673 00000 n 0000328380 00000 n 0000329339 00000 n 0000329590 00000 n 0000329829 00000 n 0000329867 00000 n 0000329992 00000 n trailer < ]>> startxref 330418 %%EOF biblatex-biber-1.8/doc/biber-texworks.png000444000000000000 6452312230324176 17745 0ustar00rootroot000000000000PNG  IHDR-3viCCPICC ProfilexXgTMCNC99GE`rI $ A JP$I "a=߷{uNw?]USU֭0~$! 4wp~8@ h?@AZ'Zqns{(n>JKB`#aA0FӇc8gX[D@BN x@pE=qȤy@ cu d1 ce @g./? #D}:{/6|.p~goO0.-Jb\FD 1.)ix9cs7,:.J}??Cxy]' *t!:~aϧp^ ā *@c`pDU 4@1(͠#`|؃  Q@t3 C CzIr\!O( b$( ʁrAO( _. G#I"B aFAx"1dDQhD "^!!H$CHq"RitDz CqTd>yُ|F wP %RAlPDT0**FբZP7:MfCFh{':GWߡ0 #Qb0>st L3lbXf(V k%`ð)"l# ;npȐ8$ԓt,R*FfV>&}M:O p8\w7 ##!S" &@VHvlll\\܉<<&#EEE3/۔tFn%-ckTTTZTT1TT^SPR PPKۨ?PoHӘӤӼY Ѻ&V>Cc}oӯ3222D10t0Lxoƿ23j13^a8ƸʤΔiYٗ9y"bReUȚ &fvmm݀= CÇ#cSӛ3W!W/:7!w8w90 O"O$/W׃7wϔ/3?)"?%V%A&A# ! ! ` aEa_#"9/עQyQobh1% Z 3xk|ْRrR~RURҴ҉ҏɈeJdޞ8"ģ?eEeeKe?ə];W#p]"bZI[)^]iGY^9LYJʒjA\mZKUABcVWMZsQKXGQkM[J;Dyn]n^}}Ou9s݆hClFFD:ucƽ&&V&&'EN|l056f:qTV3`fdvl\<ܢbR2ֲߊŪꏵuMM-m햝]ݴyW,ՎN睞wsJqzFLԙ,~.T.hW;z}yDb񻛦[۲{Gǒ5e/ |ob>>e>[f5G~v~M$mQAA)Ay!&!աPGa0  >Qiy?&* j0Z$Jb~̭sss=ܱ 3ΗAqgzy/\M%& %J%$NKz̞|!yņʔT.]F]<|ĕ+n/ӤӉ/J_-z1)Y z]C3wZK.Wnj<e“ߕh4]g~ cwvozXnPR!P_\꿥x:&fֲN>ް8r[;wʛMiw{ls_?{DzN?rx4fX'OjڹK::2;qɝG]1]A+O=?עw>gZ]j/_T|JUˠ!-^?Qy<:91Fo_;n>Lt/L'R''}jѝ#}u>yb!snIf}Yyo߃ﭤҬ^_Z{CϐG77j~4V6vN^>v@đQ! ;_5P8@7L/a1 0;u` R@ ӈ9e#&y$:a11ϱUq qr_yʻ)`*!T*< SQ\CO@_脊96 E~%KX=jSZ6:%zO f ׍NGG! %eZǙNg7\f\vn<齙չm iKvhJ1]WFoM?Q[UۛR^9? d$ل Cc<${8SLAJ:>&  c'S.<+u=#ӜKsr(~#fMB""c7$%%[Mdd^H5=kTRS,W"*+頻֨ūkkj>y[n`b(cj6^5ys4]s; Rnx+}kj/6 Qv+휸su1pŻ.Z&ܘܦk<y7{_##8#* _0EE%DGt{N`j-?ٔO}@G h`@_` x4>Ii9E7>[;7}Cq .,W9$S|,󄜅DZE/وJ9{JV_NE^BOUIEGU\MEHZYS;@n=HݤK]3asw&+`hn'`{թϙa(v}kX@\H0[H@hw8>",}^xl[\RWӬ3D1_]fkœgկk4{mCV'7;v}z+5w(|rPkYY2vvϐvBh ۇGh3 \ ^I8~dᜀ g2*X@˰D!a!> 1E"PX** Z~ C1daưxD$d4%'S%+%G5o3%/e1U55u. M:SipCQq)ņeVe5\6h]@BNJ3!5)uDt S4-<5d0̶M`xljUWoC"?^|"'upf##b"ף}c6b3dH+S. ^qN]Mfes<.*b/^Vjq]Zsz6^צ{o?jk y">yأAaSc}Il\yRo*b+ziwոcPFww0Q;Jp&)#lwLzr CJ@Y]%IuX]KYkWPZgidho*u*棉VTVgΉ.3n'yOV [WxqB6~rt!6죣JXd9nrǝ1\:F=4ǏVm;y pHYs   IDATx @`yQ5Q4)(1DTy +j״RMVFv xKLTJ# -BS RW^wgco6p߉w><{)((S(vvv @H X@SS͛7AiuPٳgCCT*}CH 4hy<۷ArzW.4  $> dGraGEH Jķ$ + " @H +Vllۮ36F@Vv|ˀ}5+v8wǹ]eB`d!qL`o_vrrbBp$*ɸ׶2!> O;<VO68k >dٍ7~+x!S;[r>p~ 3!MteW{ '#Ol{=Aםpi 򄋓72_ ^y;)_;''dɉ_ԟր8\=45T96/Kɥ0tin{K½գ!TK[uI?+^_o%3}QKX[+l{'W2رM1!v}"/]&S%ҚtE;NH #83m#CoچT{e6ZBEWÏ<_G_v1@;7 rJrǗɸkGv[ͬk k 2M%|>sGx5y?yfҜnZbt/x%} VZ8vqf!-Kn*vӻ֌K??;9`c<|ݏ'yas޿<]'#6}||]EWsP,G "?|34c֟ y,srg 7$들U]zNovMW؏]7L~m3LڰjjA hA4Ye I@@.]hM7߆G1N.qCs=?HȖ~z82kd(J o !¦Rhq  [`YbbDUTbh&&c33NewPy)p?ϞSHCbRƻWo֖I^] C*q)Cݸ{h:iңo;Bs}}]<;4gktŽ5j+حsCmKD1%e`y=zs )p [un={Fb/*UhÅS[[7+$vjd]"Fă[6@W_}k9\Jj̎i=~IZ|CLRy*ugyI_}D6>dzkI:= † HmL*Vv [JN-[ܴqTvߏkR<{yɟg/_#8:1W˵(RK#]VsFH t6xJ4 Lbۙ@ߑ@?Oet $Й |pϽvc#$Щv#"$ v#$v#"$ v#$Pم+:/@He~h~#$:3 Kv;CϑvJi$@% СH tB @g&ۙ@'$ @g&:CߑZ$(耻xtkC4(D|~5@X,v:uR]Ё6QGm?{{{Huߴny @GkΥum?Tm=C"7~#/+>sf)~ˮ0sC\܆ asq2Kx.3%aYj92aƲY_`B Rǀ!$`e:~·eoMV+7oxym31pbYx7P8<  SX@vK6&Vgģ}O5Zڌڵ[׳RtA<]~X V-ܑ2u4EKYe+ŒQӲ2bDeTffVW ~Լ[l/z- T#uvOoO5{*,^&Mi:dX5T?!|֌Ԅ hdZ .E+I"mMHJ'y-&sy4 /yvnR7<7%~jlGY7}" sN _UxK(.)<]XAW|oؓq֤! ~mtmBNEKBn[O"qF% xQuuUN+g.m5$ Ȯ@ K@[|MK%>7ye(ɍxD[5݈&Y7fq҈]SG5 nQ nC Z@fʾ¯] $sr 뷶쪨m{y '+ ]@H=pRRRbbZ~<2a+ps Y5mZ,ނ:fZv*zͿpsr;9@ D\WזD2f=\Y@[v}U+ xW}{vLtg k&uF|k֐?$CO4|W}V :y,` $`CPv` Ut @,2/k߰;&=S W(A&hcMzn%}_8Y/K89<9ؾZa}m]}A@ Xمk]N.N|-tv6#lBHpvv5h[( nn.\fO*nnFH~ n^@ nq\ΣCHs\G\PnmkP\հ $ZK/ k-1GH Ee,| $Z(%H 욅;#$ZKe $`]ag$@k d%_~@ [3`AHfrPtRs"Fm#6~;b7$+DRPP` (m;`]s`7$DeeN ǃTё:$l^fЂwhl $`W=ʮGLV|&LGg؊@#` 37,[Ȗ[2] = 򒎝0c٬e/0lt:a@]KnJ/&RVZթi8YͿ&ƆlM$< .0 ~i7?.Cȑba ]=?$Oyh*@A2K$lNhH!.\"X053myWiPaaѶQ^L [H˲ Y[Z]D(RF^^Q۲KC#X<-+s ?*0c5kz>{.}kp,Ӗ)N'bj\ !Uޙ P`'ߚ'@]dq ݉G]om I/'??oSI!~hZX~p#:s2icnZ&]l]\]h^AA^ܤo*ܔ#;|9eNM6YbܳIF/;9;/{Ld T,ǐ1_[2`S3pkʟwgąM!E2 ƅ"\%PkʳM2-TיG3$k@s߽+i m2~Fv:d7_^ӱ6@ZK6U(K jmT.H ?]D D0xlBB((tU",@.nIK[=k|b;.(65Blu*cOYS5{NmT,.ذ {6Pk6QI,^yF]]UʕoBZq .C@y=#Z̘4j0 , a 鿦8o))1;L<^W"}MKݘ8i8䕡+8u{UK݈f2kszëό l8Rl 8oʾ2lVu81p}Gzhu$NJJJLLOLX i*ݝ]ĄKV3{欼ߝmhHr|.5w(Ϗ1#|pM\U%zjK.u˸J$3Ե©0J@vɇ~بXsl_RhLB Hh} 6Zu|=a pN@;Hu=251ɇO˺] $й _%>Cf {$@kgme^<.$ړ7s6T~:!t6PL+a+`0EfxC1b`.]S( ӊMH tufhKvGH ]9(@Ae:z@ٵC"$`Pv8H ]9(@AN*Zǡ@/+uk1cH HM/85@HxxxxϞ=ƞ @[_hnY>}:fS621?&SGA;$Х ̝;5W`tǎFXv,FP27T@Y1ٶ DȞda+0{(ͽl=o1/ʮ) v$PWWǪU.hܫrܸ3qؽ(PjMqւّz[Z=&v@]0jNƻw,}`%LٍeFE t/u鉘9?^f EB4D (#[47ٺf بU=-3) ]S(¦۱Xs'u@CjXA crmEMϕ|jBѤ w2cbvAY`gv-Iƪ[DBF|<{а T 4d8YY6wuFvf;Al:M\4iK?ykΉtGtL9gAɬ*?Î6 vN}#hwᑝmaY羐:V])Kj{u 54ҟ{C+\rJ Fk,}`ZLv͊۟_mʬ]fЄŌ[9ᵈұ?Y5xowz}``R I@+W|ɎR&sŮ\95/#_X~ׯK$Ņϒo77$T߀K$2ep IDAT{|DϞ$!+k럯xwd`| $@PMv T_.z6ً7UO lm7Yj奕ԅۿBYd~LLmdiuZ_dog%[Yek,!u~ /lJ"~WJu5/hXr-VZKk5x>>H n#{ v}7[3FMH2Oeγ>oc y=çKΞ*24~= ܩ}ioQVI9˼٫ pz Qț B[tfNVB#'LUWs|ٳ%IHxLr/Y߀q2cܓwA gl ;H-avMLDkumkR4]bUΉLmYc3Ÿzga;MD+m>{-#ߤBrӾ)TM,X053myWi!UoŔY[Z]Df,ZU.ȫ[n=T.l}WVB%|꽂8=V>BȖW-lNI ya!AK?l$dݱUiN2g?,C`JqR>+ćAH\ !_ZGM ɀcHA~)=GAF$_< c .$>%~o[Px[, ]Kq`֏V<:y,9Nv}:/%nnC>teq87j?1o;p=ߑg`@a,(e 6ku$~ d ;woWWBrYwoDʣۃWnjv46{ګ͠sОaN{N:ϙ8@ǚsWiu1e>{պg^q$ؑj٩.'˛4:4p@4[%h:4$t/[F.\l˔8'fZѝiJ`] Q9&dg+n9>><}% M8uQ7co̟ڋj/·}DC%OlUWI]=\uNtg u")qrʹz14~\UG\$[\Sg$͖GSLS'$fYkj&iDl_w?2n֘$G} 0'u~=rO#ΞӍKnzW#]1wv+ND,M^3橧Ys)d)O/$dN WP|. @)9|nʰfّ;B"زcw%{Z5;js[<vnGU#kh..vO|fͥPŠ++L# EL d*w$cuTH\[ZôDYYӅJYoaGOC |I}B1lK2gT2k֩=g{1p "d"Jl N#5a=; tyH>GFC*_=rω+Y)K_V#dȥdסW_S.;lfϨ?l) >,&yi(u[,fn7sF:*'h &&yS}JWE?Ο:|_oQfxe$;^FN $о@[kkko*.K\o _yc[Kܾu>܊VD555"dt..P>fawluv]Ȝ$>9d{kE{$lUJ(`{`QkYX;RvаC@% &cB lgʎEyC]CN`;@6N@SFA@57{OeV85q *vEEWz2v$@{`S]&BENޥըΗ y1]^PPe`p 4Q3Ԭh ذ݌x1qխ[7;׺'(4@H 誡;fl$@;0teYLm{Lm@H6k (AH Xd#8@H6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !k5AH6q((Vs($lʮmg !O$l_|aOwEԺ(L %0w\.\-d;v0wb.sCU$@466hB_Bp [ګiZ655A1q@ eW+H uuutѳM]awA^(+r\Eocf;V#ʮDH +Llooo{bv/ʮ) v$ˊ&4uL~ `]0eb.L+H nGP90BP6iG6ugيf" cscf1zʮV?@aV&]@˙W*GvԿ;4ZCYW2&Cf1 .2B mo@s0_T|@l D  tnBlMyF(/ej٨[Ww^=TgѝW]]&؂@;u hLN>K M (ßDFExT#boC]- Cf1zfjXAH0w`Oڤ7qn6DeU,P02 z "h[Y.FF28ͯEhvQ2Y0;W6n %'eLv߽H$rppx;w;΀qx$E&-OAhqttoEB -l P@Qَs¶k N1Eݨj0e,|  P94 ^UVmYcW]Ѫu Y{QmchSݮ2zX#8 $`yZ)@lZ mju;fCkj:@jzw=5cfY&@MPRP*zj5qcf1zfjmTVv;ѵ%x,D.TMX5$-꺺6FGJ +G´IhD@NJ繻߳K[l".D]PR\e2OLTY-)`*nI'+T :;;4W\53v+wWz1,?2>6jB_hu"9'Ή轰PF Ťwܽxw 3留xt vEA$M14W*Mu /dPTJzg¦(?cӜsŠyC_ZPմ8b"45HțkVemxe]qL^znF\JSuǦ1oGٸXlG Fl`/*7)hnKI{Qd.05`bHLe++ڷ 4%ZR]aSRnYٖYa3J}ճRASâ6f̻!D]0` KHB13*<4U4?RyyEm˦- IlAMv2oUFg\PzJ@)Pu;%MDoKqї7llB6=KNjx|WUYSz <_pJܔ詇;z`eDAR[v ĀMޗhɤkuY` 60Wv!ۅK\\=SM;=sGL+RҬ6oJ&4\d1旊GLN ; IcEKw!Z s㢢yhNJ.  eW-Pj/82{'ûؾ\V[I%)枆oա $`a]S@y!U+/keG'Fh4T@%rݱR6@#E7^'daeϒI" &40t\={ֲh(JO@9IKkVu~hCKǃ/UvQyR ,,;B<5kwjW@EF |(@5{`  kBl +ИpPJ4 pj*|EV-ta<3tD" im !Uw.ѵۢ($tߺکr5qؐVUmOFq_Xޗ_!ˈ(UIHnɢS!7jלl-iigyO $`af.7oޔH$\M!]7ngE2's \y8giĮFL }0$7כckm] tCKaBIჇOM^Jr(NWaU4%|ߧ@:cjpzR4|NYLPf=CۘB Pffn59|HI)8:xFM֑pRRR]X@ذaȑ# //-2dfXX-qڬS Khru4ٜ(dbPLMX1LLhd˽csV^̎nޘ 5tZ0^h{0b:m406bc|4θEU.H4tqZA9 zGoИPקѨ C,مu'$$4P[(Ea#sN^^^|xAx[<̒] TH(FX.a3YWJ̕] kW7 $Ю̺]=@]n<@Kez z@$%+@ٵc!$% vÊA!$`PvؠgH tI(TIDAT]bPH X/]=6@]n<@Kez z@$%+@ٵc!$% vÊA!$`PvؠgH tI(]bPH X/zCϐVMMMBN_o?{(G"S j={dU"ϊw[]cW#ǿ5@?O^]W?pFD!pq{{x#rr-(:<2f̘X888t&O#JB!?:thɠj7yfCx _}waA>;iA͆~H%U5+7=uC,ާ0#G>}_߿9*ᗿG=jԨWW\4ia=/x~!AĎCNN>>O<>BQW_\cFꂲ7@~maaҥKw uyjYYxG}#""Z[";}Nլ!8DSq͎ЯW촿e|`(Am&5$E +PL"@:kNOQ}LOWam!TAѕ[QτRfР3m*4:s(ufzz) 8믧 Fx˟SH hhhhFë;h.vي?ʗ/Wl,v*w0.@5L |a\]]z꩟~ b6t?{pT.eh)'oR4l0)Wٜ07}yBUңo8lugRoM)-pU*s>;b jR3ʮI O^ٷo_C7{ }~o8{M#7NU(vxzWJ^Yyg ÅT?S@{E#D*6AȨQeS?@3WOtݠ%LwʞCo&Y6co62W{5{ 7r,3 bۃx&"!\d0Dۑ /B ad  pzJu3%h)_B~9A4Oc)An1[͕䰔*I2;XgP Јtv$y_3d}֥YRUS"_{˿@X"' Ϟ^1 @}M =@v!{.LQ__o?zMQ(r4B: ޥ}CMYS\x7qLbP,'^m>?i@uޣ, kp{;;{z^`i^գ(F@@z nݺrA 8BdjP}u!f*iVO_Ȓ|y}/:ӇI;طo9Y2m [xmQOH0o}zGe>>~Lh.??\{b,fiqq@ZګW/H12p+cv}L9q㼺{ VO!k369}ȇ ZA_\{χW&N}=rt)''?vIzzQC݈j].10kB xgg޾E n3+ 9,U \;1+HrsOVq'le=dyamEڹw{GKB!A<ǖ-Eef݃.xk["` HVW9)))111h%˗/>|_ 7K@A|aXik9\,=Q@,e܅,Ir:588o߾9s@kTs-9c~B޺gX( #:Õspʟ~:LTI]"ul=q$? ( o 9k37 v$,H \www9 _oo={ Nf@@ 7N۴i|;v,|9G0}cRߛrgyuۉO #\XF+GO^(РF ڱD)xp.{{7O> r"/fF.$`yO'N۾};ذaB{k׮/pSvC' I ^b}ܹ#:}G NUkFko#XDW]s&;{Mez } @4!C}@;$; p顇!Ud Ӳ>x~JJJ4T kZvqCI\Pv[k88\p (/|FwW&ͅELf%SP| o90 / k;p`9B@fjIHi/Qkm˂`*B:/IvM eײ 15; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); my $S; # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('sort-order.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setblxoption('labelyear', undef); Biber::Config->setblxoption('labelalpha', 0); # (re)generate informtion based on option settings $biber->prepare; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); is_deeply([ $main->get_keys ], ['L2','L3','L1B','L1','L4','L5','L1A','L7','L8','L6','L9'], 'citeorder'); # nty $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}}, {'0000' => {}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([ $main->get_keys ], ['L5','L1A','L1','L1B','L2','L3','L4','L8','L7','L6','L9'], 'nty'); # nyt $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}}, {'0000' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['L5','L1A','L1','L1B','L2','L3','L4','L8','L7','L6','L9'], 'nyt'); # nyvt $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}}, {'0000' => {}} ], [ {}, {'volume' => {}}, {'0000' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ] ]; $main->set_sortscheme($S); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['L5','L1','L1A','L1B','L2','L3','L4','L8','L7','L6','L9'], 'nyvt'); # nyvt with volume padding $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}}, {'0000' => {}} ], [ {}, {'volume' => {pad_side => 'right'}}, {'0000' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ] ]; $main->set_sortscheme($S); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['L5','L1A','L1','L1B','L2','L3','L4','L8','L7','L6','L9'], 'nyvt with volume padding'); # ynt $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}}, {'9999' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], ]; $main->set_sortscheme($S); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['L3','L1B','L1A','L1','L4','L2','L8','L7','L6','L9','L5'], 'ynt'); # ynt with year substring $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {'substring_side' => 'left', 'substring_width' => 3}}, {'9999' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], ]; $main->set_sortscheme($S); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['L3','L1B','L1A','L1','L2','L4','L8','L7','L6','L9','L5'], 'ynt with year substring'); # ydnt $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {sort_direction => 'descending'}, {'sortyear' => {}}, {'year' => {}}, {'9999' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], ]; $main->set_sortscheme($S); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); # This is correct as "aaaaaa" sorts before all years when descending is_deeply([$main->get_keys], ['L5','L9','L6','L7','L8','L2','L4','L1A','L1','L1B','L3'], 'ydnt'); # anyt $S = [ [ {}, {'presort' => {}} ], [ {}, {'labelalpha' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}}, {'0000' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); Biber::Config->setblxoption('labelalpha', 1); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['L1B','L1A','L1','L2','L3','L4','L5','L8','L7','L6','L9'], 'anyt'); Biber::Config->setblxoption('labelalpha', 0); # anyvt $S = [ [ {}, {'presort' => {}} ], [ {}, {'labelalpha' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}}, {'0000' => {}} ], [ {}, {'volume' => {}}, {'0000' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ] ]; $main->set_sortscheme($S); Biber::Config->setblxoption('labelalpha', 1); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['L1B','L1','L1A','L2','L3','L4','L5','L8','L7','L6','L9'], 'anyvt'); # nty with descending n $S = [ [ {sort_direction => 'descending'}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}}, {'0000' => {}} ], ]; $main->set_sortscheme($S); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['L9','L6','L7','L8','L5','L4','L3','L2','L1B','L1A','L1'], 'nty with descending n'); # testing case sensitive with fastsort # In alphabetic, all uppercase comes before lower so the # "sortcase => 1" on location means that "edinburgh" sorts at the end after "London" # Take this out of the location sorting spec and it fails as it should $S = [ [ {sortcase => 1}, {'location' => {}} ] ]; $main->set_sortscheme($S); $biber->set_output_obj(Biber::Output::bbl->new()); # Have to set locale to something which understand lexical/case differences for this test # otherwise testing on Windows doesn't work ... Biber::Config->setoption('sortlocale', 'C'); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['L1B','L1','L1A','L2','L3','L4','L5','L7','L8','L9','L6'], 'location - sortcase=1'); # Test nosort option $S = [ [ {}, {'title' => {}} ] ]; $main->set_sortscheme($S); # Set nosort for tests, skipping "The " in titles so L7 should sort before L6 Biber::Config->setoption('nosort', [{ name => 'type_title', value => q/\AThe\s+/ }]); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['L1A','L1','L1B','L2','L3','L4','L5','L7','L6','L9','L8'], 'nosort 1'); # Testing sorting keys which have the same order as they were cited in the same \cite*{} cmd. # In this case, they will be tied on sorting=none and can be further sorted by other fields $S = [ [ {}, {'citeorder' => {}} ], [ {}, {'year' => {}} ], ]; $main->set_sortscheme($S); # Have to do a citekey deletion as we are not re-reading the .bcf which would do it for us # Otherwise, we have citekeys and allkeys which confuses fetch_data() $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([ $main->get_keys ], ['L3','L2','L1B','L1','L4','L5','L1A','L7','L8','L6','L9'], 'sorting=none + year'); # Testing special case of sorting=none and allkeys because in this case "citeorder" means # bib order $S = [ [ {}, {'citeorder' => {}} ], ]; $main->set_sortscheme($S); # Have to do a citekey deletion as we are not re-reading the .bcf which would do it for us # Otherwise, we have citekeys and allkeys which confuses fetch_data() $section->del_citekeys; Biber::Config->reset_keyorder(0); $section->set_allkeys(1); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['L1','L1A','L1B','L2','L3','L4','L5','L6','L7','L8','L9'], 'sorting=none and allkeys'); biblatex-biber-1.8/t/dm-constraints.t000555000000000000 1250212230324176 17111 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 16; use Biber; use Biber::Output::bbl; use Biber::Utils; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('dm-constraints.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('validate_datamodel', 1); Biber::Config->setoption('sortlocale', 'C'); # Now generate the information $biber->prepare; my $section = $biber->sections->get_section(0); my $bibentries = $section->bibentries; my $c1 = [ "Datamodel: Entry 'c1' (dm-constraints.bib): Invalid entry type 'badtype' - defaulting to 'misc'" ]; my $c2 = [ "Datamodel: Entry 'c2' (dm-constraints.bib): Field 'badfield' invalid in data model - ignoring", "Datamodel: Entry 'c2' (dm-constraints.bib): Invalid field 'journaltitle' for entrytype 'eta'", "Datamodel: Entry 'c2' (dm-constraints.bib): Missing mandatory field 'author'" ]; my $c3 = [ "Datamodel: Entry 'c3' (dm-constraints.bib): Invalid format (integer) of field 'month' - ignoring field", "Datamodel: Entry 'c3' (dm-constraints.bib): Invalid value (pattern match fails) for field 'gender'" ]; my $c4 = [ "Datamodel: Entry 'c4' (dm-constraints.bib): Invalid value of field 'month' must be '<=12' - ignoring field", "Datamodel: Entry 'c4' (dm-constraints.bib): Invalid value of field 'field1' must be '>=5' - ignoring field" ]; # There would also have been a date+year constraint violation in the next test if # it weren't for the fact that the date processing in bibtex.pm already deals with this # and removed the year field my $c5 = [ "Overwriting field 'year' with year value from field 'date' for entry 'c5'", "Datamodel: Entry 'c5' (dm-constraints.bib): Constraint violation - none of fields (field5, field6) must exist when all of fields (field2, field3, field4) exist. Ignoring them." ]; my $c6 = [ "Datamodel: Entry 'c6' (dm-constraints.bib): Constraint violation - one of fields (field7, field8) must exist when all of fields (field1, field2) exist", "Datamodel: Entry 'c6' (dm-constraints.bib): Constraint violation - all of fields (field9, field10) must exist when all of fields (field5, field6) exist" ]; my $c7 = [ "Datamodel: Entry 'c7' (dm-constraints.bib): Missing mandatory field - one of 'fielda, fieldb' must be defined", "Datamodel: Entry 'c7' (dm-constraints.bib): Constraint violation - none of fields (field7) must exist when one of fields (field5, field6) exist. Ignoring them."]; my $c8 = [ "Datamodel: Entry 'c8' (dm-constraints.bib): Constraint violation - none of fields (field4) must exist when none of fields (field2, field3) exist. Ignoring them.", "Datamodel: Entry 'c8' (dm-constraints.bib): Constraint violation - one of fields (field10, field11) must exist when none of fields (field8, field9) exist", "Datamodel: Entry 'c8' (dm-constraints.bib): Constraint violation - all of fields (field12, field13) must exist when none of fields (field6) exist" ]; my $c10 = [ "Datamodel: Entry 'c10' (dm-constraints.bib): Invalid ISBN in value of field 'isbn'", "Datamodel: Entry 'c10' (dm-constraints.bib): Invalid ISSN in value of field 'issn'" ]; is_deeply($bibentries->entry('c1')->get_field('warnings'), $c1, 'Constraints test 1' ); is_deeply($bibentries->entry('c2')->get_field('warnings'), $c2, 'Constraints test 2' ); is_deeply($bibentries->entry('c3')->get_field('warnings'), $c3, 'Constraints test 3a' ); ok(is_undef($bibentries->entry('c3')->get_field('month')), 'Constraints test 3b' ); is_deeply($bibentries->entry('c4')->get_field('warnings'), $c4, 'Constraints test 4a' ); ok(is_undef($bibentries->entry('c4')->get_field('month')), 'Constraints test 4b' ); is_deeply($bibentries->entry('c5')->get_field('warnings'), $c5, 'Constraints test 5a' ); ok(is_undef($bibentries->entry('c5')->get_field('field5')), 'Constraints test 5b' ); ok(is_undef($bibentries->entry('c5')->get_field('field6')), 'Constraints test 5c' ); is_deeply($bibentries->entry('c6')->get_field('warnings'), $c6, 'Constraints test 6' ); is_deeply($bibentries->entry('c7')->get_field('warnings'), $c7, 'Constraints test 7a' ); ok(is_undef($bibentries->entry('c7')->get_field('field7')), 'Constraints test 7b' ); is_deeply($bibentries->entry('c8')->get_field('warnings'), $c8, 'Constraints test 8a' ); ok(is_undef($bibentries->entry('c8')->get_field('field4')), 'Constraints test 8b' ); ok(is_undef($bibentries->entry('c9')->get_field('warnings')), 'Constraints test 9' ); is_deeply($bibentries->entry('c10')->get_field('warnings'), $c10, 'Constraints test 10' ); biblatex-biber-1.8/t/pod-coverage.t000555000000000000 130212230324177 16474 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use Test::More; # This is used at top-level in bibtex.pm and the tests moan if it's not set. use Biber::Config; Biber::Config->setoption('mssplit', '_'); # Ensure a recent version of Test::Pod::Coverage my $min_tpc = 1.08; eval "use Test::Pod::Coverage $min_tpc"; plan skip_all => "Test::Pod::Coverage $min_tpc required for testing POD coverage" if $@; # Test::Pod::Coverage doesn't require a minimum Pod::Coverage version, # but older versions don't recognize some common documentation styles my $min_pc = 0.18; eval "use Pod::Coverage $min_pc"; plan skip_all => "Pod::Coverage $min_pc required for testing POD coverage" if $@; all_pod_coverage_ok(); biblatex-biber-1.8/t/zoterordfxml.t000555000000000000 1311312230324177 16703 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 3; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new( configfile => 'biber-test.conf'); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('zoterordfxml.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # THERE IS A CONFIG FILE BEING READ TO TEST USER MAPS TOO! # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; my $l1 = q| \entry{http://0-muse.jhu.edu.pugwash.lib.warwick.ac.uk:80/journals/theory_and_event/v005/5.3ranciere.html}{article}{} \name{labelname}{1}{}{% {{hash=2d6c91380dc6798fd8219e73cf91f468}{Rancière}{R\bibinitperiod}{Jacques}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=2d6c91380dc6798fd8219e73cf91f468}{Rancière}{R\bibinitperiod}{Jacques}{J\bibinitperiod}{}{}{}{}}% } \name{translator}{2}{}{% {{hash=c95c30a625fdc9f3e9339afb92cf7161}{Panagia}{P\bibinitperiod}{Davide}{D\bibinitperiod}{}{}{}{}}% {{hash=2e68c1ae590a37eeceab55f5594589f7}{Bowlby}{B\bibinitperiod}{Rachel}{R\bibinitperiod}{}{}{}{}}% } \strng{namehash}{2d6c91380dc6798fd8219e73cf91f468} \strng{fullhash}{2d6c91380dc6798fd8219e73cf91f468} \field{sortinit}{R} \field{labelyear}{2001} \field{datelabelsource}{} \field{labeltitle}{ten theses on politics} \field{journaltitle}{Theory \& Event} \field{library}{Project MUSE} \field{note}{Volume 5, Issue 3, 2001} \field{number}{3} \field{title}{ten theses on politics} \field{volume}{5} \field{year}{2001} \verb{url} \verb http://0-muse.jhu.edu.pugwash.lib.warwick.ac.uk:80/journals/theory_and_event/v005/5.3ranciere.html \endverb \endentry |; my $l2 = q| \entry{urn:isbn:0713990023}{book}{} \name{labelname}{1}{}{% {{hash=984e5967448051538555a64aac11ed21}{Foucault}{F\bibinitperiod}{Michel}{M\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=984e5967448051538555a64aac11ed21}{Foucault}{F\bibinitperiod}{Michel}{M\bibinitperiod}{}{}{}{}}% } \list{location}{1}{% {London}% } \list{publisher}{1}{% {Allen Lane}% } \strng{namehash}{984e5967448051538555a64aac11ed21} \strng{fullhash}{984e5967448051538555a64aac11ed21} \field{sortinit}{F} \field{labelyear}{1988} \field{datelabelsource}{} \field{labeltitle}{The History of Sexuality volume 3: The Care of the Self} \field{isbn}{0713990023} \field{library}{webcat.warwick.ac.uk Library Catalog} \field{pagetotal}{279} \field{title}{The History of Sexuality volume 3: The Care of the Self} \field{year}{1988} \endentry |; my $l3 = q| \entry{item_54}{inbook}{} \name{labelname}{1}{}{% {{hash=984e5967448051538555a64aac11ed21}{Foucault}{F\bibinitperiod}{Michel}{M\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=984e5967448051538555a64aac11ed21}{Foucault}{F\bibinitperiod}{Michel}{M\bibinitperiod}{}{}{}{}}% } \name{editor}{1}{}{% {{hash=59e41b906187fcc9bff2bddd24f99eca}{Lotringer}{L\bibinitperiod}{Sylvère}{S\bibinitperiod}{}{}{}{}}% } \name{translator}{2}{}{% {{hash=0826582066ef5e3af124decf97f18d39}{Hochroth}{H\bibinitperiod}{Lysa}{L\bibinitperiod}{}{}{}{}}% {{hash=d3cb970ad9fd48a90099fc50aec54981}{Johnston}{J\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \list{location}{1}{% {New York}% } \list{publisher}{1}{% {Semiotext(e)}% } \strng{namehash}{984e5967448051538555a64aac11ed21} \strng{fullhash}{984e5967448051538555a64aac11ed21} \field{sortinit}{F} \field{labelyear}{1996} \field{labelmonth}{03\bibdatedash 04} \field{labelday}{04\bibdatedash 07} \field{datelabelsource}{} \field{labeltitle}{The Ethics of the Concern for Self as a Practice of Freedom} \field{booktitle}{Foucault Live: Interviews, 1961-1984} \field{day}{04} \field{endday}{07} \field{endmonth}{04} \field{endyear}{1996} \field{month}{03} \field{title}{The Ethics of the Concern for Self as a Practice of Freedom} \field{year}{1996} \field{pages}{432\bibrangedash 449} \endentry |; is( $out->get_output_entry('http://0-muse.jhu.edu.pugwash.lib.warwick.ac.uk:80/journals/theory_and_event/v005/5.3ranciere.html', $main), $l1, 'Basic Zotero RDF/XML test - 1') ; is( $out->get_output_entry('urn:isbn:0713990023', $main), $l2, 'Basic Zotero RDF/XML test - 2') ; is( $out->get_output_entry('item_54', $main), $l3, 'Basic Zotero RDF/XML test - 3') ; biblatex-biber-1.8/t/sort-uc.t000555000000000000 1125512230324176 15544 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 6; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); my $S; # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('sort-uc.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests Biber::Config->setoption('sortlocale', 'sv_SE'); # U::C Swedish tailoring $biber->prepare; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $shs = $biber->sortlists->get_list(0, 'shorthand', 'shorthand'); # Shorthands are sorted by shorthand (as per bcf) is_deeply([$main->get_keys], ['LS6','LS5','LS2','LS1','LS3','LS4'], 'U::C tailoring - 1'); is_deeply([$shs->get_keys], ['LS3', 'LS4','LS2','LS1'], 'U::C tailoring - 2'); # Set sorting of shorthands to global sorting default $shs->set_sortscheme(Biber::Config->getblxoption('sorting')); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$shs->get_keys], ['LS2', 'LS1','LS3','LS4'], 'U::C tailoring - 3'); # Descending name in Swedish collation $S = [ [ {}, {'presort' => {}} ], [ {final => 1}, {'sortkey' => {}} ], [ {sort_direction => 'descending'}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ] ]; $main->set_sortscheme($S); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['LS3','LS4','LS1','LS2','LS5','LS6'], 'U::C tailoring descending - 1'); # Local lower before upper setting $S = [ [ {sortupper => 0}, {'title' => {}} ] ]; $main->set_sortscheme($S); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['LS5', 'LS6', 'LS4', 'LS3','LS2','LS1'], 'upper_before_lower locally false'); # Local case insensitive negates the sortupper being false as this no longer # means anything so it reverts to bib order for LS3 and LS4 # For this, have to reparse the .bcf otherwise the citekey order from previous # test is kept for things that are not sort distinguishable $biber->parse_ctrlfile('sort-uc.bcf'); $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $biber->set_output_obj(Biber::Output::bbl->new()); $S = [ [ {sortupper => 0, sortcase => 0}, {'title' => {}} ] ]; $main->set_sortscheme($S); $biber->prepare; is_deeply([$main->get_keys], ['LS5', 'LS6','LS3', 'LS4','LS2','LS1'], 'sortcase locally false, upper_before_lower locally false'); biblatex-biber-1.8/t/pod.t000555000000000000 35512230324176 14671 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use Test::More; # Ensure a recent version of Test::Pod my $min_tp = 1.22; eval "use Test::Pod $min_tp"; plan skip_all => "Test::Pod $min_tp required for testing POD" if $@; all_pod_files_ok(); biblatex-biber-1.8/t/names.t000555000000000000 10562212230324176 15275 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 54; use Biber; use Biber::Output::bbl; use Log::Log4perl; use Unicode::Normalize; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('names.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('namesep', 'und'); # Testing custom name splitting string Biber::Config->setoption('others_string', 'andere'); # Testing custom implied "et al" Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setblxoption('mincitenames', 3); # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; my $name1 = { firstname => 'John', firstname_i => ['J'], lastname => 'Doe', lastname_i => ['D'], nameinitstring => 'Doe_J', namestring => 'Doe, John', prefix => undef, prefix_i => undef, strip => { firstname => 0, lastname => 0, prefix => undef, suffix => undef }, suffix => undef, suffix_i => undef}; my $name2 = { firstname => 'John', firstname_i => ['J'], lastname => 'Doe', lastname_i => ['D'], nameinitstring => 'Doe_J_J', namestring => 'Doe, Jr, John', prefix => undef, prefix_i => undef, strip => { firstname => 0, lastname => 0, prefix => undef, suffix => 0 }, suffix => 'Jr', suffix_i => ['J'] } ; my $name3 = { firstname => 'Johann~Gottfried', firstname_i => ['J', 'G'], lastname => 'Berlichingen zu~Hornberg', lastname_i => ['B', 'z', 'H'], nameinitstring => 'v_Berlichingen_zu_Hornberg_JG', namestring => 'von Berlichingen zu Hornberg, Johann Gottfried', prefix => 'von', prefix_i => ['v'], strip => { firstname => 0, lastname => 0, prefix => 0, suffix => undef }, suffix => undef, suffix_i => undef}; my $name4 = { firstname => 'Johann~Gottfried', firstname_i => ['J', 'G'], lastname => 'Berlichingen zu~Hornberg', lastname_i => ['B', 'z', 'H'], nameinitstring => 'Berlichingen_zu_Hornberg_JG', namestring => 'von Berlichingen zu Hornberg, Johann Gottfried', prefix => 'von', prefix_i => ['v'], strip => { firstname => 0, lastname => 0, prefix => 0, suffix => undef }, suffix => undef, suffix_i => undef}; my $name5 = { firstname => undef, firstname_i => undef, lastname => 'Robert and Sons, Inc.', lastname_i => ['R'], nameinitstring => '{Robert_and_Sons,_Inc.}', namestring => 'Robert and Sons, Inc.', prefix => undef, prefix_i => undef, strip => { firstname => undef, lastname => 1, prefix => undef, suffix => undef }, suffix => undef, suffix_i => undef}; my $name6 = { firstname => 'ʿAbdallāh', firstname_i => ['A'], lastname => 'al-Ṣāliḥ', lastname_i => ['Ṣ'], prefix => undef, prefix_i => undef, suffix => undef, suffix_i => undef, strip => { firstname => 0, lastname => 0, prefix => undef, suffix => undef }, namestring => 'al-Ṣāliḥ, ʿAbdallāh', nameinitstring => 'al-Ṣāliḥ_A' } ; my $name7 = { firstname => 'Jean Charles~Gabriel', firstname_i => ['J', 'C', 'G'], lastname => 'Vallée~Poussin', lastname_i => ['V', 'P'], prefix => 'de~la', prefix_i => ['d', 'l'], suffix => undef, suffix_i => undef, strip => { firstname => 0, lastname => 0, prefix => 0, suffix => undef }, namestring => 'de la Vallée Poussin, Jean Charles Gabriel', nameinitstring => 'dl_Vallée_Poussin_JCG' } ; my $name8 = { firstname => 'Jean Charles Gabriel', firstname_i => ['J'], lastname => 'Vallée~Poussin', lastname_i => ['V', 'P'], prefix => 'de~la', prefix_i => ['d', 'l'], suffix => undef, suffix_i => undef, strip => { firstname => 1, lastname => 0, prefix => 0, suffix => undef }, namestring => 'de la Vallée Poussin, Jean Charles Gabriel', nameinitstring => 'Vallée_Poussin_J' } ; my $name9 = { firstname => 'Jean Charles Gabriel {de la}~Vallée', firstname_i => ['J', 'C', 'G', 'd', 'V'], lastname => 'Poussin', lastname_i => ['P'], prefix => undef, prefix_i => undef, suffix => undef, suffix_i => undef, strip => { firstname => 0, lastname => 0, prefix => undef, suffix => undef }, namestring => 'Poussin, Jean Charles Gabriel {de la} Vallée', nameinitstring => 'Poussin_JCGdV' } ; my $name10 = { firstname => 'Jean Charles~Gabriel', firstname_i => ['J', 'C', 'G'], lastname => 'Vallée Poussin', lastname_i => ['V'], prefix => 'de~la', prefix_i => ['d', 'l'], suffix => undef, suffix_i => undef, strip => { firstname => 0, lastname => 1, prefix => 0, suffix => undef }, namestring => 'de la Vallée Poussin, Jean Charles Gabriel', nameinitstring => '{Vallée_Poussin}_JCG' } ; my $name11 = { firstname => 'Jean Charles Gabriel', firstname_i => ['J'], lastname => 'Vallée Poussin', lastname_i => ['V'], prefix => 'de~la', prefix_i => ['d', 'l'], suffix => undef, suffix_i => undef, strip => { firstname => 1, lastname => 1, prefix => 0, suffix => undef }, namestring => 'de la Vallée Poussin, Jean Charles Gabriel', nameinitstring => '{Vallée_Poussin}_J' } ; my $name12 = { firstname => 'Jean Charles~Gabriel', firstname_i => ['J', 'C', 'G'], lastname => 'Poussin', lastname_i => ['P'], prefix => undef, prefix_i => undef, suffix => undef, suffix_i => undef, strip => { firstname => 0, lastname => 0, prefix => undef, suffix => undef }, namestring => 'Poussin, Jean Charles Gabriel', nameinitstring => 'Poussin_JCG' } ; my $name13 = { firstname => 'Jean~Charles', firstname_i => ['J', 'C'], lastname => 'Poussin Lecoq', lastname_i => ['P'], prefix => undef, prefix_i => undef, suffix => undef, suffix_i => undef, strip => { firstname => 0, lastname => 1, prefix => undef, suffix => undef }, namestring => 'Poussin Lecoq, Jean Charles', nameinitstring => '{Poussin_Lecoq}_JC' } ; my $name14 = { firstname => 'J.~C.~G.', firstname_i => ['J', 'C', 'G'], lastname => 'Vallée~Poussin', lastname_i => ['V', 'P'], prefix => 'de~la', prefix_i => ['d', 'l'], suffix => undef, suffix_i => undef, strip => { firstname => 0, lastname => 0, prefix => 0, suffix => undef }, namestring => 'de la Vallée Poussin, J. C. G.', nameinitstring => 'dl_Vallée_Poussin_JCG' } ; # Note that the lastname initials are wrong because the prefix "El-" was not stripped # This is because the default noinit regexp only strips lower-case prefices to protect # hyphenated names my $name15 = { firstname => 'E.~S.', firstname_i => ['E', 'S'], lastname => 'El-{M}allah', lastname_i => ['E-M'], prefix => undef, prefix_i => undef, suffix => undef, suffix_i => undef, strip => { firstname => 0, lastname => 0, prefix => undef, suffix => undef }, namestring => 'El-{M}allah, E. S.', nameinitstring => 'El-{M}allah_ES' } ; my $name16 = { firstname => 'E.~S.', firstname_i => ['E', 'S'], lastname => '{K}ent-{B}oswell', lastname_i => ['K-B'], prefix => undef, prefix_i => undef, suffix => undef, suffix_i => undef, strip => { firstname => 0, lastname => 0, prefix => undef, suffix => undef }, namestring => '{K}ent-{B}oswell, E. S.', nameinitstring => '{K}ent-{B}oswell_ES' } ; my $name17 = { firstname => 'A.~N.', firstname_i => ['A', 'N'], lastname => 'Other', lastname_i => ['O'], prefix => undef, prefix_i => undef, suffix => undef, suffix_i => undef, strip => { firstname => 0, lastname => 0, prefix => undef, suffix => undef }, namestring => 'Other, A. N.', nameinitstring => 'Other_AN' } ; my $l1 = q| \entry{L1}{book}{} \name{labelname}{1}{}{% {{hash=72287a68c1714cb1b9f4ab9e03a88b96}{Adler}{A\bibinitperiod}{Alfred}{A\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=72287a68c1714cb1b9f4ab9e03a88b96}{Adler}{A\bibinitperiod}{Alfred}{A\bibinitperiod}{}{}{}{}}% } \strng{namehash}{72287a68c1714cb1b9f4ab9e03a88b96} \strng{fullhash}{72287a68c1714cb1b9f4ab9e03a88b96} \field{sortinit}{A} \endentry |; my $l2 = q| \entry{L2}{book}{} \name{labelname}{1}{}{% {{hash=1c867a2b5ceb243bab70afb18702dc04}{Bull}{B\bibinitperiod}{Bertie\bibnamedelima B.}{B\bibinitperiod\bibinitdelim B\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=1c867a2b5ceb243bab70afb18702dc04}{Bull}{B\bibinitperiod}{Bertie\bibnamedelima B.}{B\bibinitperiod\bibinitdelim B\bibinitperiod}{}{}{}{}}% } \strng{namehash}{1c867a2b5ceb243bab70afb18702dc04} \strng{fullhash}{1c867a2b5ceb243bab70afb18702dc04} \field{sortinit}{B} \endentry |; my $l3 = q| \entry{L3}{book}{} \name{labelname}{1}{}{% {{hash=cecd18116c43ee86e5a136b6e0362948}{Crop}{C\bibinitperiod}{C.\bibnamedelimi Z.}{C\bibinitperiod\bibinitdelim Z\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=cecd18116c43ee86e5a136b6e0362948}{Crop}{C\bibinitperiod}{C.\bibnamedelimi Z.}{C\bibinitperiod\bibinitdelim Z\bibinitperiod}{}{}{}{}}% } \strng{namehash}{cecd18116c43ee86e5a136b6e0362948} \strng{fullhash}{cecd18116c43ee86e5a136b6e0362948} \field{sortinit}{C} \endentry |; my $l4 = q| \entry{L4}{book}{} \name{labelname}{1}{}{% {{hash=675883f3aca7c6069c0b154d47af4c86}{Decket}{D\bibinitperiod}{Derek\bibnamedelima D}{D\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=675883f3aca7c6069c0b154d47af4c86}{Decket}{D\bibinitperiod}{Derek\bibnamedelima D}{D\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% } \strng{namehash}{675883f3aca7c6069c0b154d47af4c86} \strng{fullhash}{675883f3aca7c6069c0b154d47af4c86} \field{sortinit}{D} \endentry |; my $l5 = q| \entry{L5}{book}{} \name{labelname}{1}{}{% {{hash=c2d41bb75b01ec2339c1050981f9c2cc}{Eel}{E\bibinitperiod}{Egbert}{E\bibinitperiod}{von}{v\bibinitperiod}{}{}}% } \name{author}{1}{}{% {{hash=c2d41bb75b01ec2339c1050981f9c2cc}{Eel}{E\bibinitperiod}{Egbert}{E\bibinitperiod}{von}{v\bibinitperiod}{}{}}% } \strng{namehash}{c2d41bb75b01ec2339c1050981f9c2cc} \strng{fullhash}{c2d41bb75b01ec2339c1050981f9c2cc} \field{sortinit}{v} \endentry |; my $l6 = q| \entry{L6}{book}{} \name{labelname}{1}{}{% {{hash=68e9105aa98379a85ef6cd2e7ac29c00}{Frome}{F\bibinitperiod}{Francis}{F\bibinitperiod}{van\bibnamedelimb der\bibnamedelima valt}{v\bibinitperiod\bibinitdelim d\bibinitperiod\bibinitdelim v\bibinitperiod}{}{}}% } \name{author}{1}{}{% {{hash=68e9105aa98379a85ef6cd2e7ac29c00}{Frome}{F\bibinitperiod}{Francis}{F\bibinitperiod}{van\bibnamedelimb der\bibnamedelima valt}{v\bibinitperiod\bibinitdelim d\bibinitperiod\bibinitdelim v\bibinitperiod}{}{}}% } \strng{namehash}{68e9105aa98379a85ef6cd2e7ac29c00} \strng{fullhash}{68e9105aa98379a85ef6cd2e7ac29c00} \field{sortinit}{v} \endentry |; my $l7 = q| \entry{L7}{book}{} \name{labelname}{1}{}{% {{hash=4dbef3c5464f951b537a49ba93676a9a}{Gloom}{G\bibinitperiod}{Gregory\bibnamedelima R.}{G\bibinitperiod\bibinitdelim R\bibinitperiod}{van}{v\bibinitperiod}{}{}}% } \name{author}{1}{}{% {{hash=4dbef3c5464f951b537a49ba93676a9a}{Gloom}{G\bibinitperiod}{Gregory\bibnamedelima R.}{G\bibinitperiod\bibinitdelim R\bibinitperiod}{van}{v\bibinitperiod}{}{}}% } \strng{namehash}{4dbef3c5464f951b537a49ba93676a9a} \strng{fullhash}{4dbef3c5464f951b537a49ba93676a9a} \field{sortinit}{v} \endentry |; my $l8 = q| \entry{L8}{book}{} \name{labelname}{1}{}{% {{hash=9fb4d242b62f047e4255282864eedb97}{Henkel}{H\bibinitperiod}{Henry\bibnamedelima F.}{H\bibinitperiod\bibinitdelim F\bibinitperiod}{van}{v\bibinitperiod}{}{}}% } \name{author}{1}{}{% {{hash=9fb4d242b62f047e4255282864eedb97}{Henkel}{H\bibinitperiod}{Henry\bibnamedelima F.}{H\bibinitperiod\bibinitdelim F\bibinitperiod}{van}{v\bibinitperiod}{}{}}% } \strng{namehash}{9fb4d242b62f047e4255282864eedb97} \strng{fullhash}{9fb4d242b62f047e4255282864eedb97} \field{sortinit}{v} \endentry |; my $l9 = q| \entry{L9}{book}{} \name{labelname}{1}{}{% {{hash=1734924c4c55de5bb18d020c34a5249e}{{Iliad\bibnamedelimb Ipswich}}{I\bibinitperiod}{Ian}{I\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=1734924c4c55de5bb18d020c34a5249e}{{Iliad\bibnamedelimb Ipswich}}{I\bibinitperiod}{Ian}{I\bibinitperiod}{}{}{}{}}% } \strng{namehash}{1734924c4c55de5bb18d020c34a5249e} \strng{fullhash}{1734924c4c55de5bb18d020c34a5249e} \field{sortinit}{I} \endentry |; my $l10 = q| \entry{L10}{book}{} \name{labelname}{1}{}{% {{hash=758a11cc45860d7635b1f6091b2d95a9}{Jolly}{J\bibinitperiod}{James}{J\bibinitperiod}{}{}{III}{I\bibinitperiod}}% } \name{author}{1}{}{% {{hash=758a11cc45860d7635b1f6091b2d95a9}{Jolly}{J\bibinitperiod}{James}{J\bibinitperiod}{}{}{III}{I\bibinitperiod}}% } \strng{namehash}{758a11cc45860d7635b1f6091b2d95a9} \strng{fullhash}{758a11cc45860d7635b1f6091b2d95a9} \field{sortinit}{J} \endentry |; my $l10a = q| \entry{L10a}{book}{} \name{labelname}{1}{}{% {{hash=5e60d697e6432558eab7dccf9890eb79}{Pimentel}{P\bibinitperiod}{Joseph\bibnamedelima J.}{J\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{Jr.}{J\bibinitperiod}}% } \name{author}{1}{}{% {{hash=5e60d697e6432558eab7dccf9890eb79}{Pimentel}{P\bibinitperiod}{Joseph\bibnamedelima J.}{J\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{Jr.}{J\bibinitperiod}}% } \strng{namehash}{5e60d697e6432558eab7dccf9890eb79} \strng{fullhash}{5e60d697e6432558eab7dccf9890eb79} \field{sortinit}{P} \endentry |; my $l11 = q| \entry{L11}{book}{} \name{labelname}{1}{}{% {{hash=ef4ab7eba5cd140b54ba4329e1dda90b}{Kluster}{K\bibinitperiod}{Kevin}{K\bibinitperiod}{van}{v\bibinitperiod}{Jr.}{J\bibinitperiod}}% } \name{author}{1}{}{% {{hash=ef4ab7eba5cd140b54ba4329e1dda90b}{Kluster}{K\bibinitperiod}{Kevin}{K\bibinitperiod}{van}{v\bibinitperiod}{Jr.}{J\bibinitperiod}}% } \strng{namehash}{ef4ab7eba5cd140b54ba4329e1dda90b} \strng{fullhash}{ef4ab7eba5cd140b54ba4329e1dda90b} \field{sortinit}{v} \endentry |; my $l12 = q| \entry{L12}{book}{} \name{labelname}{1}{}{% {{hash=87634072c9c157a0b9ca250bd6914a65}{Vall{\'e}e\bibnamedelima Poussin}{V\bibinitperiod\bibinitdelim P\bibinitperiod}{Charles\bibnamedelimb Louis\bibnamedelimb Xavier\bibnamedelima Joseph}{C\bibinitperiod\bibinitdelim L\bibinitperiod\bibinitdelim X\bibinitperiod\bibinitdelim J\bibinitperiod}{de\bibnamedelima la}{d\bibinitperiod\bibinitdelim l\bibinitperiod}{}{}}% } \name{author}{1}{}{% {{hash=87634072c9c157a0b9ca250bd6914a65}{Vall{\'e}e\bibnamedelima Poussin}{V\bibinitperiod\bibinitdelim P\bibinitperiod}{Charles\bibnamedelimb Louis\bibnamedelimb Xavier\bibnamedelima Joseph}{C\bibinitperiod\bibinitdelim L\bibinitperiod\bibinitdelim X\bibinitperiod\bibinitdelim J\bibinitperiod}{de\bibnamedelima la}{d\bibinitperiod\bibinitdelim l\bibinitperiod}{}{}}% } \strng{namehash}{87634072c9c157a0b9ca250bd6914a65} \strng{fullhash}{87634072c9c157a0b9ca250bd6914a65} \field{sortinit}{d} \endentry |; my $l13 = q| \entry{L13}{book}{} \name{labelname}{1}{}{% {{hash=5e79da6869afaf0d38e01285b494d555}{Van\bibnamedelimb de\bibnamedelima Graaff}{V\bibinitperiod\bibinitdelim d\bibinitperiod\bibinitdelim G\bibinitperiod}{R.\bibnamedelimi J.}{R\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=5e79da6869afaf0d38e01285b494d555}{Van\bibnamedelimb de\bibnamedelima Graaff}{V\bibinitperiod\bibinitdelim d\bibinitperiod\bibinitdelim G\bibinitperiod}{R.\bibnamedelimi J.}{R\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% } \strng{namehash}{5e79da6869afaf0d38e01285b494d555} \strng{fullhash}{5e79da6869afaf0d38e01285b494d555} \field{sortinit}{V} \endentry |; my $l14 = q| \entry{L14}{book}{} \name{labelname}{1}{}{% {{hash=2319907d9a5d5dd46da77879bdb7e609}{St\bibnamedelima John-Mollusc}{S\bibinitperiod\bibinitdelim J\bibinithyphendelim M\bibinitperiod}{Oliver}{O\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=2319907d9a5d5dd46da77879bdb7e609}{St\bibnamedelima John-Mollusc}{S\bibinitperiod\bibinitdelim J\bibinithyphendelim M\bibinitperiod}{Oliver}{O\bibinitperiod}{}{}{}{}}% } \strng{namehash}{2319907d9a5d5dd46da77879bdb7e609} \strng{fullhash}{2319907d9a5d5dd46da77879bdb7e609} \field{sortinit}{S} \endentry |; my $l15 = q| \entry{L15}{book}{} \name{labelname}{1}{}{% {{hash=379b415d869a4751678a5eee23b07e48}{Gompel}{G\bibinitperiod}{Roger\bibnamedelima P.{\,}G.}{R\bibinitperiod\bibinitdelim P\bibinitperiod}{van}{v\bibinitperiod}{}{}}% } \name{author}{1}{}{% {{hash=379b415d869a4751678a5eee23b07e48}{Gompel}{G\bibinitperiod}{Roger\bibnamedelima P.{\,}G.}{R\bibinitperiod\bibinitdelim P\bibinitperiod}{van}{v\bibinitperiod}{}{}}% } \strng{namehash}{379b415d869a4751678a5eee23b07e48} \strng{fullhash}{379b415d869a4751678a5eee23b07e48} \field{sortinit}{v} \endentry |; my $l16 = q| \entry{L16}{book}{} \name{labelname}{1}{}{% {{hash=0a9532fa161f6305ec403c1c85951bdf}{Gompel}{G\bibinitperiod}{Roger\bibnamedelima {P.\,G.}}{R\bibinitperiod\bibinitdelim P\bibinitperiod}{van}{v\bibinitperiod}{}{}}% } \name{author}{1}{}{% {{hash=0a9532fa161f6305ec403c1c85951bdf}{Gompel}{G\bibinitperiod}{Roger\bibnamedelima {P.\,G.}}{R\bibinitperiod\bibinitdelim P\bibinitperiod}{van}{v\bibinitperiod}{}{}}% } \strng{namehash}{0a9532fa161f6305ec403c1c85951bdf} \strng{fullhash}{0a9532fa161f6305ec403c1c85951bdf} \field{sortinit}{v} \endentry |; my $l17 = q| \entry{L17}{book}{} \name{labelname}{1}{}{% {{hash=766d5329cf995fcc7c1cef19de2a2ae8}{Lovecraft}{L\bibinitperiod}{Bill\bibnamedelima H.{\,}P.}{B\bibinitperiod\bibinitdelim H\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=766d5329cf995fcc7c1cef19de2a2ae8}{Lovecraft}{L\bibinitperiod}{Bill\bibnamedelima H.{\,}P.}{B\bibinitperiod\bibinitdelim H\bibinitperiod}{}{}{}{}}% } \strng{namehash}{766d5329cf995fcc7c1cef19de2a2ae8} \strng{fullhash}{766d5329cf995fcc7c1cef19de2a2ae8} \field{sortinit}{L} \endentry |; my $l18 = q| \entry{L18}{book}{} \name{labelname}{1}{}{% {{hash=58620d2c7d6839bac23306c732c563fb}{Lovecraft}{L\bibinitperiod}{Bill\bibnamedelima {H.\,P.}}{B\bibinitperiod\bibinitdelim H\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=58620d2c7d6839bac23306c732c563fb}{Lovecraft}{L\bibinitperiod}{Bill\bibnamedelima {H.\,P.}}{B\bibinitperiod\bibinitdelim H\bibinitperiod}{}{}{}{}}% } \strng{namehash}{58620d2c7d6839bac23306c732c563fb} \strng{fullhash}{58620d2c7d6839bac23306c732c563fb} \field{sortinit}{L} \endentry |; my $l19 = q| \entry{L19}{book}{} \name{labelname}{1}{}{% {{hash=83caa52f21f97e572dd3267bdf62978a}{Mustermann}{M\bibinitperiod}{Klaus-Peter}{K\bibinithyphendelim P\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=83caa52f21f97e572dd3267bdf62978a}{Mustermann}{M\bibinitperiod}{Klaus-Peter}{K\bibinithyphendelim P\bibinitperiod}{}{}{}{}}% } \strng{namehash}{83caa52f21f97e572dd3267bdf62978a} \strng{fullhash}{83caa52f21f97e572dd3267bdf62978a} \field{sortinit}{M} \endentry |; my $l19a = q| \entry{L19a}{book}{} \name{labelname}{1}{}{% {{hash=0963f6904ccfeaac2770c5882a587001}{Lam}{L\bibinitperiod}{Ho-Pun}{H\bibinithyphendelim P\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=0963f6904ccfeaac2770c5882a587001}{Lam}{L\bibinitperiod}{Ho-Pun}{H\bibinithyphendelim P\bibinitperiod}{}{}{}{}}% } \strng{namehash}{0963f6904ccfeaac2770c5882a587001} \strng{fullhash}{0963f6904ccfeaac2770c5882a587001} \field{sortinit}{L} \endentry |; my $l20 = q| \entry{L20}{book}{} \name{labelname}{1}{}{% {{hash=fdaa0936724be89ef8bd16cf02e08c74}{Ford}{F\bibinitperiod}{{John\bibnamedelimb Henry}}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=fdaa0936724be89ef8bd16cf02e08c74}{Ford}{F\bibinitperiod}{{John\bibnamedelimb Henry}}{J\bibinitperiod}{}{}{}{}}% } \strng{namehash}{fdaa0936724be89ef8bd16cf02e08c74} \strng{fullhash}{fdaa0936724be89ef8bd16cf02e08c74} \field{sortinit}{F} \endentry |; my $l21 = q| \entry{L21}{book}{} \name{labelname}{1}{}{% {{hash=386636fcff8e45365739b90e4986cd7b}{Smith}{S\bibinitperiod}{{\v S}omeone}{{\v S}\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=386636fcff8e45365739b90e4986cd7b}{Smith}{S\bibinitperiod}{{\v S}omeone}{{\v S}\bibinitperiod}{}{}{}{}}% } \strng{namehash}{386636fcff8e45365739b90e4986cd7b} \strng{fullhash}{386636fcff8e45365739b90e4986cd7b} \field{sortinit}{S} \endentry |; my $l22u = q| \entry{L22}{book}{} \name{labelname}{1}{}{% {{hash=e58b861545799d0eaf883402a882126e}{Šmith}{Š\bibinitperiod}{Someone}{S\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=e58b861545799d0eaf883402a882126e}{Šmith}{Š\bibinitperiod}{Someone}{S\bibinitperiod}{}{}{}{}}% } \strng{namehash}{e58b861545799d0eaf883402a882126e} \strng{fullhash}{e58b861545799d0eaf883402a882126e} \field{sortinit}{Š} \endentry |; my $l22 = q| \entry{L22}{book}{} \name{labelname}{1}{}{% {{hash=940a7383a6d76d516f02cf790a468362}{{\v S}mith}{{\v S}\bibinitperiod}{Someone}{S\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=940a7383a6d76d516f02cf790a468362}{{\v S}mith}{{\v S}\bibinitperiod}{Someone}{S\bibinitperiod}{}{}{}{}}% } \strng{namehash}{940a7383a6d76d516f02cf790a468362} \strng{fullhash}{940a7383a6d76d516f02cf790a468362} \field{sortinit}{\v{S}} \warn{\item The character 'Š' cannot be encoded in 'latin1'. sortinit will be set to macro '\v{S}' for entry 'L22'} \endentry |; my $l23 = q| \entry{L23}{book}{} \name{labelname}{1}{}{% {{hash=4389a3c0dc7da74487b50808ba9436ad}{Smith}{S\bibinitperiod}{Šomeone}{Š\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=4389a3c0dc7da74487b50808ba9436ad}{Smith}{S\bibinitperiod}{Šomeone}{Š\bibinitperiod}{}{}{}{}}% } \strng{namehash}{4389a3c0dc7da74487b50808ba9436ad} \strng{fullhash}{4389a3c0dc7da74487b50808ba9436ad} \field{sortinit}{S} \endentry |; my $l24 = q| \entry{L24}{book}{} \name{labelname}{1}{}{% {{hash=e58b861545799d0eaf883402a882126e}{Šmith}{Š\bibinitperiod}{Someone}{S\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=e58b861545799d0eaf883402a882126e}{Šmith}{Š\bibinitperiod}{Someone}{S\bibinitperiod}{}{}{}{}}% } \strng{namehash}{e58b861545799d0eaf883402a882126e} \strng{fullhash}{e58b861545799d0eaf883402a882126e} \field{sortinit}{Š} \endentry |; my $l25 = q| \entry{L25}{book}{} \name{labelname}{1}{}{% {{hash=7069367d4a4f37ffb0377e3830e98ed0}{{American\bibnamedelimb Psychological\bibnamedelimb Association,\bibnamedelimb Task\bibnamedelimb Force\bibnamedelimb on\bibnamedelimb the\bibnamedelimb Sexualization\bibnamedelimb of\bibnamedelimb Girls}}{A\bibinitperiod}{}{}{}{}{}{}}% } \name{author}{1}{}{% {{hash=7069367d4a4f37ffb0377e3830e98ed0}{{American\bibnamedelimb Psychological\bibnamedelimb Association,\bibnamedelimb Task\bibnamedelimb Force\bibnamedelimb on\bibnamedelimb the\bibnamedelimb Sexualization\bibnamedelimb of\bibnamedelimb Girls}}{A\bibinitperiod}{}{}{}{}{}{}}% } \strng{namehash}{7069367d4a4f37ffb0377e3830e98ed0} \strng{fullhash}{7069367d4a4f37ffb0377e3830e98ed0} \field{sortinit}{A} \endentry |; my $l26 = q| \entry{L26}{book}{} \name{labelname}{1}{}{% {{hash=d176a8af5ce1c45cb06875c4433f2fe2}{{Sci-Art\bibnamedelimb Publishers}}{S\bibinitperiod}{}{}{}{}{}{}}% } \name{author}{1}{}{% {{hash=d176a8af5ce1c45cb06875c4433f2fe2}{{Sci-Art\bibnamedelimb Publishers}}{S\bibinitperiod}{}{}{}{}{}{}}% } \strng{namehash}{d176a8af5ce1c45cb06875c4433f2fe2} \strng{fullhash}{d176a8af5ce1c45cb06875c4433f2fe2} \field{sortinit}{S} \endentry |; # Malformed anyway but a decent test my $l28 = q| \entry{L28}{book}{} \field{sortinit}{0} \warn{\item Name "Deux et al.,, O." is malformed (consecutive commas): skipping name} \endentry |; my $l29 = q| \entry{L29}{book}{} \name{labelname}{1}{}{% {{hash=59a5e43a502767d00e589eb29f863728}{{U.S.\bibnamedelimi Department\bibnamedelimb of\bibnamedelimb Health\bibnamedelimb and\bibnamedelimb Human\bibnamedelimb Services,\bibnamedelimb National\bibnamedelimb Institute\bibnamedelimb of\bibnamedelimb Mental\bibnamedelimb Health,\bibnamedelimb National\bibnamedelimb Heart,\bibnamedelimb Lung\bibnamedelimb and\bibnamedelimb Blood\bibnamedelimb Institute}}{U\bibinitperiod}{}{}{}{}{}{}}% } \name{author}{1}{}{% {{hash=59a5e43a502767d00e589eb29f863728}{{U.S.\bibnamedelimi Department\bibnamedelimb of\bibnamedelimb Health\bibnamedelimb and\bibnamedelimb Human\bibnamedelimb Services,\bibnamedelimb National\bibnamedelimb Institute\bibnamedelimb of\bibnamedelimb Mental\bibnamedelimb Health,\bibnamedelimb National\bibnamedelimb Heart,\bibnamedelimb Lung\bibnamedelimb and\bibnamedelimb Blood\bibnamedelimb Institute}}{U\bibinitperiod}{}{}{}{}{}{}}% } \strng{namehash}{59a5e43a502767d00e589eb29f863728} \strng{fullhash}{59a5e43a502767d00e589eb29f863728} \field{sortinit}{U} \endentry |; my $l31 = q| \entry{L31}{book}{} \name{labelname}{1}{}{% {{hash=81e45a75845feb42db453500b815e139}{{\~ Z}elly}{{\~ Z}\bibinitperiod}{Arthur}{A\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=81e45a75845feb42db453500b815e139}{{\~ Z}elly}{{\~ Z}\bibinitperiod}{Arthur}{A\bibinitperiod}{}{}{}{}}% } \name{editor}{1}{}{% {{hash=3282f5aed38860e7c19e0c37df41de6c}{{\~Z}elly}{{\~Z}\bibinitperiod}{Arthur}{A\bibinitperiod}{}{}{}{}}% } \name{translator}{1}{}{% {{hash=6193c0af691bd23c24b8d29b02323a7a}{{\~{Z}}elly}{{\~{Z}}\bibinitperiod}{Arthur}{A\bibinitperiod}{}{}{}{}}% } \strng{namehash}{81e45a75845feb42db453500b815e139} \strng{fullhash}{81e45a75845feb42db453500b815e139} \field{sortinit}{Z} \endentry |; is_deeply(Biber::Input::file::bibtex::parsename('John Doe', 'author'), $name1, 'parsename 1'); is_deeply(Biber::Input::file::bibtex::parsename('Doe, Jr, John', 'author'), $name2, 'parsename 2'); is_deeply(Biber::Input::file::bibtex::parsename('von Berlichingen zu Hornberg, Johann Gottfried', 'author', {useprefix => 1}), $name3, 'parsename 3') ; is_deeply(Biber::Input::file::bibtex::parsename('von Berlichingen zu Hornberg, Johann Gottfried', 'author', {useprefix => 0}), $name4, 'parsename 4') ; is_deeply(Biber::Input::file::bibtex::parsename('{Robert and Sons, Inc.}', 'author'), $name5, 'parsename 5') ; is_deeply(Biber::Input::file::bibtex::parsename('al-Ṣāliḥ, ʿAbdallāh', 'author', undef, 1), $name6, 'parsename 6') ; is_deeply(Biber::Input::file::bibtex::parsename('Jean Charles Gabriel de la Vallée Poussin', 'author', {useprefix => 1}, 1), $name7, 'parsename 7'); is_deeply(Biber::Input::file::bibtex::parsename('{Jean Charles Gabriel} de la Vallée Poussin', 'author', undef, 1), $name8, 'parsename 8'); is_deeply(Biber::Input::file::bibtex::parsename('Jean Charles Gabriel {de la} Vallée Poussin', 'author', undef, 1), $name9, 'parsename 9'); is_deeply(Biber::Input::file::bibtex::parsename('Jean Charles Gabriel de la {Vallée Poussin}', 'author', undef, 1), $name10, 'parsename 10'); is_deeply(Biber::Input::file::bibtex::parsename('{Jean Charles Gabriel} de la {Vallée Poussin}', 'author', undef, 1), $name11, 'parsename 11'); is_deeply(Biber::Input::file::bibtex::parsename('Jean Charles Gabriel Poussin', 'author'), $name12, 'parsename 12'); is_deeply(Biber::Input::file::bibtex::parsename('Jean Charles {Poussin Lecoq}', 'author'), $name13, 'parsename 13'); is_deeply(Biber::Input::file::bibtex::parsename('J. C. G. de la Vallée Poussin', 'author', {useprefix => 1}, 1), $name14, 'parsename 14'); is_deeply(Biber::Input::file::bibtex::parsename('E. S. El-{M}allah', 'author'), $name15, 'parsename 15'); is_deeply(Biber::Input::file::bibtex::parsename('E. S. {K}ent-{B}oswell', 'author'), $name16, 'parsename 16'); is_deeply(Biber::Input::file::bibtex::parsename('Other, A.~N.', 'author'), $name17, 'parsename 17'); is( $out->get_output_entry('L1', $main), $l1, 'First Last') ; is( $out->get_output_entry('L2', $main), $l2, 'First Initial. Last') ; is( $out->get_output_entry('L3', $main), $l3, 'Initial. Initial. Last') ; is( $out->get_output_entry('L4', $main), $l4, 'First Initial Last') ; is( $out->get_output_entry('L5', $main), $l5, 'First prefix Last') ; is( $out->get_output_entry('L6', $main), $l6, 'First prefix prefix Last') ; is( $out->get_output_entry('L7', $main), $l7, 'First Initial. prefix Last') ; is( $out->get_output_entry('L8', $main), $l8, 'First Initial prefix Last') ; is( $out->get_output_entry('L9', $main), $l9, 'First {Last Last}') ; is( $out->get_output_entry('L10', $main), $l10, 'Last, Suffix, First') ; is( $out->get_output_entry('L10a', $main), $l10a, 'Last, Suffix, First Initial.') ; is( $out->get_output_entry('L11', $main), $l11, 'prefix Last, Suffix, First') ; is( $out->get_output_entry('L13', $main), $l13, 'Last Last Last, Initial. Initial.'); is( $out->get_output_entry('L14', $main), $l14, 'Last Last-Last, First'); is( $out->get_output_entry('L15', $main), $l15, 'First F.{\bibinitdelim }F. Last'); is( $out->get_output_entry('L16', $main), $l16, 'First {F.\bibinitdelim F.} Last'); is( $out->get_output_entry('L17', $main), $l17, 'Last, First {F.\bibinitdelim F.}'); is( $out->get_output_entry('L18', $main), $l18, 'Last, First F.{\bibinitdelim }F.'); is( $out->get_output_entry('L19', $main), $l19, 'Firstname with hyphen'); is( $out->get_output_entry('L19a', $main), $l19a, 'Short firstname with hyphen'); is( $out->get_output_entry('L20', $main), $l20, 'Protected dual first name'); is( NFC($out->get_output_entry('L22', $main)), $l22u, 'LaTeX encoded unicode lastname - 1'); is( NFC($out->get_output_entry('L23', $main)), $l23, 'Unicode firstname'); is( NFC($out->get_output_entry('L24', $main)), $l24, 'Unicode lastname'); is( $out->get_output_entry('L25', $main), $l25, 'Single string name'); is( $out->get_output_entry('L26', $main), $l26, 'Hyphen at brace level <> 0'); is($section->bibentry('L27')->get_field('author')->count_names, 1, 'Bad name with 3 commas'); is( $out->get_output_entry('L28', $main), $l28, 'Bad name with consecutive commas'); is( $out->get_output_entry('L29', $main), $l29, 'Escaped name with 3 commas'); # Checking visibility # Count does not include the "and others" as this "name" is delete in the output driver is($bibentries->entry('V1')->get_field($bibentries->entry('V1')->get_labelname_info->{field})->count_names, '2', 'Name count for "and others" - 1'); is($bibentries->entry('V1')->get_field($bibentries->entry('V1')->get_labelname_info->{field})->get_visible_cite, '2', 'Visibility for "and others" - 1'); is($bibentries->entry('V2')->get_field($bibentries->entry('V2')->get_labelname_info->{field})->get_visible_cite, '1', 'Visibility for "and others" - 2'); # A few tests depend set to non UTF-8 output # Have to use a new biber object when trying to change encoding as this isn't # dealt with in ->prepare $biber->parse_ctrlfile('names.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('output_encoding', 'latin1'); # If you change the encoding options, you have to re-read the T::B data from the datasource # This won't happen unless you invalidate the T::B cache. Biber::Input::file::bibtex->init_cache; # Now generate the information $biber->prepare; $out = $biber->get_output_obj; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $bibentries = $section->bibentries; is_deeply($bibentries->entry('L21')->get_field($bibentries->entry('L21')->get_labelname_info->{field})->nth_name(1)->get_firstname_i, ['{\v S}'], 'Terseinitials 1'); is( $out->get_output_entry('L12', $main), $l12, 'First First First First prefix prefix Last Last') ; is( $out->get_output_entry('L21', $main), $l21, 'LaTeX encoded unicode firstname'); is( $out->get_output_entry('L22', $main), $l22, 'LaTeX encoded unicode lastname - 2'); is( $out->get_output_entry('L31', $main), $l31, 'LaTeX encoded unicode lastname with tie char'); biblatex-biber-1.8/t/labelalpha.t000555000000000000 5123412230324176 16236 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 113; use Biber; use Biber::Utils; use Biber::Output::bbl; use Log::Log4perl; use Unicode::Normalize; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('labelalpha.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxalphanames', 1); Biber::Config->setblxoption('maxcitenames', 1); Biber::Config->setblxoption('labeldate', undef); # Now generate the information $biber->prepare; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; is($bibentries->entry('L1')->get_field('sortlabelalpha'), 'Doe95', 'maxalphanames=1 minalphanames=1 entry L1 labelalpha'); ok(is_undef($main->get_extraalphadata('l1')), 'maxalphanames=1 minalphanames=1 entry L1 extraalpha'); is($bibentries->entry('L2')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=1 minalphanames=1 entry L2 labelalpha'); is($main->get_extraalphadata('L2'), '1', 'maxalphanames=1 minalphanames=1 entry L2 extraalpha'); is($bibentries->entry('L3')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=1 minalphanames=1 entry L3 labelalpha'); is($main->get_extraalphadata('L3'), '2', 'maxalphanames=1 minalphanames=1 entry L3 extraalpha'); is($bibentries->entry('L4')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=1 minalphanames=1 entry L4 labelalpha'); is($main->get_extraalphadata('L4'), '3', 'maxalphanames=1 minalphanames=1 entry L4 extraalpha'); is($bibentries->entry('L5')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=1 minalphanames=1 entry L5 labelalpha'); is($main->get_extraalphadata('L5'), '4', 'maxalphanames=1 minalphanames=1 entry L5 extraalpha'); is($bibentries->entry('L6')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=1 minalphanames=1 entry L6 labelalpha'); is($main->get_extraalphadata('L6'), '5', 'maxalphanames=1 minalphanames=1 entry L6 extraalpha'); is($bibentries->entry('L7')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=1 minalphanames=1 entry L7 labelalpha'); is($main->get_extraalphadata('L7'), '6', 'maxalphanames=1 minalphanames=1 entry L7 extraalpha'); is($bibentries->entry('L8')->get_field('sortlabelalpha'), 'Sha85', 'maxalphanames=1 minalphanames=1 entry L8 labelalpha'); ok(is_undef($main->get_extraalphadata('L8')), 'maxalphanames=1 minalphanames=1 entry L8 extraalpha'); ok(is_undef($main->get_extraalphadata('L9')), 'L9 extraalpha unset due to shorthand'); ok(is_undef($main->get_extraalphadata('L10')), 'L10 extraalpha unset due to shorthand'); is($main->get_extraalphadata('knuth:ct'), '1', 'YEAR with range needs label differentiating from individual volumes - 1'); is($main->get_extraalphadata('knuth:ct:a'), '2', 'YEAR with range needs label differentiating from individual volumes - 2'); is($main->get_extraalphadata('knuth:ct:b'), '1', 'YEAR with range needs label differentiating from individual volumes - 3'); is($main->get_extraalphadata('knuth:ct:c'), '2', 'YEAR with range needs label differentiating from individual volumes - 4'); # reset options and regenerate information Biber::Config->setblxoption('maxalphanames', 2); Biber::Config->setblxoption('minalphanames', 1); Biber::Config->setblxoption('maxcitenames', 2); Biber::Config->setblxoption('mincitenames', 1); foreach my $k ($section->get_citekeys) { $bibentries->entry($k)->del_field('sortlabelalpha'); $bibentries->entry($k)->del_field('labelalpha'); $main->set_extraalphadata_for_key($k, undef); } $biber->prepare; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $bibentries = $section->bibentries; is($bibentries->entry('L1')->get_field('sortlabelalpha'), 'Doe95', 'maxalphanames=2 minalphanames=1 entry L1 labelalpha'); ok(is_undef($main->get_extraalphadata('l1')), 'maxalphanames=2 minalphanames=1 entry L1 extraalpha'); is($bibentries->entry('L2')->get_field('sortlabelalpha'), 'DA95', 'maxalphanames=2 minalphanames=1 entry L2 labelalpha'); is($main->get_extraalphadata('L2'), '1', 'maxalphanames=2 minalphanames=1 entry L2 extraalpha'); is($bibentries->entry('L3')->get_field('sortlabelalpha'), 'DA95', 'maxalphanames=2 minalphanames=1 entry L3 labelalpha'); is($main->get_extraalphadata('L3'), '2', 'maxalphanames=2 minalphanames=1 entry L3 extraalpha'); is($bibentries->entry('L4')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=2 minalphanames=1 entry L4 labelalpha'); is($main->get_extraalphadata('L4'), '1', 'maxalphanames=2 minalphanames=1 entry L4 extraalpha'); is($bibentries->entry('L5')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=2 minalphanames=1 entry L5 labelalpha'); is($main->get_extraalphadata('L5'), '2', 'maxalphanames=2 minalphanames=1 entry L5 extraalpha'); is($bibentries->entry('L6')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=2 minalphanames=1 entry L6 labelalpha'); is($main->get_extraalphadata('L6'), '3', 'maxalphanames=2 minalphanames=1 entry L6 extraalpha'); is($bibentries->entry('L7')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=2 minalphanames=1 entry L7 labelalpha'); is($main->get_extraalphadata('L7'), '4', 'maxalphanames=2 minalphanames=1 entry L7 extraalpha'); is($bibentries->entry('L8')->get_field('sortlabelalpha'), 'Sha85', 'maxalphanames=2 minalphanames=1 entry L8 labelalpha'); ok(is_undef($main->get_extraalphadata('L8')), 'maxalphanames=2 minalphanames=1 entry L8 extraalpha'); # reset options and regenerate information Biber::Config->setblxoption('maxalphanames', 2); Biber::Config->setblxoption('minalphanames', 2); Biber::Config->setblxoption('maxcitenames', 2); Biber::Config->setblxoption('mincitenames', 2); foreach my $k ($section->get_citekeys) { $bibentries->entry($k)->del_field('sortlabelalpha'); $bibentries->entry($k)->del_field('labelalpha'); $main->set_extraalphadata_for_key($k, undef); } $biber->prepare; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $bibentries = $section->bibentries; is($bibentries->entry('L1')->get_field('sortlabelalpha'), 'Doe95', 'maxalphanames=2 minalphanames=2 entry L1 labelalpha'); ok(is_undef($main->get_extraalphadata('l1')), 'maxalphanames=2 minalphanames=2 entry L1 extraalpha'); is($bibentries->entry('L2')->get_field('sortlabelalpha'), 'DA95', 'maxalphanames=2 minalphanames=2 entry L2 labelalpha'); is($main->get_extraalphadata('L2'), '1', 'maxalphanames=2 minalphanames=2 entry L2 extraalpha'); is($bibentries->entry('L3')->get_field('sortlabelalpha'), 'DA95', 'maxalphanames=2 minalphanames=2 entry L3 labelalpha'); is($main->get_extraalphadata('L3'), '2', 'maxalphanames=2 minalphanames=2 entry L3 extraalpha'); is($bibentries->entry('L4')->get_field('sortlabelalpha'), 'DA+95', 'maxalphanames=2 minalphanames=2 entry L4 labelalpha'); is($main->get_extraalphadata('L4'), '1', 'maxalphanames=2 minalphanames=2 entry L4 extraalpha'); is($bibentries->entry('L5')->get_field('sortlabelalpha'), 'DA+95', 'maxalphanames=2 minalphanames=2 entry L5 labelalpha'); is($main->get_extraalphadata('L5'), '2', 'maxalphanames=2 minalphanames=2 entry L5 extraalpha'); is($bibentries->entry('L6')->get_field('sortlabelalpha'), 'DS+95', 'maxalphanames=2 minalphanames=2 entry L6 labelalpha'); is($main->get_extraalphadata('L6'), '1', 'maxalphanames=2 minalphanames=2 entry L6 extraalpha'); is($bibentries->entry('L7')->get_field('sortlabelalpha'), 'DS+95', 'maxalphanames=2 minalphanames=2 entry L7 labelalpha'); is($main->get_extraalphadata('L7'), '2', 'maxalphanames=2 minalphanames=2 entry L7 extraalpha'); is($bibentries->entry('L8')->get_field('sortlabelalpha'), 'Sha85', 'maxalphanames=2 minalphanames=2 entry L8 labelalpha'); ok(is_undef($main->get_extraalphadata('L8')), 'maxalphanames=2 minalphanames=2 entry L8 extraalpha'); # reset options and regenerate information Biber::Config->setblxoption('maxalphanames', 3); Biber::Config->setblxoption('minalphanames', 1); Biber::Config->setblxoption('maxcitenames', 3); Biber::Config->setblxoption('mincitenames', 1); foreach my $k ($section->get_citekeys) { $bibentries->entry($k)->del_field('sortlabelalpha'); $bibentries->entry($k)->del_field('labelalpha'); $main->set_extraalphadata_for_key($k, undef); } $biber->prepare; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $bibentries = $section->bibentries; is($bibentries->entry('L1')->get_field('sortlabelalpha'), 'Doe95', 'maxalphanames=3 minalphanames=1 entry L1 labelalpha'); ok(is_undef($main->get_extraalphadata('L1')), 'maxalphanames=3 minalphanames=1 entry L1 extraalpha'); is($bibentries->entry('L2')->get_field('sortlabelalpha'), 'DA95', 'maxalphanames=3 minalphanames=1 entry L2 labelalpha'); is($main->get_extraalphadata('L2'), '1', 'maxalphanames=3 minalphanames=1 entry L2 extraalpha'); is($bibentries->entry('L3')->get_field('sortlabelalpha'), 'DA95', 'maxalphanames=3 minalphanames=1 entry L3 labelalpha'); is($main->get_extraalphadata('L3'), '2', 'maxalphanames=3 minalphanames=1 entry L3 extraalpha'); is($bibentries->entry('L4')->get_field('sortlabelalpha'), 'DAE95', 'maxalphanames=3 minalphanames=1 entry L4 labelalpha'); is($main->get_extraalphadata('L4'), '1', 'maxalphanames=3 minalphanames=1 entry L4 extraalpha'); is($bibentries->entry('L5')->get_field('sortlabelalpha'), 'DAE95', 'maxalphanames=3 minalphanames=1 entry L5 labelalpha'); is($main->get_extraalphadata('L5'), '2', 'maxalphanames=3 minalphanames=1 entry L5 extraalpha'); is($bibentries->entry('L6')->get_field('sortlabelalpha'), 'DSE95', 'maxalphanames=3 minalphanames=1 entry L6 labelalpha'); ok(is_undef($main->get_extraalphadata('L6')), 'maxalphanames=3 minalphanames=1 entry L6 extraalpha'); is($bibentries->entry('L7')->get_field('sortlabelalpha'), 'DSJ95', 'maxalphanames=3 minalphanames=1 entry L7 labelalpha'); ok(is_undef($main->get_extraalphadata('L7')), 'maxalphanames=3 minalphanames=1 entry L7 extraalpha'); is($bibentries->entry('L8')->get_field('sortlabelalpha'), 'Sha85', 'maxalphanames=3 minalphanames=1 entry L8 labelalpha'); ok(is_undef($main->get_extraalphadata('L8')), 'maxalphanames=3 minalphanames=1 entry L8 extraalpha'); is($bibentries->entry('LDN1')->get_field('sortlabelalpha'), 'VUR89', 'Testing compound lastnames 1'); is($bibentries->entry('LDN2')->get_field('sortlabelalpha'), 'VU45', 'Testing compound lastnames 2'); # reset options and regenerate information Biber::Config->setblxoption('maxalphanames', 4); Biber::Config->setblxoption('minalphanames', 4); Biber::Config->setblxoption('maxcitenames', 4); Biber::Config->setblxoption('mincitenames', 4); Biber::Config->setblxoption('labelalpha', 1); Biber::Config->setblxoption('labeldate', 1); foreach my $k ($section->get_citekeys) { $bibentries->entry($k)->del_field('sortlabelalpha'); $bibentries->entry($k)->del_field('labelalpha'); $main->set_extraalphadata_for_key($k, undef); } $biber->prepare; my $out = $biber->get_output_obj; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $bibentries = $section->bibentries; is($bibentries->entry('L11')->get_field('sortlabelalpha'), 'vRan22', 'prefix labelalpha 1'); is($bibentries->entry('L12')->get_field('sortlabelalpha'), 'vRvB2', 'prefix labelalpha 2'); # only the first name in the list is in the label due to namecount=1 is($bibentries->entry('L13')->get_field('sortlabelalpha'), 'vRa+-ksUnV', 'per-type labelalpha 1'); is($bibentries->entry('L14')->get_field('sortlabelalpha'), 'Alabel-ksUnW', 'per-type labelalpha 2'); is($bibentries->entry('L15')->get_field('sortlabelalpha'), 'AccBrClim', 'labelalpha disambiguation 1'); is($bibentries->entry('L16')->get_field('sortlabelalpha'), 'AccBaClim', 'labelalpha disambiguation 2'); is($bibentries->entry('L16a')->get_field('sortlabelalpha'), 'AccBaClim', 'labelalpha disambiguation 2a'); is($main->get_extraalphadata('L16'), '1', 'labelalpha disambiguation 2c'); is($main->get_extraalphadata('L16a'), '2', 'labelalpha disambiguation 2d'); is($bibentries->entry('L17')->get_field('sortlabelalpha'), 'AckBaClim', 'labelalpha disambiguation 3'); is($main->get_extraalphadata('L17a'), '2', 'custom labelalpha extrayear 1'); is($bibentries->entry('L18')->get_field('sortlabelalpha'), 'AgChLa', 'labelalpha disambiguation 4'); is($bibentries->entry('L19')->get_field('sortlabelalpha'), 'AgConLe', 'labelalpha disambiguation 5'); is($bibentries->entry('L20')->get_field('sortlabelalpha'), 'AgCouLa', 'labelalpha disambiguation 6'); is($bibentries->entry('L21')->get_field('sortlabelalpha'), 'BoConEdb', 'labelalpha disambiguation 7'); is($bibentries->entry('L22')->get_field('sortlabelalpha'), 'BoConEm', 'labelalpha disambiguation 8'); is($bibentries->entry('L23')->get_field('sortlabelalpha'), 'Sa', 'labelalpha disambiguation 9'); # reset options and regenerate information Biber::Config->setblxoption('labelalphatemplate', { labelelement => [ { labelpart => [ { content => "labelname", substring_width => "vf", substring_fixed_threshold => 2, substring_side => "left" }, ], order => 1, }, ], type => "unpublished", }, 'PER_TYPE', 'unpublished'); foreach my $k ($section->get_citekeys) { $bibentries->entry($k)->del_field('sortlabelalpha'); $bibentries->entry($k)->del_field('labelalpha'); $main->set_extraalphadata_for_key($k, undef); } $biber->prepare; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $bibentries = $section->bibentries; # "Agas" and not "Aga" because the Schmidt/Schnee below need 4 chars to disambiguate is($bibentries->entry('L18')->get_field('sortlabelalpha'), 'AgasChaLaver', 'labelalpha disambiguation 10'); is($bibentries->entry('L19')->get_field('sortlabelalpha'), 'AgasConLendl', 'labelalpha disambiguation 11'); is($bibentries->entry('L20')->get_field('sortlabelalpha'), 'AgasCouLaver', 'labelalpha disambiguation 12'); # reset options and regenerate information Biber::Config->setblxoption('labelalphatemplate', { labelelement => [ { labelpart => [ { content => "labelname", substring_width => "l", substring_side => "left" }, ], order => 1, }, ], type => "unpublished", }, 'PER_TYPE', 'unpublished'); foreach my $k ($section->get_citekeys) { $bibentries->entry($k)->del_field('sortlabelalpha'); $bibentries->entry($k)->del_field('labelalpha'); $main->set_extraalphadata_for_key($k, undef); } $biber->prepare; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $bibentries = $section->bibentries; is($bibentries->entry('L18')->get_field('sortlabelalpha'), 'AChL', 'labelalpha list disambiguation 1'); is($bibentries->entry('L19')->get_field('sortlabelalpha'), 'ACoL', 'labelalpha list disambiguation 2'); is($bibentries->entry('L20')->get_field('sortlabelalpha'), 'ACL', 'labelalpha list disambiguation 3'); is($bibentries->entry('L21')->get_field('sortlabelalpha'), 'BCEd', 'labelalpha list disambiguation 4'); is($bibentries->entry('L22')->get_field('sortlabelalpha'), 'BCE', 'labelalpha list disambiguation 5'); is($bibentries->entry('L24')->get_field('sortlabelalpha'), 'Z', 'labelalpha list disambiguation 6'); is($bibentries->entry('L25')->get_field('sortlabelalpha'), 'ZX', 'labelalpha list disambiguation 7'); is($bibentries->entry('L26')->get_field('sortlabelalpha'), 'ZX', 'labelalpha list disambiguation 8'); is(NFC($bibentries->entry('title1')->get_field('sortlabelalpha')), 'Tït', 'Title in braces with UTF-8 char - 1'); # reset options and regenerate information Biber::Config->setblxoption('maxalphanames', 3); Biber::Config->setblxoption('minalphanames', 1); Biber::Config->setblxoption('maxcitenames', 3); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('labelalphatemplate', { labelelement => [ { labelpart => [ { content => "shorthand", final => 1 }, { content => "label" }, { content => "labelname", ifnamecount => 1, substring_side => "left", substring_width => 3, }, { content => "labelname", substring_side => "left", substring_width => 1 }, ], order => 1, }, { labelpart => [ { content => "year", substring_side => "right", substring_width => 2 }, ], order => 2, }, ], type => "global", }); foreach my $k ($section->get_citekeys) { $bibentries->entry($k)->del_field('sortlabelalpha'); $bibentries->entry($k)->del_field('labelalpha'); $main->set_extraalphadata_for_key($k, undef); } $biber->prepare; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $bibentries = $section->bibentries; is($bibentries->entry('Schmidt2007')->get_field('sortlabelalpha'), 'Sch+07', 'extraalpha ne extrayear 1'); is($main->get_extraalphadata('Schmidt2007'), '1', 'extraalpha ne extrayear 2'); is($bibentries->entry('Schmidt2007a')->get_field('sortlabelalpha'), 'Sch07', 'extraalpha ne extrayear 3'); is($main->get_extraalphadata('Schmidt2007a'), '1', 'extraalpha ne extrayear 4'); is($bibentries->entry('Schnee2007')->get_field('sortlabelalpha'), 'Sch+07', 'extraalpha ne extrayear 5'); is($main->get_extraalphadata('Schnee2007'), '2', 'extraalpha ne extrayear 6'); is($bibentries->entry('Schnee2007a')->get_field('sortlabelalpha'), 'Sch07', 'extraalpha ne extrayear 7'); is($main->get_extraalphadata('Schnee2007a'), '2', 'extraalpha ne extrayear 8'); Biber::Config->setblxoption('labelalphatemplate', { labelelement => [ { labelpart => [ { content => "citekey", substring_side => "left", substring_width => 3, uppercase => 1, }, ], order => 1, }, ], type => "global", }); foreach my $k ($section->get_citekeys) { $bibentries->entry($k)->del_field('sortlabelalpha'); $bibentries->entry($k)->del_field('labelalpha'); $main->set_extraalphadata_for_key($k, undef); } $biber->prepare; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $bibentries = $section->bibentries; is($bibentries->entry('Schmidt2007')->get_field('sortlabelalpha'), 'SCH', 'entrykey label 1'); Biber::Config->setblxoption('labelalphatemplate', { labelelement => [ { labelpart => [ { content => "labelyear", } ], order => 1, }, { labelpart => [ { content => "labelmonth", } ], order => 2, }, { labelpart => [ { content => "labelday", } ], order => 3, } ], type => "global", }); foreach my $k ($section->get_citekeys) { $bibentries->entry($k)->del_field('sortlabelalpha'); $bibentries->entry($k)->del_field('labelalpha'); $main->set_extraalphadata_for_key($k, undef); } $biber->prepare; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $bibentries = $section->bibentries; is($bibentries->entry('labelstest')->get_field('sortlabelalpha'), '20050302', 'labeldate test - 1'); is($bibentries->entry('padtest')->get_field('labelalpha'), '\&Al\_\_{\textasciitilde}{\textasciitilde}T07', 'pad test - 1'); is($bibentries->entry('padtest')->get_field('sortlabelalpha'), '&Al__~~T07', 'pad test - 2'); biblatex-biber-1.8/t/bibtex-aliases.t000555000000000000 1062012230324177 17040 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 24; use Biber; use Biber::Utils; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata") ; # Set up Biber object my $biber = Biber->new( noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('bibtex-aliases.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setoption('validate_datamodel', 1); # THERE IS A MAPPING SECTION IN THE .bcf BEING USED TO TEST USER MAPS TOO! # Now generate the information $biber->prepare; my $section = $biber->sections->get_section(0); my $bibentries = $section->bibentries; my $w1 = ["Datamodel: Entry 'alias2' (bibtex-aliases.bib): Field 'school' invalid in data model - ignoring", "Datamodel: Entry 'alias2' (bibtex-aliases.bib): Invalid entry type 'thing' - defaulting to 'misc'", "Datamodel: Entry 'alias2' (bibtex-aliases.bib): Invalid field 'institution' for entrytype 'misc'", ]; my $w2 = ["Datamodel: Entry 'alias4' (bibtex-aliases.bib): Invalid field 'author' for entrytype 'customa'", "Datamodel: Entry 'alias4' (bibtex-aliases.bib): Invalid field 'eprint' for entrytype 'customa'", "Datamodel: Entry 'alias4' (bibtex-aliases.bib): Invalid field 'eprinttype' for entrytype 'customa'", "Datamodel: Entry 'alias4' (bibtex-aliases.bib): Invalid field 'namea' for entrytype 'customa'", "Datamodel: Entry 'alias4' (bibtex-aliases.bib): Invalid field 'title' for entrytype 'customa'", ]; is($bibentries->entry('alias1')->get_field('entrytype'), 'thesis', 'Alias - 1' ); is($bibentries->entry('alias1')->get_field('type'), 'phdthesis', 'Alias - 2' ); is_deeply($bibentries->entry('alias1')->get_field('location'), ['Ivory Towers'], 'Alias - 3' ); is($bibentries->entry('alias1')->get_field('address'), undef, 'Alias - 4' ); is($bibentries->entry('alias2')->get_field('entrytype'), 'misc', 'Alias - 5' ); is_deeply($bibentries->entry('alias2')->get_field('warnings'), $w1, 'Alias - 6' ) ; is($bibentries->entry('alias2')->get_field('school'), undef, 'Alias - 7' ); is($bibentries->entry('alias3')->get_field('entrytype'), 'customb', 'Alias - 8' ); is($bibentries->entry('alias4')->get_field('entrytype'), 'customa', 'Alias - 9' ); is($bibentries->entry('alias4')->get_field('verba'), 'conversation', 'Alias - 10' ); is($bibentries->entry('alias4')->get_field('verbb'), 'somevalue', 'Alias - 11' ); is($bibentries->entry('alias4')->get_field('eprint'), 'anid', 'Alias - 12' ); is($bibentries->entry('alias4')->get_field('eprinttype'), 'PUBMEDID', 'Alias - 13' ); is($bibentries->entry('alias4')->get_field('userd'), 'Some string of things', 'Alias - 14' ); is($bibentries->entry('alias4')->get_field('pubmedid'), undef, 'Alias - 15' ); is($bibentries->entry('alias4')->get_field('namea')->nth_name(1)->get_firstname, 'Sam', 'Alias - 16' ); is_deeply($bibentries->entry('alias4')->get_field('warnings'), $w2, 'Alias - 17' ) ; # Testing of .bcf field map match/replace ok(is_undef($bibentries->entry('alias5')->get_field('abstract')), 'Alias - 18' ); is($biber->_liststring('alias5', 'listb'), 'REPlaCEDte!early', 'Alias - 19'); is($biber->_liststring('alias5', 'institution'), 'REPlaCEDte!early', 'Alias - 20'); # Testing of no target but just field additions is_deeply($bibentries->entry('alias6')->get_field('keywords'), ['keyw1', 'keyw2'], 'Alias - 21' ); # Testing of no regexp match for field value is_deeply($bibentries->entry('alias7')->get_field('lista'), ['listaval'], 'Alias - 22' ); # Testing append overwrites is($bibentries->entry('alias7')->get_field('verbb'), 'val2val1', 'Alias - 23' ); is($bibentries->entry('alias7')->get_field('verbc'), 'val3val2val1', 'Alias - 24' ); biblatex-biber-1.8/t/xdata.t000444000000000000 715712230324175 15233 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 5; use Biber; use Biber::Output::bbl; use Log::Log4perl; use Capture::Tiny qw(capture); chdir("t/tdata") ; # USING CAPTURE - DEBUGGING PRINTS, DUMPS WON'T BE VISIBLE UNLESS YOU PRINT $stderr # AT THE END! # Set up Biber object my $biber = Biber->new(noconf => 1); # Note stderr is output here so we can capture it and do a cyclic crossref test my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 1 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('xdata.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setoption('nodieonerror', 1); # because there is a cyclic xdata check # Now generate the information my ($stdout, $stderr) = capture { $biber->prepare }; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $out = $biber->get_output_obj; my $xd1 = q| \entry{xd1}{book}{} \name{labelname}{1}{}{% {{hash=51db4bfd331cba22959ce2d224c517cd}{Ellington}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=51db4bfd331cba22959ce2d224c517cd}{Ellington}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \list{location}{2}{% {New York}% {London}% } \list{publisher}{1}{% {Macmillan}% } \strng{namehash}{51db4bfd331cba22959ce2d224c517cd} \strng{fullhash}{51db4bfd331cba22959ce2d224c517cd} \field{sortinit}{E} \field{labelyear}{2007} \field{datelabelsource}{} \field{note}{A Note} \field{year}{2007} \endentry |; my $xd2 = q| \entry{xd2}{book}{} \name{labelname}{1}{}{% {{hash=68539e0ce4922cc4957c6cabf35e6fc8}{Pillington}{P\bibinitperiod}{Peter}{P\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=68539e0ce4922cc4957c6cabf35e6fc8}{Pillington}{P\bibinitperiod}{Peter}{P\bibinitperiod}{}{}{}{}}% } \list{location}{2}{% {New York}% {London}% } \list{publisher}{1}{% {Routledge}% } \strng{namehash}{68539e0ce4922cc4957c6cabf35e6fc8} \strng{fullhash}{68539e0ce4922cc4957c6cabf35e6fc8} \field{sortinit}{P} \field{labelyear}{2003} \field{datelabelsource}{} \field{abstract}{An abstract} \field{addendum}{Москва} \field{note}{A Note} \field{venue}{venue} \field{year}{2003} \endentry |; is($out->get_output_entry('xd1', $main), $xd1, 'xdata test - 1'); is($out->get_output_entry('xd2', $main), $xd2, 'xdata test - 2'); # XDATA entries should not be output at all is($out->get_output_entry('macmillan', $main), undef, 'xdata test - 3'); is($out->get_output_entry('macmillan:pub', $main), undef, 'xdata test - 4'); chomp $stderr; is($stderr, "ERROR - Circular XDATA inheritance between 'loop'<->'loop:3'", 'Cyclic xdata error check'); #print $stdout; #print $stderr; biblatex-biber-1.8/t/tool.t000555000000000000 602612230324176 15105 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use Test::More tests => 5; use Encode; use Biber; use Biber::Utils; use Biber::Output::bibtex; use Log::Log4perl; use Unicode::Normalize; chdir("t/tdata"); no warnings 'utf8'; use utf8; # Set up Biber object my $biber = Biber->new(configfile => 'tool-test.conf'); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->set_output_obj(Biber::Output::bibtex->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('tool', 1); Biber::Config->setoption('output_resolve', 1); Biber::Config->setoption('output_format', 'bibtex'); Biber::Config->setoption('sortlocale', 'C'); # THERE IS A CONFIG FILE BEING READ! # Now generate the information $ARGV[0] = 'tool.bib'; # fake this as we are not running through top-level biber program $biber->tool_mode_setup; $biber->prepare_tool; my $main = $biber->sortlists->get_list(99999, 'entry', Biber::Config->getblxoption('sortscheme')); my $out = $biber->get_output_obj; my $t1 = q|@UNPUBLISHED{i3Š, ABSTRACT = {Some abstract %50 of which is useless}, AUTHOR = {AAA and BBB and CCC and DDD and EEE}, AUTHOR_uniform_lang = {aaa and bbb and ccc and ddd and eee}, DATE = {2003}, INSTITUTION = {REPlaCEDte and early}, LISTA = {list test}, LISTB = {late and early}, LOCATION = {one and two}, LOCATION_translated_french = {un and deux}, NOTE = {i3Š}, TITLE = {Š title}, TITLE_translated_french = {Le title}, USERB = {test}, } |; my $t2 = q|@BOOK{xd1, AUTHOR = {Edward Ellington}, LOCATION = {New York and London}, NOTE = {A Note}, PUBLISHER = {Macmillan}, YEAR = {2001}, } |; my $t3 = q|@BOOK{b1, MAINSUBTITLE = {Mainsubtitle}, MAINTITLE = {Maintitle}, MAINTITLEADDON = {Maintitleaddon}, TITLE = {Booktitle}, YEAR = {1999}, } |; # NFD here because we are testing internals here and all internals expect NFD is($out->get_output_entry(NFD('i3Š')), $t1, 'tool mode 1'); ok(is_undef($out->get_output_entry('loh')), 'tool mode 2'); is($out->get_output_entry('xd1',), $t2, 'tool mode 3'); is($out->get_output_entry('b1',), $t3, 'tool mode 4'); is_deeply([$main->get_keys], ['macmillan:pub', 'macmillan:loc', 'mv1', 'b1', 'xd1', 'macmillan', NFD('i3Š')], 'tool mode sorting'); biblatex-biber-1.8/t/encoding.t000555000000000000 2724412230324176 15743 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 10; use Biber; use Biber::Utils; use Biber::Output::test; use Encode; use Log::Log4perl; use Unicode::Normalize; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); my $encode1 = q| \entry{testŠ}{book}{} \name{labelname}{1}{}{% {{uniquename=0,hash=06a47edae2e847800cfd78323a0e6be8}{Encalcer}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=06a47edae2e847800cfd78323a0e6be8}{Encalcer}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {A press}% } \strng{namehash}{06a47edae2e847800cfd78323a0e6be8} \strng{fullhash}{06a47edae2e847800cfd78323a0e6be8} \field{labelalpha}{Enc99} \field{sortinit}{E} \field{labelyear}{1999} \field{datelabelsource}{} \field{labeltitle}{Šome title} \true{singletitle} \field{title}{Šome title} \field{year}{1999} \endentry |; my $encode2 = q| \entry{test1}{book}{} \name{labelname}{1}{}{% {{uniquename=0,hash=06a47edae2e847800cfd78323a0e6be8}{Encalcer}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=06a47edae2e847800cfd78323a0e6be8}{Encalcer}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {A press}% } \strng{namehash}{06a47edae2e847800cfd78323a0e6be8} \strng{fullhash}{06a47edae2e847800cfd78323a0e6be8} \field{labelalpha}{Enc99} \field{sortinit}{E} \field{labelyear}{1999} \field{datelabelsource}{} \field{labeltitle}{Söme title} \true{singletitle} \field{title}{Söme title} \field{year}{1999} \endentry |; my $encode3 = q| \entry{test1}{book}{} \name{labelname}{1}{}{% {{uniquename=0,hash=06a47edae2e847800cfd78323a0e6be8}{Encalcer}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=06a47edae2e847800cfd78323a0e6be8}{Encalcer}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {A press}% } \strng{namehash}{06a47edae2e847800cfd78323a0e6be8} \strng{fullhash}{06a47edae2e847800cfd78323a0e6be8} \field{labelalpha}{Enc99} \field{sortinit}{E} \field{labelyear}{1999} \field{datelabelsource}{} \field{labeltitle}{Żome title} \true{singletitle} \field{title}{Żome title} \field{year}{1999} \endentry |; my $encode5 = q| \entry{test}{book}{} \name{labelname}{1}{}{% {{uniquename=0,hash=06a47edae2e847800cfd78323a0e6be8}{Encalcer}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=06a47edae2e847800cfd78323a0e6be8}{Encalcer}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {A press}% } \strng{namehash}{06a47edae2e847800cfd78323a0e6be8} \strng{fullhash}{06a47edae2e847800cfd78323a0e6be8} \field{labelalpha}{Enc99} \field{sortinit}{E} \field{labelyear}{1999} \field{datelabelsource}{} \field{labeltitle}{à titlé} \true{singletitle} \field{title}{à titlé} \field{year}{1999} \endentry |; my $encode6 = q| \entry{test}{book}{} \name{labelname}{1}{}{% {{uniquename=0,hash=06a47edae2e847800cfd78323a0e6be8}{Encalcer}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=06a47edae2e847800cfd78323a0e6be8}{Encalcer}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {A press}% } \strng{namehash}{06a47edae2e847800cfd78323a0e6be8} \strng{fullhash}{06a47edae2e847800cfd78323a0e6be8} \field{labelalpha}{Enc99} \field{sortinit}{E} \field{labelyear}{1999} \field{datelabelsource}{} \field{labeltitle}{↑\`{a} titl\'{e}} \true{singletitle} \field{title}{↑\`{a} titl\'{e}} \field{year}{1999} \endentry |; my $encode7 = q| \entry{test}{book}{} \name{labelname}{1}{}{% {{uniquename=0,hash=06a47edae2e847800cfd78323a0e6be8}{Encalcer}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=06a47edae2e847800cfd78323a0e6be8}{Encalcer}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {A press}% } \strng{namehash}{06a47edae2e847800cfd78323a0e6be8} \strng{fullhash}{06a47edae2e847800cfd78323a0e6be8} \field{labelalpha}{Enc99} \field{sortinit}{E} \field{labelyear}{1999} \field{datelabelsource}{} \field{labeltitle}{{$\uparrow$}\`{a} titl\'{e}} \true{singletitle} \field{title}{{$\uparrow$}\`{a} titl\'{e}} \field{year}{1999} \endentry |; my $outvar; my $output; # Latin9 .bib -> UTF-8 .bbl $biber->parse_ctrlfile('encoding1.bcf'); $biber->set_output_obj(Biber::Output::test->new()); # Biber options Biber::Config->setoption('input_encoding', 'latin9'); Biber::Config->setoption('output_encoding', 'UTF-8'); # Now generate the information $biber->prepare; # Get reference to output object $output = $biber->get_output_obj; $output->set_output_target_file(\$outvar); # Write the output to the target $output->output; is($outvar, encode(Biber::Config->getoption('output_encoding'), $encode1), 'latin9 .bib -> UTF-8 .bbl'); # UTF-8 .bib -> UTF-8 .bbl $biber->parse_ctrlfile('encoding2.bcf'); $biber->set_output_obj(Biber::Output::test->new()); # Biber options Biber::Config->setoption('input_encoding', 'UTF-8'); Biber::Config->setoption('output_encoding', 'UTF-8'); # Now generate the information $biber->prepare; # Get reference to output object $output = $biber->get_output_obj; $output->set_output_target_file(\$outvar); # Write the output to the target $output->output; is($outvar, encode(Biber::Config->getoption('output_encoding'), $encode1), 'UTF-8 .bib -> UTF-8 .bbl'); # UTF-8 .bib -> latin1 .bbl $biber->parse_ctrlfile('encoding5.bcf'); $biber->set_output_obj(Biber::Output::test->new()); # Biber options Biber::Config->setoption('input_encoding', 'UTF-8'); Biber::Config->setoption('output_encoding', 'latin1'); # Now generate the information $biber->prepare; # Get reference to output object $output = $biber->get_output_obj; $output->set_output_target_file(\$outvar); # Write the output to the target $output->output; is($outvar, encode(Biber::Config->getoption('output_encoding'), $encode5), 'UTF-8 .bib -> latin1 .bbl'); # UTF-8 .bib -> UTF-8 with --output_safechars $biber->parse_ctrlfile('encoding6.bcf'); $biber->set_output_obj(Biber::Output::test->new()); # Biber options Biber::Config->setoption('input_encoding', 'UTF-8'); Biber::Config->setoption('output_encoding', 'UTF-8'); Biber::Config->setoption('output_safechars', 1); # Now generate the information $biber->prepare; # Get reference to output object $output = $biber->get_output_obj; $output->set_output_target_file(\$outvar); # Write the output to the target $output->output; is($outvar, encode(Biber::Config->getoption('output_encoding'), $encode6), 'UTF-8 .bib -> UTF-8 .bbl, safechars'); # UTF-8 .bib -> UTF-8 with --output_safechars and --bblcharsset=full $biber->parse_ctrlfile('encoding6.bcf'); $biber->set_output_obj(Biber::Output::test->new()); # Biber options Biber::Config->setoption('input_encoding', 'UTF-8'); Biber::Config->setoption('output_encoding', 'UTF-8'); Biber::Config->setoption('output_safechars', 1); Biber::LaTeX::Recode->init_schemes('full', 'full'); # Need to do this to reset # Now generate the information $biber->prepare; # Get reference to output object $output = $biber->get_output_obj; $output->set_output_target_file(\$outvar); # Write the output to the target $output->output; is($outvar, encode(Biber::Config->getoption('output_encoding'), $encode7), 'UTF-8 .bib -> UTF-8 .bbl, output_safecharsset=full'); # UTF-8 .bib -> Latin9 .bbl $biber->parse_ctrlfile('encoding2.bcf'); $biber->set_output_obj(Biber::Output::test->new()); # Biber options Biber::Config->setoption('output_safechars', 0); Biber::Config->setoption('input_encoding', 'UTF-8'); Biber::Config->setoption('output_encoding', 'latin9'); # Now generate the information $biber->prepare; # Get reference to output object $output = $biber->get_output_obj; $output->set_output_target_file(\$outvar); # Write the output to the target $output->output; is($outvar, encode(Biber::Config->getoption('output_encoding'), $encode1), 'UTF-8 .bib -> latin9 .bbl'); # latin1 .bib -> cp1252 .bbl $biber->parse_ctrlfile('encoding3.bcf'); $biber->set_output_obj(Biber::Output::test->new()); # Biber options Biber::Config->setoption('input_encoding', 'latin1'); Biber::Config->setoption('output_encoding', 'cp1252'); # Now generate the information $biber->prepare; # Get reference to output object $output = $biber->get_output_obj; $output->set_output_target_file(\$outvar); # Write the output to the target $output->output; is($outvar, encode(Biber::Config->getoption('output_encoding'), $encode2), 'latin1 .bib -> CP1252 .bbl'); # latin2 .bib -> latin3 .bbl $biber->parse_ctrlfile('encoding4.bcf'); $biber->set_output_obj(Biber::Output::test->new()); # Biber options Biber::Config->setoption('input_encoding', 'latin2'); Biber::Config->setoption('output_encoding', 'latin3'); # Now generate the information $biber->prepare; # Get reference to output object $output = $biber->get_output_obj; $output->set_output_target_file(\$outvar); # Write the output to the target $output->output; is($outvar, encode(Biber::Config->getoption('output_encoding'), $encode3), 'latin2 .bib -> latin3 .bbl'); # latin2 .bib -> latin1 .bbl - should fail $biber->parse_ctrlfile('encoding4.bcf'); $biber->set_output_obj(Biber::Output::test->new()); # Biber options Biber::Config->setoption('input_encoding', 'latin2'); Biber::Config->setoption('output_encoding', 'latin1'); # Now generate the information $biber->prepare; # Get reference to output object $output = $biber->get_output_obj; $output->set_output_target_file(\$outvar); # Write the output to the target # This test will generate encoding errors so redirect STDERR until it's done open OLDERR, '>&', \*STDERR; open STDERR, '>', '/dev/null'; $output->output; open STDERR, '>&', \*OLDERR; isnt($outvar, encode(Biber::Config->getoption('output_encoding'), $encode3), 'latin2 .bib -> latin1 .bbl failure'); # Custom encoding alias # latin1 .bib -> applemacce (MacRoman) .bbl $biber->parse_ctrlfile('encoding3.bcf'); $biber->set_output_obj(Biber::Output::test->new()); # Biber options Biber::Config->setoption('input_encoding', 'latin1'); Biber::Config->setoption('output_encoding', 'applemacce'); # Now generate the information $biber->prepare; # Get reference to output object $output = $biber->get_output_obj; $output->set_output_target_file(\$outvar); # Write the output to the target $output->output; is($outvar, encode(Biber::Config->getoption('output_encoding'), $encode2), 'latin1 .bib -> applemacce (custom alias) .bbl'); biblatex-biber-1.8/t/crossrefs.t000555000000000000 4521312230324176 16162 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 31; use Biber; use Biber::Output::bbl; use Log::Log4perl; use Capture::Tiny qw(capture); use Biber::Utils; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); # Note stderr is output here so we can capture it and do a cyclic crossref test my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 1 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('crossrefs.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setoption('nodieonerror', 1); # because there is a failing cyclic crossref check # Now generate the information my (undef, $stderr) = capture { $biber->prepare }; my $section0 = $biber->sections->get_section(0); my $main0 = $biber->sortlists->get_list(0, 'entry', 'nty'); my $section1 = $biber->sections->get_section(1); my $main1 = $biber->sortlists->get_list(1, 'entry', 'nty'); my $out = $biber->get_output_obj; # crossref field is included as the parent is included by being crossrefed >= mincrossrefs times my $cr1 = q| \entry{cr1}{inbook}{} \name{labelname}{1}{}{% {{hash=121b6dc164b5b619c81c670fbd823f12}{Gullam}{G\bibinitperiod}{Graham}{G\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=121b6dc164b5b619c81c670fbd823f12}{Gullam}{G\bibinitperiod}{Graham}{G\bibinitperiod}{}{}{}{}}% } \name{editor}{1}{}{% {{hash=c129df5593fdaa7475548811bfbb227d}{Erbriss}{E\bibinitperiod}{Edgar}{E\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Grimble}% } \strng{namehash}{121b6dc164b5b619c81c670fbd823f12} \strng{fullhash}{121b6dc164b5b619c81c670fbd823f12} \field{sortinit}{G} \field{labeltitle}{Great and Good Graphs} \field{booktitle}{Graphs of the Continent} \strng{crossref}{cr_m} \field{eprintclass}{SOMECLASS} \field{eprinttype}{SomEPrFiX} \field{origyear}{1955} \field{title}{Great and Good Graphs} \field{year}{1974} \endentry |; # crossref field is included as the parent is included by being crossrefed >= mincrossrefs times my $cr2 = q| \entry{cr2}{inbook}{} \name{labelname}{1}{}{% {{hash=2d51a96bc0a6804995b3a9ff350c3384}{Fumble}{F\bibinitperiod}{Frederick}{F\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=2d51a96bc0a6804995b3a9ff350c3384}{Fumble}{F\bibinitperiod}{Frederick}{F\bibinitperiod}{}{}{}{}}% } \name{editor}{1}{}{% {{hash=c129df5593fdaa7475548811bfbb227d}{Erbriss}{E\bibinitperiod}{Edgar}{E\bibinitperiod}{}{}{}{}}% } \list{institution}{1}{% {Institution}% } \list{publisher}{1}{% {Grimble}% } \strng{namehash}{2d51a96bc0a6804995b3a9ff350c3384} \strng{fullhash}{2d51a96bc0a6804995b3a9ff350c3384} \field{sortinit}{F} \field{labeltitle}{Fabulous Fourier Forms} \field{booktitle}{Graphs of the Continent} \strng{crossref}{cr_m} \field{origyear}{1943} \field{title}{Fabulous Fourier Forms} \field{year}{1974} \endentry |; # This is included as it is crossrefed >= mincrossrefs times # Notice lack of labelname and hashes because the only name is EDITOR and useeditor is false my $cr_m = q| \entry{cr_m}{book}{} \name{editor}{1}{}{% {{hash=c129df5593fdaa7475548811bfbb227d}{Erbriss}{E\bibinitperiod}{Edgar}{E\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Grimble}% } \field{sortinit}{G} \field{labeltitle}{Graphs of the Continent} \field{title}{Graphs of the Continent} \field{year}{1974} \endentry |; # crossref field is included as the parent is cited my $cr3 = q| \entry{cr3}{inbook}{} \name{labelname}{1}{}{% {{hash=2baf676a220704f6914223aefccaaa88}{Aptitude}{A\bibinitperiod}{Arthur}{A\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=2baf676a220704f6914223aefccaaa88}{Aptitude}{A\bibinitperiod}{Arthur}{A\bibinitperiod}{}{}{}{}}% } \name{editor}{1}{}{% {{hash=a1f5c22413396d599ec766725b226735}{Monkley}{M\bibinitperiod}{Mark}{M\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Rancour}% } \strng{namehash}{2baf676a220704f6914223aefccaaa88} \strng{fullhash}{2baf676a220704f6914223aefccaaa88} \field{sortinit}{A} \field{labeltitle}{Arrangements of All Articles} \field{booktitle}{Beasts of the Burbling Burns} \strng{crossref}{crt} \field{eprinttype}{sometype} \field{origyear}{1934} \field{title}{Arrangements of All Articles} \field{year}{1996} \endentry |; # cited as normal my $crt = q| \entry{crt}{book}{} \name{editor}{1}{}{% {{hash=a1f5c22413396d599ec766725b226735}{Monkley}{M\bibinitperiod}{Mark}{M\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Rancour}% } \field{sortinit}{B} \field{labeltitle}{Beasts of the Burbling Burns} \field{title}{Beasts of the Burbling Burns} \field{year}{1996} \endentry |; # various event fields inherited correctly my $cr6 = q| \entry{cr6}{inproceedings}{} \name{labelname}{1}{}{% {{hash=8ab39ee68c55046dc1f05d657fcefed9}{Author}{A\bibinitperiod}{Firstname}{F\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=8ab39ee68c55046dc1f05d657fcefed9}{Author}{A\bibinitperiod}{Firstname}{F\bibinitperiod}{}{}{}{}}% } \name{editor}{1}{}{% {{hash=344a7f427fb765610ef96eb7bce95257}{Editor}{E\bibinitperiod}{}{}{}{}{}{}}% } \list{location}{1}{% {Address}% } \strng{namehash}{8ab39ee68c55046dc1f05d657fcefed9} \strng{fullhash}{8ab39ee68c55046dc1f05d657fcefed9} \field{sortinit}{A} \field{labeltitle}{Title of inproceeding} \field{booktitle}{Manual booktitle} \field{eventday}{21} \field{eventendday}{24} \field{eventendmonth}{08} \field{eventendyear}{2009} \field{eventmonth}{08} \field{eventtitle}{Title of the event} \field{eventyear}{2009} \field{title}{Title of inproceeding} \field{venue}{Location of event} \field{year}{2009} \field{pages}{123\bibrangedash} \endentry |; # Special fields inherited correctly my $cr7 = q| \entry{cr7}{inbook}{} \name{labelname}{1}{}{% {{hash=8ab39ee68c55046dc1f05d657fcefed9}{Author}{A\bibinitperiod}{Firstname}{F\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=8ab39ee68c55046dc1f05d657fcefed9}{Author}{A\bibinitperiod}{Firstname}{F\bibinitperiod}{}{}{}{}}% } \name{bookauthor}{1}{}{% {{hash=91a1dd4aeed3c4ec29ca74c4e778be5f}{Bookauthor}{B\bibinitperiod}{Brian}{B\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Publisher of proceeding}% } \strng{namehash}{8ab39ee68c55046dc1f05d657fcefed9} \strng{fullhash}{8ab39ee68c55046dc1f05d657fcefed9} \field{sortinit}{A} \field{labeltitle}{Title of Book bit} \field{booksubtitle}{Book Subtitle} \field{booktitle}{Book Title} \field{booktitleaddon}{Book Titleaddon} \field{title}{Title of Book bit} \field{year}{2010} \field{pages}{123\bibrangedash 126} \verb{verbb} \verb String \endverb \endentry |; # Default inheritance supressed except for specified my $cr8 = q| \entry{cr8}{incollection}{} \name{labelname}{1}{}{% {{hash=3d449e56eb3ca1ae80dc99a18d689795}{Smith}{S\bibinitperiod}{Firstname}{F\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=3d449e56eb3ca1ae80dc99a18d689795}{Smith}{S\bibinitperiod}{Firstname}{F\bibinitperiod}{}{}{}{}}% } \strng{namehash}{3d449e56eb3ca1ae80dc99a18d689795} \strng{fullhash}{3d449e56eb3ca1ae80dc99a18d689795} \field{sortinit}{S} \field{labeltitle}{Title of Collection bit} \field{booktitle}{Book Title} \field{title}{Title of Collection bit} \field{year}{2010} \field{pages}{1\bibrangedash 12} \endentry |; # xref field is included as the parent is included by being crossrefed >= mincrossrefs times my $xr1 = q| \entry{xr1}{inbook}{} \name{labelname}{1}{}{% {{hash=e0ecc4fc668ee499d1afba44e1ac064d}{Zentrum}{Z\bibinitperiod}{Zoe}{Z\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=e0ecc4fc668ee499d1afba44e1ac064d}{Zentrum}{Z\bibinitperiod}{Zoe}{Z\bibinitperiod}{}{}{}{}}% } \strng{namehash}{e0ecc4fc668ee499d1afba44e1ac064d} \strng{fullhash}{e0ecc4fc668ee499d1afba44e1ac064d} \field{sortinit}{Z} \field{labeltitle}{Moods Mildly Modified} \field{origyear}{1921} \field{title}{Moods Mildly Modified} \strng{xref}{xrm} \endentry |; # xref field is included as the parent is included by being crossrefed >= mincrossrefs times my $xr2 = q| \entry{xr2}{inbook}{} \name{labelname}{1}{}{% {{hash=6afa09374ecfd6b394ce714d2d9709c7}{Instant}{I\bibinitperiod}{Ian}{I\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=6afa09374ecfd6b394ce714d2d9709c7}{Instant}{I\bibinitperiod}{Ian}{I\bibinitperiod}{}{}{}{}}% } \strng{namehash}{6afa09374ecfd6b394ce714d2d9709c7} \strng{fullhash}{6afa09374ecfd6b394ce714d2d9709c7} \field{sortinit}{I} \field{labeltitle}{Migraines Multiplying Madly} \field{origyear}{1926} \field{title}{Migraines Multiplying Madly} \strng{xref}{xrm} \endentry |; # This is included as it is crossrefed >= mincrossrefs times # Notice lack of labelname and hashes because the only name is EDITOR and useeditor is false my $xrm = q| \entry{xrm}{book}{} \name{editor}{1}{}{% {{hash=809950f9b59ae207092b909a19dcb27b}{Prendergast}{P\bibinitperiod}{Peter}{P\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Mainstream}% } \field{sortinit}{C} \field{labeltitle}{Calligraphy, Calisthenics, Culture} \field{title}{Calligraphy, Calisthenics, Culture} \field{year}{1970} \endentry |; # xref field is included as the parent is cited my $xr3 = q| \entry{xr3}{inbook}{} \name{labelname}{1}{}{% {{hash=9788055665b9bb4b37c776c3f6b74f16}{Normal}{N\bibinitperiod}{Norman}{N\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=9788055665b9bb4b37c776c3f6b74f16}{Normal}{N\bibinitperiod}{Norman}{N\bibinitperiod}{}{}{}{}}% } \strng{namehash}{9788055665b9bb4b37c776c3f6b74f16} \strng{fullhash}{9788055665b9bb4b37c776c3f6b74f16} \field{sortinit}{N} \field{labeltitle}{Russian Regalia Revisited} \field{origyear}{1923} \field{title}{Russian Regalia Revisited} \strng{xref}{xrt} \endentry |; # cited as normal my $xrt = q| \entry{xrt}{book}{} \name{editor}{1}{}{% {{hash=bf7d6b02f3e073913e5bfe5059508dd5}{Lunders}{L\bibinitperiod}{Lucy}{L\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Middling}% } \field{sortinit}{K} \field{labeltitle}{Kings, Cork and Calculation} \field{title}{Kings, Cork and Calculation} \field{year}{1977} \endentry |; # No crossref field as parent is not cited (mincrossrefs < 2) my $cr4 = q| \entry{cr4}{inbook}{} \name{labelname}{1}{}{% {{hash=50ef7fd3a1be33bccc5de2768b013836}{Mumble}{M\bibinitperiod}{Morris}{M\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=50ef7fd3a1be33bccc5de2768b013836}{Mumble}{M\bibinitperiod}{Morris}{M\bibinitperiod}{}{}{}{}}% } \name{editor}{1}{}{% {{hash=6ea89bd4958743a20b70fe17647d6af5}{Jermain}{J\bibinitperiod}{Jeremy}{J\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Pillsbury}% } \strng{namehash}{50ef7fd3a1be33bccc5de2768b013836} \strng{fullhash}{50ef7fd3a1be33bccc5de2768b013836} \field{sortinit}{M} \field{labeltitle}{Enterprising Entities} \field{booktitle}{Vanquished, Victor, Vandal} \field{origyear}{1911} \field{title}{Enterprising Entities} \field{year}{1945} \endentry |; # No crossref field as parent is not cited (mincrossrefs < 2) my $xr4 = q| \entry{xr4}{inbook}{} \name{labelname}{1}{}{% {{hash=7804ffef086c0c4686c235807f5cb502}{Mistrel}{M\bibinitperiod}{Megan}{M\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=7804ffef086c0c4686c235807f5cb502}{Mistrel}{M\bibinitperiod}{Megan}{M\bibinitperiod}{}{}{}{}}% } \strng{namehash}{7804ffef086c0c4686c235807f5cb502} \strng{fullhash}{7804ffef086c0c4686c235807f5cb502} \field{sortinit}{M} \field{labeltitle}{Lumbering Lunatics} \field{origyear}{1933} \field{title}{Lumbering Lunatics} \endentry |; # Missing keys in xref/crossref should be deleted during datasource parse # So these two should have no xref/crossref data in them my $mxr = q| \entry{mxr}{inbook}{} \name{labelname}{1}{}{% {{hash=7804ffef086c0c4686c235807f5cb502}{Mistrel}{M\bibinitperiod}{Megan}{M\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=7804ffef086c0c4686c235807f5cb502}{Mistrel}{M\bibinitperiod}{Megan}{M\bibinitperiod}{}{}{}{}}% } \strng{namehash}{7804ffef086c0c4686c235807f5cb502} \strng{fullhash}{7804ffef086c0c4686c235807f5cb502} \field{sortinit}{M} \field{labeltitle}{Lumbering Lunatics} \field{origyear}{1933} \field{title}{Lumbering Lunatics} \endentry |; my $mcr = q| \entry{mcr}{inbook}{} \name{labelname}{1}{}{% {{hash=7804ffef086c0c4686c235807f5cb502}{Mistrel}{M\bibinitperiod}{Megan}{M\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=7804ffef086c0c4686c235807f5cb502}{Mistrel}{M\bibinitperiod}{Megan}{M\bibinitperiod}{}{}{}{}}% } \strng{namehash}{7804ffef086c0c4686c235807f5cb502} \strng{fullhash}{7804ffef086c0c4686c235807f5cb502} \field{sortinit}{M} \field{labeltitle}{Lumbering Lunatics} \field{origyear}{1933} \field{title}{Lumbering Lunatics} \endentry |; my $ccr1 = q| \entry{ccr2}{book}{} \name{labelname}{1}{}{% {{hash=6268941b408d3263bddb208a54899ea9}{Various}{V\bibinitperiod}{Vince}{V\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=6268941b408d3263bddb208a54899ea9}{Various}{V\bibinitperiod}{Vince}{V\bibinitperiod}{}{}{}{}}% } \name{editor}{1}{}{% {{hash=cfee758a1c82df2e26af1985e061bb0a}{Editor}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \strng{namehash}{6268941b408d3263bddb208a54899ea9} \strng{fullhash}{6268941b408d3263bddb208a54899ea9} \field{sortinit}{V} \field{labeltitle}{Misc etc.} \strng{crossref}{ccr1} \field{title}{Misc etc.} \field{year}{1923} \endentry |; my $ccr2 = q| \entry{ccr3}{inbook}{} \name{bookauthor}{1}{}{% {{hash=6268941b408d3263bddb208a54899ea9}{Various}{V\bibinitperiod}{Vince}{V\bibinitperiod}{}{}{}{}}% } \name{editor}{1}{}{% {{hash=cfee758a1c82df2e26af1985e061bb0a}{Editor}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \field{sortinit}{P} \field{labeltitle}{Perhaps, Perchance, Possibilities?} \field{booktitle}{Misc etc.} \strng{crossref}{ccr2} \field{title}{Perhaps, Perchance, Possibilities?} \field{year}{1911} \endentry |; # This is strange in what it gets from where but it shows information being inherited from two # sources my $ccr3 = q| \entry{ccr4}{inbook}{} \name{bookauthor}{1}{}{% {{hash=6268941b408d3263bddb208a54899ea9}{Various}{V\bibinitperiod}{Vince}{V\bibinitperiod}{}{}{}{}}% } \name{editor}{1}{}{% {{hash=cfee758a1c82df2e26af1985e061bb0a}{Editor}{E\bibinitperiod}{Edward}{E\bibinitperiod}{}{}{}{}}% } \field{sortinit}{S} \field{labeltitle}{Stuff Concerning Varia} \field{booktitle}{Misc etc.} \field{title}{Stuff Concerning Varia} \field{year}{1911} \endentry |; is($out->get_output_entry('cr1', $main0), $cr1, 'crossref test 1'); is($out->get_output_entry('cr2', $main0), $cr2, 'crossref test 2'); is($out->get_output_entry('cr_m', $main0), $cr_m, 'crossref test 3'); is($out->get_output_entry('cr3', $main0), $cr3, 'crossref test 4'); is($out->get_output_entry('crt', $main0), $crt, 'crossref test 5'); is($out->get_output_entry('cr4', $main0), $cr4, 'crossref test 6'); is($section0->has_citekey('crn'), 0,'crossref test 7'); is($out->get_output_entry('cr6', $main0), $cr6, 'crossref test (inheritance) 8'); is($out->get_output_entry('cr7', $main0), $cr7, 'crossref test (inheritance) 9'); is($out->get_output_entry('cr8', $main0), $cr8, 'crossref test (inheritance) 10'); is($out->get_output_entry('xr1', $main0), $xr1, 'xref test 1'); is($out->get_output_entry('xr2', $main0), $xr2, 'xref test 2'); is($out->get_output_entry('xrm', $main0), $xrm, 'xref test 3'); is($out->get_output_entry('xr3', $main0), $xr3, 'xref test 4'); is($out->get_output_entry('xrt', $main0), $xrt, 'xref test 5'); is($out->get_output_entry('xr4', $main0), $xr4, 'xref test 6'); is($section0->has_citekey('xrn'), 0,'xref test 7'); is($out->get_output_entry('mxr', $main0), $mxr, 'missing xref test'); is($out->get_output_entry('mcr', $main0), $mcr, 'missing crossef test'); is($section1->has_citekey('crn'), 0,'mincrossrefs reset between sections'); is($out->get_output_entry('ccr2', $main0), $ccr1, 'cascading crossref test 1'); is($out->get_output_entry('ccr3', $main0), $ccr2, 'cascading crossref test 2'); chomp $stderr; is($stderr, "ERROR - Circular inheritance between 'circ1'<->'circ2'", 'Cyclic crossref error check'); is($section0->has_citekey('r1'), 1,'Recursive crossref test 1'); ok(defined($section0->bibentry('r1')),'Recursive crossref test 2'); is($section0->has_citekey('r2'), 0,'Recursive crossref test 3'); ok(defined($section0->bibentry('r2')),'Recursive crossref test 4'); is($section0->has_citekey('r3'), 0,'Recursive crossref test 5'); ok(defined($section0->bibentry('r3')),'Recursive crossref test 6'); is($section0->has_citekey('r4'), 0,'Recursive crossref test 7'); ok(defined($section0->bibentry('r4')),'Recursive crossref test 8'); biblatex-biber-1.8/t/remote-files.t000555000000000000 1730012230324175 16537 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8' ; use Test::More; if ($ENV{BIBER_DEV_TESTS}) { plan tests => 3; } else { plan skip_all => 'BIBER_DEV_TESTS not set'; } use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata") ; # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('remote-files.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setoption('quiet', 1); Biber::Config->setoption('nodieonerror', 1); # because the remote bibs might be messy # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; my $cu1 = q| \entry{citeulike:8283461}{article}{} \name{labelname}{4}{}{% {{uniquename=0,hash=aba7750b7045425a3cf8573f7710ec18}{Marazziti}{M\bibinitperiod}{D.}{D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=1f2c257ff6c86cffeb33019b6d8598c5}{Akiskal}{A\bibinitperiod}{H.\bibnamedelimi S.}{H\bibinitperiod\bibinitdelim S\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=e1b1769dbb6e7d04008811b49cd745a9}{Rossi}{R\bibinitperiod}{A.}{A\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=b1d8ec8b73d39a27898e50cfa3e3c676}{Cassano}{C\bibinitperiod}{G.\bibnamedelimi B.}{G\bibinitperiod\bibinitdelim B\bibinitperiod}{}{}{}{}}% } \name{author}{4}{}{% {{uniquename=0,hash=aba7750b7045425a3cf8573f7710ec18}{Marazziti}{M\bibinitperiod}{D.}{D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=1f2c257ff6c86cffeb33019b6d8598c5}{Akiskal}{A\bibinitperiod}{H.\bibnamedelimi S.}{H\bibinitperiod\bibinitdelim S\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=e1b1769dbb6e7d04008811b49cd745a9}{Rossi}{R\bibinitperiod}{A.}{A\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=b1d8ec8b73d39a27898e50cfa3e3c676}{Cassano}{C\bibinitperiod}{G.\bibnamedelimi B.}{G\bibinitperiod\bibinitdelim B\bibinitperiod}{}{}{}{}}% } \strng{namehash}{7f19319e09aa3239f02eb31ec7a4aa8b} \strng{fullhash}{ee363ce5e21ebe022f83aae896dd47f9} \field{sortinit}{M} \field{labelyear}{1999} \field{labelmonth}{05} \field{datelabelsource}{} \field{labeltitle}{Alteration of the platelet serotonin transporter in romantic love.} \field{abstract}{{BACKGROUND}: The evolutionary consequences of love are so important that there must be some long-established biological process regulating it. Recent findings suggest that the serotonin ({5-HT}) transporter might be linked to both neuroticism and sexual behaviour as well as to obsessive-compulsive disorder ({OCD}). The similarities between an overvalued idea, such as that typical of subjects in the early phase of a love relationship, and obsession, prompted us to explore the possibility that the two conditions might share alterations at the level of the {5-HT} transporter. {METHODS}: Twenty subjects who had recently (within the previous 6 months) fallen in love, 20 unmedicated {OCD} patients and 20 normal controls, were included in the study. The {5-HT} transporter was evaluated with the specific binding of {3H}-paroxetine ({3H}-Par) to platelet membranes. {RESULTS}: The results showed that the density of {3H}-Par binding sites was significantly lower in subjects who had recently fallen in love and in {OCD} patients than in controls. {DISCUSSION}: The main finding of the present study is that subjects who were in the early romantic phase of a love relationship were not different from {OCD} patients in terms of the density of the platelet {5-HT} transporter, which proved to be significantly lower than in the normal controls. This would suggest common neurochemical changes involving the {5-HT} system, linked to psychological dimensions shared by the two conditions, perhaps at an ideational level.} \field{issn}{0033-2917} \field{journaltitle}{Psychological medicine} \field{month}{05} \field{number}{3} \field{title}{Alteration of the platelet serotonin transporter in romantic love.} \field{volume}{29} \field{year}{1999} \field{pages}{741\bibrangedash 745} \verb{url} \verb http://www.biomedexperts.com/Abstract.bme/10405096 \endverb \keyw{love,romantic} \endentry |; my $dl1 = q| \entry{AbdelbarH98}{article}{} \name{labelname}{2}{}{% {{uniquename=0,hash=14c582ce40292affd427311ca8e3bc9c}{Abdelbar}{A\bibinitperiod}{A.M.}{A\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=558ac9729b484b6f378e45a86582ea1d}{Hedetniemi}{H\bibinitperiod}{S.M.}{S\bibinitperiod}{}{}{}{}}% } \name{author}{2}{}{% {{uniquename=0,hash=14c582ce40292affd427311ca8e3bc9c}{Abdelbar}{A\bibinitperiod}{A.M.}{A\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=558ac9729b484b6f378e45a86582ea1d}{Hedetniemi}{H\bibinitperiod}{S.M.}{S\bibinitperiod}{}{}{}{}}% } \strng{namehash}{01599a4cb58316d64208b12a07741765} \strng{fullhash}{01599a4cb58316d64208b12a07741765} \field{sortinit}{A} \field{labelyear}{1998} \field{datelabelsource}{} \field{labeltitle}{Approximating {MAP}s for belief networks is {NP}-hard and other theorems} \field{journaltitle}{Artificial Intelligence} \field{title}{Approximating {MAP}s for belief networks is {NP}-hard and other theorems} \field{volume}{102} \field{year}{1998} \field{pages}{21\bibrangedash 38} \endentry |; my $ssl = q| \entry{merleau-ponty_philosophe_2010}{incollection}{} \name{labelname}{1}{}{% {{uniquename=0,hash=83d062f99d033839537243075d75bad2}{Merleau-Ponty}{M\bibinithyphendelim P\bibinitperiod}{Maurice}{M\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=83d062f99d033839537243075d75bad2}{Merleau-Ponty}{M\bibinithyphendelim P\bibinitperiod}{Maurice}{M\bibinitperiod}{}{}{}{}}% } \name{editor}{1}{}{% {{hash=ff5f90046157eecef0c22da4dac6486e}{Lefort}{L\bibinitperiod}{Claude}{C\bibinitperiod}{}{}{}{}}% } \list{language}{1}{% {Fransk}% } \list{location}{1}{% {Paris}% } \list{publisher}{1}{% {Éditions Gallimard}% } \strng{namehash}{83d062f99d033839537243075d75bad2} \strng{fullhash}{83d062f99d033839537243075d75bad2} \field{sortinit}{M} \field{labelyear}{2010} \field{datelabelsource}{} \field{labeltitle}{Le philosophe et son ombre} \field{booktitle}{Œuvres} \field{title}{Le philosophe et son ombre} \field{year}{2010} \field{pages}{1267\bibrangedash 1289} \keyw{Husserl,Edmund,autrui,chair,constitution,intercorporéité,l'impensé,ouverture} \endentry |; is( $out->get_output_entry('citeulike:8283461', $main), $cu1, 'Fetch from citeulike') ; is( $out->get_output_entry('AbdelbarH98', $main), $dl1, 'Fetch from plain bib download') ; is( $out->get_output_entry('merleau-ponty_philosophe_2010', $main), $ssl, 'HTTPS test') ; biblatex-biber-1.8/t/extratitle.t000555000000000000 515112230324176 16313 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 14; use Biber; use Biber::Utils; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('extratitle.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 1); Biber::Config->setblxoption('maxbibnames', 1); # Now generate the information $biber->prepare; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; # Don't forget that the extratitle data is inserted after sorting is($main->get_extratitledata('L1'), '1', 'Same name, same title - 1'); is($main->get_extratitledata('L2'), '2', 'Same name, same title - 2'); is($main->get_extratitledata('L3'), '1', 'No name, same title - 1'); is($main->get_extratitledata('L4'), '2', 'No name, same title - 2'); ok(is_undef($main->get_extratitledata('L5')), 'No name, same title as with name - 1'); is($main->get_extratitledata('L6'), '1', 'No name, same shorttitle/title - 1'); is($main->get_extratitledata('L7'), '2', 'No name, same shorttitle/title - 2'); ok(is_undef($bibentries->entry('L8')->get_field('singletitle')), 'Singletitle test - 1'); ok(is_undef($bibentries->entry('L9')->get_field('singletitle')), 'Singletitle test - 2'); is($bibentries->entry('L10')->get_field('singletitle'), '1', 'Singletitle test - 3'); is($bibentries->entry('L11')->get_field('singletitle'), '1', 'Singletitle test - 4'); ok(is_undef($bibentries->entry('L12')->get_field('singletitle')), 'Singletitle test - 5'); ok(is_undef($bibentries->entry('L1')->get_field('singletitle')), 'Singletitle test - 6'); is($bibentries->entry('L5')->get_field('singletitle'), '1', 'Singletitle test - 7'); biblatex-biber-1.8/t/sort-case.t000555000000000000 417012230324176 16026 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 2; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata") ; my $S; # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('sort-case.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests Biber::Config->setoption('sortcase', 1); Biber::Config->setoption('sortupper', 1); Biber::Config->setoption('sortlocale', 'C'); $S = [ [ {}, {'author' => {}}, ], ]; Biber::Config->setblxoption('sorting', $S); $biber->prepare; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); is_deeply([$main->get_keys], ['CS1','CS3','CS2'], 'U::C case - 1'); $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('sort-case.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Global here is sortcase=0, sortupper=1 # title is sortcase=1, sortupper=0 # So, all names are the same and it depends on title $biber->prepare; $section = $biber->sections->get_section(0); $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); is_deeply([$main->get_keys], ['CS3','CS2','CS1'], 'U::C case - 2'); biblatex-biber-1.8/t/set-static.t000555000000000000 1211312230324175 16221 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 5; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('set-static.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setoption('fastsort', 1); # Now generate the information $biber->prepare; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $out = $biber->get_output_obj; my $string1 = q| \entry{Static1}{set}{} \set{Static2,Static3,Static4} \name{labelname}{1}{}{% {{hash=43874d80d7ce68027102819f16c47df1}{Bumble}{B\bibinitperiod}{Brian}{B\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=43874d80d7ce68027102819f16c47df1}{Bumble}{B\bibinitperiod}{Brian}{B\bibinitperiod}{}{}{}{}}% } \strng{namehash}{43874d80d7ce68027102819f16c47df1} \strng{fullhash}{43874d80d7ce68027102819f16c47df1} \field{sortinit}{0} \field{labelyear}{2001} \field{datelabelsource}{} \field{labeltitle}{Blessed Brains} \field{annotation}{Some notes} \field{title}{Blessed Brains} \field{year}{2001} \endentry |; my $string2 = q| \entry{Static2}{book}{} \inset{Static1} \name{labelname}{1}{}{% {{hash=43874d80d7ce68027102819f16c47df1}{Bumble}{B\bibinitperiod}{Brian}{B\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=43874d80d7ce68027102819f16c47df1}{Bumble}{B\bibinitperiod}{Brian}{B\bibinitperiod}{}{}{}{}}% } \strng{namehash}{43874d80d7ce68027102819f16c47df1} \strng{fullhash}{43874d80d7ce68027102819f16c47df1} \field{sortinit}{0} \field{labeltitle}{Blessed Brains} \field{annotation}{Some Blessed Note} \field{title}{Blessed Brains} \field{year}{2001} \endentry |; my $string3 = q| \entry{Static3}{book}{} \inset{Static1} \name{labelname}{1}{}{% {{hash=da80091c8cd89e5269bd55af1bd5d2fa}{Crenellation}{C\bibinitperiod}{Clive}{C\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=da80091c8cd89e5269bd55af1bd5d2fa}{Crenellation}{C\bibinitperiod}{Clive}{C\bibinitperiod}{}{}{}{}}% } \strng{namehash}{da80091c8cd89e5269bd55af1bd5d2fa} \strng{fullhash}{da80091c8cd89e5269bd55af1bd5d2fa} \field{sortinit}{0} \field{labeltitle}{Castles and Crime} \field{title}{Castles and Crime} \field{year}{2002} \endentry |; my $string4 = q| \entry{Static4}{book}{} \inset{Static1} \name{labelname}{1}{}{% {{hash=22dafa5cd57bb5dd7f3e3bab98fd539c}{Dingle}{D\bibinitperiod}{Derek}{D\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=22dafa5cd57bb5dd7f3e3bab98fd539c}{Dingle}{D\bibinitperiod}{Derek}{D\bibinitperiod}{}{}{}{}}% } \strng{namehash}{22dafa5cd57bb5dd7f3e3bab98fd539c} \strng{fullhash}{22dafa5cd57bb5dd7f3e3bab98fd539c} \field{sortinit}{0} \field{labeltitle}{Dungeons, Dark and Dangerous} \field{title}{Dungeons, Dark and Dangerous} \field{year}{2005} \endentry |; # Labelyear is now here as skiplab is not set for this entry when cited in section # without citation of a set it is a member of my $string5 = q| \entry{Static2}{book}{} \name{labelname}{1}{}{% {{hash=43874d80d7ce68027102819f16c47df1}{Bumble}{B\bibinitperiod}{Brian}{B\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=43874d80d7ce68027102819f16c47df1}{Bumble}{B\bibinitperiod}{Brian}{B\bibinitperiod}{}{}{}{}}% } \strng{namehash}{43874d80d7ce68027102819f16c47df1} \strng{fullhash}{43874d80d7ce68027102819f16c47df1} \field{sortinit}{0} \field{labelyear}{2001} \field{datelabelsource}{} \field{labeltitle}{Blessed Brains} \field{annotation}{Some Blessed Note} \field{title}{Blessed Brains} \field{year}{2001} \endentry |; is($out->get_output_entry('Static1', $main), $string1, 'Static set test 1'); is($out->get_output_entry('Static2', $main), $string2, 'Static set test 2'); is($out->get_output_entry('Static3', $main), $string3, 'Static set test 3'); is($out->get_output_entry('Static4', $main), $string4, 'Static set test 4'); is($out->get_output_entry('Static2', $main, 1), $string5, 'Static set test 5'); biblatex-biber-1.8/t/sortlists.t000555000000000000 430112230324176 16170 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 8; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); my $S; # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('sortlists.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # (re)generate informtion based on option settings $biber->prepare; my $section = $biber->sections->get_section(0); my $out = $biber->get_output_obj; is_deeply([$biber->sortlists->get_list(0, 'entry', 'lname')->get_keys], ['K1', 'K2', 'K4', 'K3'], 'List - name order'); is_deeply([$biber->sortlists->get_list(0, 'entry', 'lyear')->get_keys], ['K4', 'K1', 'K2', 'K3'], 'List - year order'); is_deeply([$biber->sortlists->get_list(0, 'entry', 'ltitle')->get_keys], ['K1', 'K4', 'K2', 'K3'], 'List - title order'); is_deeply([$biber->sortlists->get_list(0, 'entry', 'lnamef1')->get_keys], ['K2', 'K4'], 'List - name order (filtered) - 1'); is_deeply([$biber->sortlists->get_list(0, 'entry', 'lnamef2')->get_keys], ['K4'], 'List - name order (filtered) - 2'); is_deeply([$biber->sortlists->get_list(0, 'entry', 'lnamef3')->get_keys], ['K1', 'K2'], 'List - name order (filtered) - 3'); is_deeply([$biber->sortlists->get_list(0, 'entry', 'lnamef4')->get_keys], ['K3'], 'List - name order (filtered) - 4'); is_deeply([$biber->sortlists->get_list(0, 'entry', 'lnamef5')->get_keys], ['K1', 'K3'], 'List - name order (filtered) - 5'); biblatex-biber-1.8/t/utils.t000555000000000000 1155612230324177 15315 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8' ; use Test::More tests => 22; use Biber; use Biber::Entry::Name; use Biber::Entry::Names; use Biber::Utils; use Biber::LaTeX::Recode; use Log::Log4perl; use IPC::Cmd qw( can_run ); use Cwd; use Unicode::Normalize; my $cwd = getcwd; my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); # NFD/NFC calls below as we are accessing internal functions which assume NFD and results strings # which assume NFC. # File locating # Using File::Spec->canonpath() to normalise path separators so these tests work # on Windows/non-Windows # Absolute path is(File::Spec->canonpath(locate_biber_file("$cwd/t/tdata/general1.bcf")), File::Spec->canonpath("$cwd/t/tdata/general1.bcf"), 'File location - 1'); # Relative path is(File::Spec->canonpath(locate_biber_file('t/tdata/general1.bcf')), File::Spec->canonpath('t/tdata/general1.bcf'), 'File location - 2'); # Same place as control file Biber::Config->set_ctrlfile_path('t/tdata/general1.bcf'); is(File::Spec->canonpath(locate_biber_file('t/tdata/examples.bib')), File::Spec->canonpath('t/tdata/examples.bib'), 'File location - 3'); # The \cM* is there because if cygwin picks up miktex kpsewhich, it will return a path # with a Ctrl-M on the end # Testing using a file guaranteed to be installed with any latex install SKIP: { skip "No LaTeX installation", 1 unless can_run('kpsewhich'); # using kpsewhich like(File::Spec->canonpath(locate_biber_file('plain.tex')), qr|plain.tex\cM*\z|, 'File location - 4'); } # In output_directory Biber::Config->setoption('output_directory', 't/tdata'); is(File::Spec->canonpath(locate_biber_file('general1.bcf')), File::Spec->canonpath("t/tdata/general1.bcf"), 'File location - 5'); # String normalising is( normalise_string('"a, b–c: d" ', 1), 'a bc d', 'normalise_string' ); Biber::Config->setoption('output_encoding', 'latin1'); is( normalise_string_underscore('\c Se\x{c}\"ok-\foo{a}, N\`i\~no $§+ :-) ', 1), 'Secoka_Nino', 'normalise_string_underscore 1' ); Biber::Config->setoption('output_encoding', 'UTF-8'); is( NFC(normalise_string_underscore('\c Se\x{c}\"ok-\foo{a}, N\`i\~no $§+ :-) ', 0)), 'Şecöka_Nìño', 'normalise_string_underscore 2' ); is( normalise_string_underscore('{Foo de Bar, Graf Ludwig}', 1), 'Foo_de_Bar_Graf_Ludwig', 'normalise_string_underscore 3'); # LaTeX decoding/encoding is( NFC(latex_decode('Mu\d{h}ammad ibn M\=us\=a al-Khw\=arizm\={\i} \r{a}')), 'Muḥammad ibn Mūsā al-Khwārizmī å', 'latex decode 1'); is( latex_decode('\alpha'), '\alpha', 'latex decode 2'); # no greek decoding by default is( latex_decode('\textless\textampersand'), '<&', 'Latex decode 3'); # checking XML encoding bits is( latex_encode(NFD('Muḥammad ibn Mūsā al-Khwārizmī')), 'Mu\d{h}ammad ibn M\={u}s\={a} al-Khw\={a}rizm\={\i}', 'latex encode 1'); is( latex_encode(NFD('α')), 'α', 'latex encode 2'); # no greek encoding by default Biber::LaTeX::Recode->init_schemes('full', 'full'); # Need to do this to reset is( latex_decode('\alpha'), 'α', 'Latex decode 4'); # greek decoding with "full" is( latex_encode(NFD('α')), '{$\alpha$}', 'latex encode 3'); # greek encoding with "full" is( latex_encode(NFD('µ')), '{$\mu$}', 'latex encode 4'); # Testing symbols is( latex_encode(NFD('≄')), '{$\not\simeq$}', 'latex encode 5'); # Testing negated symbols my $names = bless {namelist => [ (bless { namestring => '\"Askdjksdj, Bsadk Cklsjd', nameinitstring => '\"Askdjksdj, BC' }, 'Biber::Entry::Name'), (bless { namestring => 'von Üsakdjskd, Vsajd W\`asdjh', nameinitstring => 'v Üsakdjskd, VW'}, 'Biber::Entry::Name'), (bless { namestring => 'Xaskldjdd, Yajs\x{d}ajks~Z.', nameinitstring => 'Xaskldjdd, YZ'}, 'Biber::Entry::Name'), (bless { namestring => 'Maksjdakj, Nsjahdajsdhj', nameinitstring => 'Maksjdakj, N' }, 'Biber::Entry::Name') ]}, 'Biber::Entry::Names'; is( NFC(makenamesid($names)), 'Äskdjksdj_Bsadk_Cklsjd_von_Üsakdjskd_Vsajd_Wàsdjh_Xaskldjdd_Yajsdajks_Z_Maksjdakj_Nsjahdajsdhj', 'makenameid' ); my @arrayA = qw/ a b c d e f c /; my @arrayB = qw/ c e /; my @AminusB = reduce_array(\@arrayA, \@arrayB); my @AminusBexpected = qw/ a b d f /; is_deeply(\@AminusB, \@AminusBexpected, 'reduce_array') ; is(remove_outer('{Some string}'), 'Some string', 'remove_outer') ; is( normalise_string_hash('Ä.~{\c{C}}.~{\c S}.'), 'Äc:Cc:S', 'normalise_string_lite' ) ; biblatex-biber-1.8/t/configfile.t000555000000000000 11152612230324176 16277 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; use Test::More tests => 9; use Biber; use Cwd qw(getcwd); use File::Spec; use Log::Log4perl; my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); chdir('t/tdata'); my $collopts = { level => 3, variable => 'non-ignorable', table => '/home/user/data/otherkeys.txt' }; my $noinit = [ {value => q/\b\p{Ll}{2}\p{Pd}/}, {value => q/[\x{2bf}\x{2018}]/} ]; my $nosort = [ { name => 'author', value => q/\A\p{L}{2}\p{Pd}/ }, { name => 'author', value => q/[\x{2bf}\x{2018}]/ }, { name => 'translator', value => q/[\x{2bf}\x{2018}]/ } ]; my $sourcemap = [ { datatype => "bibtex", level => "user", map => [ { map_step => [ { map_field_source => "TITLE", map_match => "High-Resolution Micromachined Interferometric Accelerometer", map_final => 1, }, { map_entry_null => 1 }, ], }, { map_step => [ { map_type_source => "ARTICLE", map_type_target => "CUSTOMB" }, ], per_datasource => [{ content => "doesnotexist.bib" }], }, { map_overwrite => 0, map_step => [ { map_field_set => "KEYWORDS", map_field_value => "keyw1, keyw2" }, { map_field_set => "TITLE", map_field_value => "Blah" }, ], per_datasource => [ { content => "examples.bib" }, { content => "doesnotexist.bib" }, ], per_type => [{ content => "ARTICLE" }, { content => "UNPUBLISHED" }], }, { map_step => [ { map_final => 1, map_type_source => "CONVERSATION", map_type_target => "CUSTOMC", }, { map_field_set => "VERBA", map_origentrytype => 1 }, { map_field_set => "VERBB", map_field_value => "somevalue" }, { map_field_set => "VERBC", map_field_value => "somevalue" }, ], }, { map_step => [{ map_type_source => "CHAT", map_type_target => "CUSTOMB" }], }, { map_step => [ { map_field_source => "USERB", map_final => 1 }, { map_field_set => "USERB", map_null => 1 }, { map_field_set => "USERE", map_field_value => "a \x{160}tring" }, { map_field_set => "USERF", map_null => 1 }, ], per_datasource => [{ content => "examples.bib" }], per_type => [{ content => "MISC" }], }, { map_step => [ { map_field_set => "ABSTRACT", map_null => 1 }, { map_field_source => "CONDUCTOR", map_field_target => "NAMEA" }, { map_field_source => "GPS", map_field_target => "USERA" }, { map_field_source => "PARTICIPANT", map_field_target => "NAMEA" }, { map_field_source => "USERB", map_field_target => "USERD" }, ], per_datasource => [{ content => "examples.bib" }], }, { map_step => [ { map_field_source => "PUBMEDID", map_field_target => "EPRINT", map_final => 1, }, { map_field_set => "EPRINTTYPE", map_origfield => 1 }, { map_field_set => "USERD", map_field_value => "Some string of things", }, ], }, { map_step => [ { map_field_source => "LISTB", map_match => "\\A(\\S{2})", map_replace => "REP\$1CED", }, { map_field_source => "LISTB", map_match => "CED", map_replace => "ced" }, ], per_datasource => [{ content => "examples.bib" }], }, { map_step => [{ map_field_set => "LISTA", map_null => 1 }], per_type => [{ content => "REPORT" }], }, { map_step => [ { map_field_source => "LISTC", map_field_target => "INSTITUTION", map_match => "\\A(\\S{2})", map_replace => "REP\$1CED", }, { map_field_set => "entrykey", map_null => 1 }, { map_field_source => "entrykey", map_field_target => "NOTE" }, { map_field_set => "NOTE", map_origfieldval => 1 }, ], per_type => [{ content => "UNPUBLISHED" }], }, { map_overwrite => 0, map_step => [{ map_field_set => "NOTE", map_field_value => "Overwrite note", map_final => 1}, { map_field_set => "TITLE", map_null => 1 }], per_type => [{ content => "ONLINE" }], }, ], map_overwrite => 1, }, { datatype => "endnotexml", level => "user", map => [ { map_step => [ { map_final => 1, map_type_source => "Journal Article", map_type_target => "Report", }, { map_field_set => "label", map_origentrytype => 1 }, ], per_datasource => [{ content => "endnote.xml" }], }, { map_step => [ { map_field_source => "pages", map_match => 64, map_replace => 66 }, ], per_datasource => [{ content => "endnote.xml" }], per_type => [{ content => "Report" }], }, { map_step => [{ map_field_set => "abstract", map_null => 1 }], per_datasource => [{ content => "endnote.xml" }], }, ], map_overwrite => 1, }, { datatype => "ris", level => "user", map => [ { map_step => [{ map_type_source => "JOUR", map_type_target => "RPRT" }], per_datasource => [{ content => "ris1.ris" }], }, { map_overwrite => 1, map_step => [ { map_final => 1, map_type_source => "BOOK", map_type_target => "CHAP" }, { map_field_set => "KW", map_field_value => "somevalue" }, ], }, { map_step => [{ map_field_set => "N2", map_null => 1 }], per_datasource => [{ content => "ris1.ris" }], }, { map_step => [ { map_field_source => "JO", map_match => "Neurosurg\\.", map_replace => "Neurosurgery", }, ], per_datasource => [{ content => "ris1.ris" }], per_type => [{ content => "RPRT" }], }, ], }, { datatype => "zoterordfxml", level => "user", map => [ { map_step => [ { map_field_source => "dc:title", map_match => "(.+)", map_replace => "\\L\$1", }, ], per_type => [{ content => "journalArticle" }], }, { map_step => [{ map_field_set => "dc:subject", map_null => 1 }], per_datasource => [{ content => "zotero.rdf" }], per_type => [ { content => "journalArticle" }, { content => "book" }, { content => "bookSection" }, ], }, ], map_overwrite => 1, }, { datatype => "bibtex", level => "driver", map => [ { map_step => [ { map_final => 1, map_type_source => "conference", map_type_target => "inproceedings", }, { map_final => 1, map_type_source => "electronic", map_type_target => "online", }, { map_final => 1, map_type_source => "www", map_type_target => "online" }, ], }, { map_step => [ { map_final => 1, map_type_source => "mastersthesis", map_type_target => "thesis", }, { map_field_set => "type", map_field_value => "mathesis" }, ], }, { map_step => [ { map_final => 1, map_type_source => "phdthesis", map_type_target => "thesis", }, { map_field_set => "type", map_field_value => "phdthesis" }, ], }, { map_step => [ { map_final => 1, map_type_source => "techreport", map_type_target => "report", }, { map_field_set => "type", map_field_value => "techreport" }, ], }, { map_step => [ { map_field_source => "address", map_field_target => "location" }, { map_field_source => "school", map_field_target => "institution" }, { map_field_source => "annote", map_field_target => "annotation" }, { map_field_source => "archiveprefix", map_field_target => "eprinttype", }, { map_field_source => "journal", map_field_target => "journaltitle" }, { map_field_source => "primaryclass", map_field_target => "eprintclass", }, { map_field_source => "key", map_field_target => "sortkey" }, { map_field_source => "pdf", map_field_target => "file" }, ], }, ], }, { datatype => "endnotexml", level => "driver", map => [ { map_step => [ { map_final => 1, map_type_source => "Aggregated Database", map_type_target => "misc", }, { map_final => 1, map_type_source => "Ancient Text", map_type_target => "misc", }, { map_final => 1, map_type_source => "Artwork", map_type_target => "artwork", }, { map_final => 1, map_type_source => "Audiovisual Material", map_type_target => "misc", }, { map_final => 1, map_type_source => "Bill", map_type_target => "jurisdiction", }, { map_final => 1, map_type_source => "Blog", map_type_target => "online" }, { map_final => 1, map_type_source => "Book", map_type_target => "book" }, { map_final => 1, map_type_source => "Book Section", map_type_target => "inbook", }, { map_final => 1, map_type_source => "Case", map_type_target => "jurisdiction", }, { map_final => 1, map_type_source => "Catalog", map_type_target => "misc" }, { map_final => 1, map_type_source => "Chart or Table", map_type_target => "misc", }, { map_final => 1, map_type_source => "Classical Work", map_type_target => "misc", }, { map_final => 1, map_type_source => "Computer Program", map_type_target => "software", }, { map_final => 1, map_type_source => "Conference Paper", map_type_target => "inproceedings", }, { map_final => 1, map_type_source => "Conference Proceedings", map_type_target => "proceedings", }, { map_final => 1, map_type_source => "Dictionary", map_type_target => "inreference", }, { map_final => 1, map_type_source => "Edited Book", map_type_target => "collection", }, { map_final => 1, map_type_source => "Electronic Article", map_type_target => "article", }, { map_final => 1, map_type_source => "Electronic Book", map_type_target => "book", }, { map_final => 1, map_type_source => "Encyclopedia", map_type_target => "reference", }, { map_final => 1, map_type_source => "Equation", map_type_target => "misc", }, { map_final => 1, map_type_source => "Figure", map_type_target => "misc" }, { map_final => 1, map_type_source => "Film or Broadcast", map_type_target => "movie", }, { map_final => 1, map_type_source => "Government Document", map_type_target => "report", }, { map_final => 1, map_type_source => "Grant", map_type_target => "misc" }, { map_final => 1, map_type_source => "Hearing", map_type_target => "jurisdiction", }, { map_final => 1, map_type_source => "Journal Article", map_type_target => "article", }, { map_final => 1, map_type_source => "Legal Rule or Regulation", map_type_target => "legislation", }, { map_final => 1, map_type_source => "Magazine Article", map_type_target => "article", }, { map_final => 1, map_type_source => "Manuscript", map_type_target => "unpublished", }, { map_final => 1, map_type_source => "Map", map_type_target => "misc" }, { map_final => 1, map_type_source => "Newspaper Article", map_type_target => "article", }, { map_final => 1, map_type_source => "Online Database", map_type_target => "online", }, { map_final => 1, map_type_source => "Online Multimedia", map_type_target => "online", }, { map_final => 1, map_type_source => "Pamphlet", map_type_target => "booklet", }, { map_final => 1, map_type_source => "Patent", map_type_target => "patent", }, { map_final => 1, map_type_source => "Personal Communication", map_type_target => "letter", }, { map_final => 1, map_type_source => "Report", map_type_target => "report", }, { map_final => 1, map_type_source => "Serial", map_type_target => "periodical", }, { map_final => 1, map_type_source => "Standard", map_type_target => "standard", }, { map_final => 1, map_type_source => "Statute", map_type_target => "legislation", }, { map_final => 1, map_type_source => "Thesis", map_type_target => "thesis", }, { map_final => 1, map_type_source => "Unpublished Work", map_type_target => "unpublished", }, { map_final => 1, map_type_source => "Web Page", map_type_target => "online", }, ], }, { map_step => [ { map_field_source => "electronic-resource-num", map_field_target => "eprint", map_final => 1, }, { map_field_source => "alt-title", map_field_target => "shorttitle", map_final => 1, }, { map_field_source => "meeting-place", map_field_target => "venue", map_final => 1, }, { map_field_source => "pub-location", map_field_target => "location", map_final => 1, }, { map_field_source => "orig-pub", map_field_target => "origpublisher", map_final => 1, }, { map_field_source => "authors", map_field_target => "author", map_final => 1, }, { map_field_source => "secondary-authors", map_field_target => "editor", map_final => 1, }, { map_field_source => "tertiary-authors", map_field_target => "commentator", map_final => 1, }, { map_field_source => "subsidiary-authors", map_field_target => "translator", map_final => 1, }, { map_field_source => "year", map_field_target => "date", map_final => 1 }, { map_field_source => "pub-dates", map_field_target => "date", map_final => 1, }, { map_field_source => "num-vols", map_field_target => "volumes", map_final => 1, }, { map_field_source => "call-num", map_field_target => "library", map_final => 1, }, { map_field_source => "notes", map_field_target => "note", map_final => 1 }, { map_field_source => "secondary-title", map_field_target => "subtitle", map_final => 1, }, { map_field_source => "work-type", map_field_target => "type", map_final => 1, }, ], }, { map_step => [ { map_field_source => "authors", map_field_target => "editor" }, ], per_type => [{ content => "Edited Book" }], }, { map_step => [{ map_field_source => "isbn", map_field_target => "issn" }], per_type => [ { content => "Electronic Article" }, { content => "Journal Article" }, { content => "Magazine Article" }, { content => "Newspaper Article" }, ], }, { map_step => [{ map_field_source => "isbn", map_field_target => "number" }], per_type => [ { content => "Patent" }, { content => "Report" }, { content => "Government Document" }, { content => "Legal Rule or Regulation" }, ], }, { map_step => [ { map_field_source => "secondary-title", map_field_target => "title" }, ], per_type => [ { content => "Blog" }, { content => "Online Database" }, { content => "Online Multimedia" }, { content => "Web Page" }, ], }, { map_step => [ { map_field_source => "secondary-title", map_field_target => "booktitle", }, ], per_type => [{ content => "Book Section" }], }, { map_step => [ { map_field_source => "secondary-title", map_field_target => "series" }, ], per_type => [ { content => "Book" }, { content => "Electronic Book" }, { content => "Manuscript" }, { content => "Unpublished Work" }, ], }, { map_step => [ { map_field_source => "secondary-title", map_field_target => "eventtitle", }, ], per_type => [ { content => "Conference Paper" }, { content => "Conference Proceedings" }, ], }, { map_step => [ { map_field_source => "secondary-title", map_field_target => "journaltitle", }, ], per_type => [ { content => "Electronic Article" }, { content => "Journal Article" }, { content => "Magazine Article" }, { content => "Newspaper Article" }, ], }, { map_step => [ { map_field_source => "tertiary-title", map_field_target => "booktitle", }, ], per_type => [{ content => "Book Section" }], }, { map_step => [ { map_field_source => "tertiary-title", map_field_target => "series" }, ], per_type => [ { content => "Conference Proceedings" }, { content => "periodical" }, ], }, ], }, { datatype => "ris", level => "driver", map => [ { map_step => [ { map_final => 1, map_type_source => "ART", map_type_target => "artwork" }, { map_final => 1, map_type_source => "BILL", map_type_target => "jurisdiction", }, { map_final => 1, map_type_source => "BOOK", map_type_target => "book" }, { map_final => 1, map_type_source => "CHAP", map_type_target => "inbook" }, { map_final => 1, map_type_source => "COMP", map_type_target => "software", }, { map_final => 1, map_type_source => "CONF", map_type_target => "proceedings", }, { map_final => 1, map_type_source => "GEN", map_type_target => "misc" }, { map_final => 1, map_type_source => "JFULL", map_type_target => "article", }, { map_final => 1, map_type_source => "JOUR", map_type_target => "article" }, { map_final => 1, map_type_source => "MGZN", map_type_target => "misc" }, { map_final => 1, map_type_source => "MPCT", map_type_target => "movie" }, { map_final => 1, map_type_source => "NEWS", map_type_target => "misc" }, { map_final => 1, map_type_source => "PAMP", map_type_target => "misc" }, { map_final => 1, map_type_source => "PAT", map_type_target => "patent" }, { map_final => 1, map_type_source => "PCOMM", map_type_target => "misc" }, { map_final => 1, map_type_source => "RPRT", map_type_target => "report" }, { map_final => 1, map_type_source => "SER", map_type_target => "misc" }, { map_final => 1, map_type_source => "SLIDE", map_type_target => "misc" }, { map_final => 1, map_type_source => "SOUND", map_type_target => "audio" }, { map_final => 1, map_type_source => "STAT", map_type_target => "legal" }, { map_final => 1, map_type_source => "THES", map_type_target => "thesis" }, { map_final => 1, map_type_source => "UNBILL", map_type_target => "jurisdiction", }, { map_final => 1, map_type_source => "UNPB", map_type_target => "unpublished", }, ], }, { map_step => [ { map_field_source => "Y1", map_field_target => "date" }, { map_field_source => "PY", map_field_target => "date" }, { map_field_source => "Y2", map_field_target => "eventdate" }, { map_field_source => "A1", map_field_target => "author" }, { map_field_source => "AU", map_field_target => "author" }, { map_field_source => "A2", map_field_target => "editor" }, { map_field_source => "A3", map_field_target => "editor" }, { map_field_source => "ED", map_field_target => "editor" }, { map_field_source => "SPEP", map_field_target => "pages" }, { map_field_source => "N1", map_field_target => "note" }, { map_field_source => "N2", map_field_target => "abstract" }, { map_field_source => "AB", map_field_target => "abstract" }, { map_field_source => "JO", map_field_target => "journaltitle" }, { map_field_source => "JF", map_field_target => "journaltitle" }, { map_field_source => "JA", map_field_target => "shortjournal" }, { map_field_source => "VL", map_field_target => "volume" }, { map_field_source => "IS", map_field_target => "issue" }, { map_field_source => "CP", map_field_target => "issue" }, { map_field_source => "CY", map_field_target => "location" }, { map_field_source => "SN", map_field_target => "isbn" }, { map_field_source => "PB", map_field_target => "publisher" }, { map_field_source => "KW", map_field_target => "keywords" }, { map_field_source => "TI", map_field_target => "title" }, { map_field_source => "U1", map_field_target => "usera" }, { map_field_source => "U2", map_field_target => "userb" }, { map_field_source => "U3", map_field_target => "userc" }, { map_field_source => "U4", map_field_target => "userd" }, { map_field_source => "U5", map_field_target => "usere" }, { map_field_source => "UR", map_field_target => "url" }, { map_field_source => "L1", map_field_target => "file" }, ], }, ], }, { datatype => "zoterordfxml", level => "driver", map => [ { map_step => [ { map_final => 1, map_type_source => "conferencePaper", map_type_target => "inproceedings", }, { map_final => 1, map_type_source => "bookSection", map_type_target => "inbook", }, { map_final => 1, map_type_source => "journalArticle", map_type_target => "article", }, { map_final => 1, map_type_source => "magazineArticle", map_type_target => "article", }, { map_final => 1, map_type_source => "newspaperArticle", map_type_target => "article", }, { map_final => 1, map_type_source => "encyclopediaArticle", map_type_target => "inreference", }, { map_final => 1, map_type_source => "manuscript", map_type_target => "unpublished", }, { map_final => 1, map_type_source => "document", map_type_target => "misc", }, { map_final => 1, map_type_source => "dictionaryEntry", map_type_target => "inreference", }, { map_final => 1, map_type_source => "interview", map_type_target => "misc", }, { map_final => 1, map_type_source => "film", map_type_target => "movie" }, { map_final => 1, map_type_source => "webpage", map_type_target => "online", }, { map_final => 1, map_type_source => "note", map_type_target => "misc" }, { map_final => 1, map_type_source => "attachment", map_type_target => "misc", }, { map_final => 1, map_type_source => "bill", map_type_target => "legislation", }, { map_final => 1, map_type_source => "case", map_type_target => "jurisdiction", }, { map_final => 1, map_type_source => "hearing", map_type_target => "jurisdiction", }, { map_final => 1, map_type_source => "statute", map_type_target => "legislation", }, { map_final => 1, map_type_source => "email", map_type_target => "letter" }, { map_final => 1, map_type_source => "map", map_type_target => "image" }, { map_final => 1, map_type_source => "blogPost", map_type_target => "online", }, { map_final => 1, map_type_source => "instantMessage", map_type_target => "letter", }, { map_final => 1, map_type_source => "forumPost", map_type_target => "online", }, { map_final => 1, map_type_source => "audioRecording", map_type_target => "audio", }, { map_final => 1, map_type_source => "presentation", map_type_target => "inproceedings", }, { map_final => 1, map_type_source => "videoRecording", map_type_target => "video", }, { map_final => 1, map_type_source => "tvBroadcast", map_type_target => "misc", }, { map_final => 1, map_type_source => "radioBroadcast", map_type_target => "misc", }, { map_final => 1, map_type_source => "podcast", map_type_target => "online", }, { map_final => 1, map_type_source => "computerProgram", map_type_target => "software", }, ], }, { map_step => [ { map_field_source => "bib:contributors", map_field_target => "author", }, { map_field_source => "bib:authors", map_field_target => "author" }, { map_field_source => "z:interviewers", map_field_target => "author" }, { map_field_source => "z:directors", map_field_target => "author" }, { map_field_source => "z:scriptwriters", map_field_target => "author" }, { map_field_source => "z:bookAuthor", map_field_target => "author" }, { map_field_source => "z:inventors", map_field_target => "author" }, { map_field_source => "z:recipients", map_field_target => "author" }, { map_field_source => "z:counsels", map_field_target => "author" }, { map_field_source => "z:artists", map_field_target => "author" }, { map_field_source => "z:podcasters", map_field_target => "author" }, { map_field_source => "z:presenters", map_field_target => "author" }, { map_field_source => "z:commenters", map_field_target => "author" }, { map_field_source => "z:programers", map_field_target => "author" }, { map_field_source => "z:composers", map_field_target => "author" }, { map_field_source => "z:producers", map_field_target => "author" }, { map_field_source => "z:performers", map_field_target => "author" }, { map_field_source => "bib:editors", map_field_target => "editor" }, { map_field_source => "z:translators", map_field_target => "translator", }, { map_field_source => "z:seriesEditors", map_field_target => "editor" }, { map_field_source => "dc:date", map_field_target => "date" }, { map_field_source => "bib:pages", map_field_target => "pages" }, { map_field_source => "dc:title", map_field_target => "title" }, { map_field_source => "z:proceedingsTitle", map_field_target => "title", }, { map_field_source => "z:encyclopediaTitle", map_field_target => "title", }, { map_field_source => "z:dictionaryTitle", map_field_target => "title", }, { map_field_source => "z:websiteTitle", map_field_target => "title" }, { map_field_source => "z:forumTitle", map_field_target => "title" }, { map_field_source => "z:blogTitle", map_field_target => "title" }, { map_field_source => "z:nameOfAct", map_field_target => "title" }, { map_field_source => "z:caseName", map_field_target => "title" }, { map_field_source => "z:meetingName", map_field_target => "eventtitle", }, { map_field_source => "prism:volume", map_field_target => "volume" }, { map_field_source => "numberOfVolumes", map_field_target => "volumes", }, { map_field_source => "z:numPages", map_field_target => "pagetotal" }, { map_field_source => "prism:edition", map_field_target => "edition" }, { map_field_source => "dc:description", map_field_target => "note" }, { map_field_source => "dc:alternative", map_field_target => "shortjournal", }, { map_field_source => "dcterms:abstract", map_field_target => "abstract", }, { map_field_source => "dc:type", map_field_target => "type" }, { map_field_source => "z:shortTitle", map_field_target => "shorttitle", }, { map_field_source => "z:bookTitle", map_field_target => "booktitle" }, { map_field_source => "prism:number", map_field_target => "number" }, { map_field_source => "z:patentNumber", map_field_target => "number" }, { map_field_source => "z:codeNumber", map_field_target => "number" }, { map_field_source => "z:reportNumber", map_field_target => "number" }, { map_field_source => "z:billNumber", map_field_target => "number" }, { map_field_source => "z:documentNumber", map_field_target => "number", }, { map_field_source => "z:publicLawNumber", map_field_target => "number", }, { map_field_source => "z:applicationNumber", map_field_target => "number", }, { map_field_source => "z:episodeNumber", map_field_target => "number" }, { map_field_source => "dc:coverage", map_field_target => "location" }, { map_field_source => "z:university", map_field_target => "institution", }, { map_field_source => "z:language", map_field_target => "language" }, { map_field_source => "z:version", map_field_target => "version" }, { map_field_source => "z:libraryCatalog", map_field_target => "library", }, ], }, ], }, ]; # Set up Biber object my $biber = Biber->new( configfile => 'biber-test.conf', mincrossrefs => 7 ); $biber->parse_ctrlfile('general1.bcf'); is(Biber::Config->getoption('mincrossrefs'), 7, 'Options 1 - from cmdline'); is(Biber::Config->getoption('configfile'), File::Spec->catfile('biber-test.conf'), 'Options 2 - from cmdline'); is(Biber::Config->getoption('sortlocale'), 'testlocale', 'Options 3 - from config file'); is_deeply(Biber::Config->getoption('collate_options'), $collopts, 'Options 4 - from config file'); is_deeply(Biber::Config->getoption('nosort'), $nosort, 'Options 5 - from config file'); is_deeply(Biber::Config->getoption('noinit'), $noinit, 'Options 6 - from config file'); is_deeply(Biber::Config->getoption('sortcase'), 0, 'Options 7 - from .bcf'); is(Biber::Config->getoption('decodecharsset'), 'base', 'Options 8 - from defaults'); # Here the result is a merge of the biblatex option from the .bcf and the option from # the biber config file as sourcemap is a special case is_deeply(Biber::Config->getoption('sourcemap'), $sourcemap, 'Options 9 - from config file'); biblatex-biber-1.8/t/bibtex-output.t000555000000000000 615312230324176 16744 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use Test::More tests => 5; use Encode; use Biber; use Biber::Utils; use Biber::Output::bibtex; use Log::Log4perl; use Unicode::Normalize; chdir("t/tdata"); no warnings 'utf8'; use utf8; # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('output_resolve', 1); Biber::Config->setoption('output_format', 'bibtex'); Biber::Config->setoption('sortlocale', 'C'); $biber->parse_ctrlfile('bibtex-output.bcf'); $biber->set_output_obj(Biber::Output::bibtex->new()); # Now generate the information $biber->prepare_tool; my $main = $biber->sortlists->get_list(99999, 'entry', Biber::Config->getblxoption('sortscheme')); my $out = $biber->get_output_obj; my $b1 = q|@ARTICLE{murray, ANNOTATION = {An \texttt{article} entry with \arabic{author} authors. By default, long author and editor lists are automatically truncated. This is configurable}, AUTHOR = {Hostetler, Michael J. and Wingate, Julia E. and Zhong, Chuan-Jian and Harris, Jay E. and Vachet, Richard W. and Clark, Michael R. and Londono, J. David and Green, Stephen J. and Stokes, Jennifer J. and Wignall, George D. and Glish, Gary L. and Porter, Marc D. and Evans, Neal D. and Murray, Royce W.}, HYPHENATION = {american}, INDEXTITLE = {Alkanethiolate gold cluster molecules}, JOURNALTITLE = {Langmuir}, NUMBER = {1}, PAGES = {17--30}, SHORTTITLE = {Alkanethiolate gold cluster molecules}, SUBTITLE = {Core and monolayer properties as a function of core size}, TITLE = {Alkanethiolate gold cluster molecules with core diameters from 1.5 to 5.2~nm}, VOLUME = {14}, YEAR = {1998}, } |; my $b2 = q|@BOOK{b1, MAINSUBTITLE = {Mainsubtitle}, MAINTITLE = {Maintitle}, MAINTITLEADDON = {Maintitleaddon}, TITLE = {Booktitle}, YEAR = {1999}, } |; my $b3 = q|@BOOK{xd1, AUTHOR = {Edward Ellington}, LOCATION = {New York and London}, NOTE = {A Note}, PUBLISHER = {Macmillan}, YEAR = {2001}, } |; # NFD here because we are testing internals here and all internals expect NFD is($out->get_output_entry('murray',), $b1, 'bibtex output 1'); is($out->get_output_entry('b1',), $b2, 'bibtex output 2'); is($out->get_output_entry('xd1',), $b3, 'bibtex output 3'); ok(is_undef($out->get_output_entry('reese')), 'bibtex output 4'); is_deeply([$main->get_keys], ['murray', 'kant:ku', 'b1', 'xd1'], 'bibtex output sorting'); biblatex-biber-1.8/t/sort-complex.t000555000000000000 2107312230324176 16603 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 9; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('sort-complex.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Want to ignore SHORTHAND* fields for the first few tests Biber::Config->setoption('sourcemap', [ { datatype => "bibtex", level => "user", map => [ { map_step => [{ map_field_set => "SHORTHAND", map_null => 1 }, { map_field_set => "SORTSHORTHAND", map_null => 1 }] }]}]); # Biblatex options Biber::Config->setblxoption('labeldate', undef); # Now generate the information $biber->prepare; my $section = $biber->sections->get_section(0); my $bibentries = $section->bibentries; my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $shs = $biber->sortlists->get_list(0, 'shorthand', 'shorthand'); my $out = $biber->get_output_obj; my $ss = [ [ {}, {'presort' => {}} ], [ {'final' => 1}, {'sortkey' => {}} ], [ {}, {'labelalpha' => {}}, ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'volume' => {pad_char => '0', pad_side => 'left', pad_width => '4'}}, {'0000' => {}} ], ]; my $l4 = q| \entry{L4}{book}{} \true{morelabelname} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \true{moreauthor} \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \list{location}{1}{% {Cambridge}% } \list{publisher}{1}{% {Another press}% } \strng{namehash}{6eb389989020e8246fee90ac93fcecbe} \strng{fullhash}{6eb389989020e8246fee90ac93fcecbe} \field{labelalpha}{Doe\textbf{+}95} \field{sortinit}{D} \field{labeltitle}{Some title about sorting} \field{extraalpha}{2} \field{title}{Some title about sorting} \field{year}{1995} \endentry |; my $l1 = q| \entry{L1}{book}{} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \list{location}{1}{% {Cambridge}% } \list{publisher}{1}{% {A press}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{labelalpha}{Doe95} \field{sortinit}{D} \field{labeltitle}{Algorithms For Sorting} \field{extraalpha}{1} \field{title}{Algorithms For Sorting} \field{year}{1995} \endentry |; my $l2 = q| \entry{L2}{book}{} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \list{location}{1}{% {Cambridge}% } \list{publisher}{1}{% {A press}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{labelalpha}{Doe95} \field{sortinit}{D} \field{labeltitle}{Sorting Algorithms} \field{extraalpha}{3} \field{title}{Sorting Algorithms} \field{year}{1995} \endentry |; my $l3 = q| \entry{L3}{book}{} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \list{location}{1}{% {Cambridge}% } \list{publisher}{1}{% {A press}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{labelalpha}{Doe95} \field{sortinit}{D} \field{labeltitle}{More and More Algorithms} \field{extraalpha}{2} \field{title}{More and More Algorithms} \field{year}{1995} \endentry |; my $l5 = q| \entry{L5}{book}{} \true{morelabelname} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \true{moreauthor} \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \list{location}{1}{% {Cambridge}% } \list{publisher}{1}{% {Another press}% } \strng{namehash}{6eb389989020e8246fee90ac93fcecbe} \strng{fullhash}{6eb389989020e8246fee90ac93fcecbe} \field{labelalpha}{Doe\textbf{+}95} \field{sortinit}{D} \field{labeltitle}{Some other title about sorting} \field{extraalpha}{1} \field{title}{Some other title about sorting} \field{year}{1995} \endentry |; is_deeply( $main->get_sortscheme , $ss, 'sort scheme'); is( $out->get_output_entry('L4', $main), $l4, '\alphaothers set by "and others"'); is( $out->get_output_entry('L1', $main), $l1, 'bbl test 1'); is( $out->get_output_entry('L2', $main), $l2, 'bbl test 2'); is( $out->get_output_entry('L3', $main), $l3, 'bbl test 3'); is( $out->get_output_entry('L5', $main), $l5, 'bbl test 4'); is_deeply([ $main->get_keys ], ['L5', 'L4', 'L1', 'L3', 'L2'], 'sortorder - 1'); # This would be the same as $main citeorder as both $main and $shs use same # global sort spec but here it's null because we've removed all shorthands using a map # above and the filter for the shorthand list only uses entries with SHORTHAND fields ... is_deeply([ $shs->get_keys ], [], 'sortorder - 2'); # reset options and regenerate information Biber::Config->setoption('sourcemap', undef); # no longer ignore shorthand* # Have to set the sortscheme for the shorthand list explicitly as the sortlos option is processed # during control file parsing so it won't be done automatically here. This is only a problem # in tests where we want to change sortlos and re-run $shs->set_sortscheme([ [ {'final' => 1}, {'sortshorthand' => {}} ], [ {}, {'shorthand' => {}} ] ]); $main->set_sortscheme([ [ {'final' => 1}, {'shorthand' => {}} ]]); # Need to reset all entries due to "skip if already in Entries" # clause in bibtex.pm. Need to clear the cache as we've modified the T::B objects # by the sourcemap. Need to clear everykeys otherwise we'll just skip the keys $bibentries->del_entries; $section->del_everykeys; Biber::Input::file::bibtex->init_cache; $biber->prepare; $section = $biber->sections->get_section(0); $shs = $biber->sortlists->get_list(0, 'shorthand', 'shorthand'); # Sort by shorthand is_deeply([ $shs->get_keys ], ['L1', 'L2', 'L3', 'L4', 'L5'], 'sortorder - 3'); biblatex-biber-1.8/t/options.t000555000000000000 1316612230324175 15645 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8' ; use Test::More tests => 9; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata") ; # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('options.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('labeldatespec', [ {content => 'date', type => 'field'} ]); # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; my $dmv = [ [ {'presort' => {}}, {'mm' => {}}, ], [ {'sortkey' => {'final' => 1}} ], [ {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {'sorttitle' => {}}, {'title' => {}} ], [ {'sortyear' => {}}, {'year' => {}} ], [ {'volume' => {}}, {'0000' => {}} ] ]; my $bln = [ {content => 'author'}, {content => 'editor'} ]; my $l1 = q| \entry{L1}{book}{} \name{labelname}{1}{}{% {{uniquename=0,hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Oxford}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{sortinit}{D} \field{labelyear}{1998} \field{labelmonth}{04} \field{labelday}{05} \field{datelabelsource}{} \field{labeltitle}{Title 1} \field{day}{05} \field{month}{04} \field{origday}{30} \field{origmonth}{10} \field{origyear}{1985} \field{title}{Title 1} \field{year}{1998} \endentry |; my $l2 = q| \entry{L2}{book}{maxcitenames=3,maxbibnames=3,maxitems=2} \name{labelname}{1}{}{% {{uniquename=0,hash=19eec87c959944d6d9c72434a42856ba}{Edwards}{E\bibinitperiod}{Ellison}{E\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=19eec87c959944d6d9c72434a42856ba}{Edwards}{E\bibinitperiod}{Ellison}{E\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Oxford}% } \strng{namehash}{19eec87c959944d6d9c72434a42856ba} \strng{fullhash}{19eec87c959944d6d9c72434a42856ba} \field{sortinit}{E} \field{labelyear}{1998} \field{labelmonth}{04} \field{labelday}{05} \field{datelabelsource}{} \field{labeltitle}{Title 2} \field{day}{05} \field{month}{04} \field{title}{Title 2} \field{year}{1998} \endentry |; my $l3 = q| \entry{L3}{book}{blah=10} \name{labelname}{1}{}{% {{uniquename=0,hash=490250da1f3b92580d97563dc96c6c84}{Bluntford}{B\bibinitperiod}{Bunty}{B\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=490250da1f3b92580d97563dc96c6c84}{Bluntford}{B\bibinitperiod}{Bunty}{B\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Oxford}% } \strng{namehash}{490250da1f3b92580d97563dc96c6c84} \strng{fullhash}{490250da1f3b92580d97563dc96c6c84} \field{sortinit}{B} \field{labelyear}{1999} \field{labelmonth}{04} \field{labelday}{05} \field{datelabelsource}{} \field{labeltitle}{Title 3} \field{day}{05} \field{month}{04} \field{title}{Title 3} \field{year}{1999} \endentry |; ok(Biber::Config->getblxoption('uniquename') == 1, "Single-valued option") ; is_deeply(Biber::Config->getblxoption('labelnamespec'), [ {content => 'author'} ], "Multi-valued options"); ok(Biber::Config->getoption('mincrossrefs') == 88, "Setting Biber options via control file"); ok(Biber::Config->getblxoption('useprefix', 'book') == 1 , "Per-type single-valued options"); is_deeply(Biber::Config->getblxoption('labelnamespec', 'book'), $bln, "Per-type multi-valued options"); is($bibentries->entry('L1')->get_labeldate_info->{field}{year}, 'year', 'Global labelyear setting' ) ; is( $out->get_output_entry('L1', $main), $l1, 'Global labelyear setting - labelyear should be YEAR') ; is( $out->get_output_entry('L2', $main), $l2, 'Entry-local biblatex option mappings - 1') ; is( $out->get_output_entry('L3', $main), $l3, 'Entry-local biblatex option mappings - 2') ; biblatex-biber-1.8/t/sections.t000555000000000000 1022112230324176 15767 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 14; use Biber; use Biber::Constants; use Biber::Utils; use Biber::Output::bbl; use Unicode::Normalize; use Log::Log4perl; chdir("t/tdata"); my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('sections.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('output_safechars', 1); # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section0 = $biber->sections->get_section(0); my $main0 = $biber->sortlists->get_list(0, 'entry', 'nty'); my $shs0 = $biber->sortlists->get_list(0, 'shorthand', 'shorthand'); my $section1 = $biber->sections->get_section(1); my $main1 = $biber->sortlists->get_list(1, 'entry', 'nty'); my $shs1 = $biber->sortlists->get_list(1, 'shorthand', 'shorthand'); my $section2 = $biber->sections->get_section(2); my $main2 = $biber->sortlists->get_list(2, 'entry', 'nty'); my $shs2 = $biber->sortlists->get_list(2, 'shorthand', 'shorthand'); my $section3 = $biber->sections->get_section(3); my $main3 = $biber->sortlists->get_list(3, 'entry', 'nty'); my $shs3 = $biber->sortlists->get_list(3, 'shorthand', 'shorthand'); # Internal UTF-8 before output is always NFD so have to NFD bits of this my $preamble = [ NFD('Štring for Preamble 1'), 'String for Preamble 2', 'String for Preamble 3', 'String for Preamble 4' ]; my $v = $Biber::Config::VERSION; if ($Biber::Config::BETA_VERSION) { $v .= ' (beta)'; } my $head = qq|% \$ biblatex auxiliary file \$ % \$ biblatex bbl format version $BBL_VERSION \$ % Do not modify the above lines! % % This is an auxiliary file used by the 'biblatex' package. % This file may safely be deleted. It will be recreated by % biber as required. % \\begingroup \\makeatletter \\\@ifundefined{ver\@biblatex.sty} {\\\@latex\@error {Missing 'biblatex' package} {The bibliography requires the 'biblatex' package.} \\aftergroup\\endinput} {} \\endgroup \\preamble{% \\v{S}tring for Preamble 1% String for Preamble 2% String for Preamble 3% String for Preamble 4% } |; my $tail = qq||; is_deeply($biber->get_preamble, $preamble, 'Preamble for all sections'); is($section0->bibentry('sect1')->get_field('note'), 'value1', 'Section 0 macro test'); # If macros were not reset between sections, this would give a macro redef error is($section1->bibentry('sect4')->get_field('note'), 'value2', 'Section 1 macro test'); is_deeply([$main0->get_keys], ['sect1', 'sect2', 'sect3', 'sect8'], 'Section 0 citekeys'); is_deeply([$shs0->get_keys], ['sect1', 'sect2', 'sect8'], 'Section 0 shorthands'); is_deeply([$main1->get_keys], ['sect4', 'sect5'], 'Section 1 citekeys'); is_deeply([$shs1->get_keys], ['sect4', 'sect5'], 'Section 1 shorthands'); is_deeply([$main2->get_keys], ['sect1', 'sect6', 'sect7'], 'Section 2 citekeys'); is_deeply([$shs2->get_keys], ['sect1', 'sect6', 'sect7'], 'Section 2 shorthands'); is_deeply([$section3->get_orig_order_citekeys], ['sect1', 'sect2', 'sectall1'], 'Section 3 citekeys'); is($out->get_output_section(0)->number, '0', 'Checking output sections - 1'); is($out->get_output_section(1)->number, '1', 'Checking output sections - 2'); is($out->get_output_section(2)->number, '2', 'Checking output sections - 3'); is($out->get_output_head, $head, 'Preamble output check with output_safechars'); biblatex-biber-1.8/t/extrayear.t000555000000000000 650712230324176 16140 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 21; use Biber; use Biber::Utils; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('extrayear.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 1); Biber::Config->setblxoption('maxbibnames', 1); # Now generate the information $biber->prepare; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; is($main->get_extrayeardata('L1'), '1', 'Entry L1 - one name, first in 1995'); is($main->get_extrayeardata('L2'), '2', 'Entry L2 - one name, second in 1995'); is($main->get_extrayeardata('L3'), '3', 'Entry L3 - one name, third in 1995'); is($main->get_extrayeardata('L4'), '1', 'Entry L4 - two names, first in 1995'); is($main->get_extrayeardata('L5'), '2', 'Entry L5 - two names, second in 1995'); is($main->get_extrayeardata('L6'), '1', 'Entry L6 - two names, first in 1996'); is($main->get_extrayeardata('L7'), '2', 'Entry L7 - two names, second in 1996'); is($main->get_extrayeardata('nodate1'), '1', 'Same name, no year 1'); is($main->get_extrayeardata('nodate2'), '2', 'Same name, no year 2'); ok(is_undef($main->get_extrayeardata('L8')), 'Entry L8 - one name, only in year'); ok(is_undef($main->get_extrayeardata('L9')), 'Entry L9 - No name, same year as another with no name'); ok(is_undef($main->get_extrayeardata('L10')), 'Entry L10 - No name, same year as another with no name'); is($main->get_extrayeardata('companion1'), '1', 'Entry companion1 - names truncated to same as another entry in same year'); is($main->get_extrayeardata('companion2'), '2', 'Entry companion2 - names truncated to same as another entry in same year'); ok(is_undef($main->get_extrayeardata('companion3')), 'Entry companion3 - one name, same year as truncated names'); ok(is_undef($main->get_extrayeardata('vangennep')), 'Entry vangennep - prefix makes it different'); ok(is_undef($main->get_extrayeardata('gennep')), 'Entry gennep - different from prefix name'); ok(is_undef($main->get_extrayeardata('LY1')), 'Date range means no extrayear - 1'); ok(is_undef($main->get_extrayeardata('LY2')), 'Date range means no extrayear - 2'); # Test for labelyearspec literal string is($bibentries->entry('nodate1')->get_field('labelyear'), 'nodate', 'Labelyear string - 1'); is($bibentries->entry('nodate2')->get_field('labelyear'), 'nodate', 'Labelyear string - 2'); biblatex-biber-1.8/t/set-legacy.t000555000000000000 1116012230324176 16200 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 3; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('set-legacy.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setoption('fastsort', 1); # Now generate the information $biber->prepare; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $out = $biber->get_output_obj; my $string1 = q| \entry{Elias1955}{set}{} \set{Elias1955a,Elias1955b} \name{labelname}{1}{}{% {{hash=bdd4981ffb5a62685c993d6f9dec4c23}{Elias}{E\bibinitperiod}{P.}{P\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bdd4981ffb5a62685c993d6f9dec4c23}{Elias}{E\bibinitperiod}{P.}{P\bibinitperiod}{}{}{}{}}% } \strng{namehash}{bdd4981ffb5a62685c993d6f9dec4c23} \strng{fullhash}{bdd4981ffb5a62685c993d6f9dec4c23} \field{sortinit}{0} \field{labelyear}{1955} \field{labelmonth}{03} \field{datelabelsource}{} \field{labeltitle}{Predictive coding--I} \field{issn}{0096-1000} \field{journaltitle}{IRE Transactions on Information Theory} \field{month}{03} \field{number}{1} \field{title}{Predictive coding--I} \field{volume}{1} \field{year}{1955} \field{pages}{16\bibrangedash 24} \verb{doi} \verb 10.1109/TIT.1955.1055126 \endverb \warn{\item Field 'crossref' is no longer needed in set entries in Biber - ignoring in entry 'Elias1955'} \endentry |; my $string2 = q| \entry{Elias1955a}{article}{} \inset{Elias1955} \name{labelname}{1}{}{% {{hash=bdd4981ffb5a62685c993d6f9dec4c23}{Elias}{E\bibinitperiod}{P.}{P\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bdd4981ffb5a62685c993d6f9dec4c23}{Elias}{E\bibinitperiod}{P.}{P\bibinitperiod}{}{}{}{}}% } \strng{namehash}{bdd4981ffb5a62685c993d6f9dec4c23} \strng{fullhash}{bdd4981ffb5a62685c993d6f9dec4c23} \field{sortinit}{0} \field{labeltitle}{Predictive coding--I} \field{issn}{0096-1000} \field{journaltitle}{IRE Transactions on Information Theory} \field{month}{03} \field{number}{1} \field{title}{Predictive coding--I} \field{volume}{1} \field{year}{1955} \field{pages}{16\bibrangedash 24} \verb{doi} \verb 10.1109/TIT.1955.1055126 \endverb \warn{\item Field 'entryset' is no longer needed in set member entries in Biber - ignoring in entry 'Elias1955a'} \endentry |; my $string3 = q| \entry{Elias1955b}{article}{} \inset{Elias1955} \name{labelname}{1}{}{% {{hash=bdd4981ffb5a62685c993d6f9dec4c23}{Elias}{E\bibinitperiod}{P.}{P\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bdd4981ffb5a62685c993d6f9dec4c23}{Elias}{E\bibinitperiod}{P.}{P\bibinitperiod}{}{}{}{}}% } \strng{namehash}{bdd4981ffb5a62685c993d6f9dec4c23} \strng{fullhash}{bdd4981ffb5a62685c993d6f9dec4c23} \field{sortinit}{0} \field{labeltitle}{Predictive coding--II} \field{issn}{0096-1000} \field{journaltitle}{IRE Transactions on Information Theory} \field{month}{03} \field{number}{1} \field{title}{Predictive coding--II} \field{volume}{1} \field{year}{1955} \field{pages}{24\bibrangedash 33} \verb{doi} \verb 10.1109/TIT.1955.1055116 \endverb \warn{\item Field 'entryset' is no longer needed in set member entries in Biber - ignoring in entry 'Elias1955b'} \endentry |; is($out->get_output_entry('Elias1955', $main), $string1, 'Legacy set test 1'); is($out->get_output_entry('Elias1955a', $main), $string2, 'Legacy set test 2'); is($out->get_output_entry('Elias1955b', $main), $string3, 'Legacy set test 3'); biblatex-biber-1.8/t/related-entries.t000555000000000000 2115312230324175 17234 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 12; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata") ; # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('related.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section = $biber->sections->get_section(0); my $shs = $biber->sortlists->get_list(0, 'shorthand', 'shorthand'); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; my $k1 = q| \entry{key1}{article}{} \name{labelname}{1}{}{% {{hash=a517747c3d12f99244ae598910d979c5}{Author}{A\bibinitperiod}{}{}{}{}{}{}}% } \name{author}{1}{}{% {{hash=a517747c3d12f99244ae598910d979c5}{Author}{A\bibinitperiod}{}{}{}{}{}{}}% } \strng{namehash}{a517747c3d12f99244ae598910d979c5} \strng{fullhash}{a517747c3d12f99244ae598910d979c5} \field{sortinit}{0} \field{labelyear}{1998} \field{datelabelsource}{} \field{labeltitle}{Original Title} \field{journaltitle}{Journal Title} \field{number}{5} \field{relatedtype}{reprintas} \field{shorthand}{RK1} \field{title}{Original Title} \field{volume}{12} \field{year}{1998} \field{related}{78f825aaa0103319aaa1a30bf4fe3ada,3631578538a2d6ba5879b31a9a42f290} \field{pages}{125\bibrangedash 150} \endentry |; my $k2 = q| \entry{key2}{inbook}{} \name{labelname}{1}{}{% {{hash=a517747c3d12f99244ae598910d979c5}{Author}{A\bibinitperiod}{}{}{}{}{}{}}% } \name{author}{1}{}{% {{hash=a517747c3d12f99244ae598910d979c5}{Author}{A\bibinitperiod}{}{}{}{}{}{}}% } \list{location}{1}{% {Location}% } \list{publisher}{1}{% {Publisher}% } \strng{namehash}{a517747c3d12f99244ae598910d979c5} \strng{fullhash}{a517747c3d12f99244ae598910d979c5} \field{sortinit}{0} \field{labelyear}{2009} \field{datelabelsource}{} \field{labeltitle}{Reprint Title} \field{booktitle}{Booktitle} \field{relatedstring}{First} \field{relatedtype}{reprintof} \field{shorthand}{RK2} \field{title}{Reprint Title} \field{year}{2009} \field{related}{c2add694bf942dc77b376592d9c862cd} \field{pages}{34\bibrangedash 60} \endentry |; my $kck1 = q| \entry{c2add694bf942dc77b376592d9c862cd}{article}{dataonly} \name{labelname}{1}{}{% {{hash=a517747c3d12f99244ae598910d979c5}{Author}{A\bibinitperiod}{}{}{}{}{}{}}% } \name{author}{1}{}{% {{hash=a517747c3d12f99244ae598910d979c5}{Author}{A\bibinitperiod}{}{}{}{}{}{}}% } \strng{namehash}{a517747c3d12f99244ae598910d979c5} \strng{fullhash}{a517747c3d12f99244ae598910d979c5} \field{sortinit}{0} \field{labeltitle}{Original Title} \field{clonesourcekey}{key1} \field{journaltitle}{Journal Title} \field{number}{5} \field{relatedtype}{reprintas} \field{shorthand}{RK1} \field{title}{Original Title} \field{volume}{12} \field{year}{1998} \field{related}{78f825aaa0103319aaa1a30bf4fe3ada,3631578538a2d6ba5879b31a9a42f290} \field{pages}{125\bibrangedash 150} \endentry |; my $kck2 = q| \entry{78f825aaa0103319aaa1a30bf4fe3ada}{inbook}{dataonly} \name{labelname}{1}{}{% {{hash=a517747c3d12f99244ae598910d979c5}{Author}{A\bibinitperiod}{}{}{}{}{}{}}% } \name{author}{1}{}{% {{hash=a517747c3d12f99244ae598910d979c5}{Author}{A\bibinitperiod}{}{}{}{}{}{}}% } \list{location}{1}{% {Location}% } \list{publisher}{1}{% {Publisher}% } \strng{namehash}{a517747c3d12f99244ae598910d979c5} \strng{fullhash}{a517747c3d12f99244ae598910d979c5} \field{sortinit}{0} \field{labeltitle}{Reprint Title} \field{clonesourcekey}{key2} \field{booktitle}{Booktitle} \field{relatedstring}{First} \field{relatedtype}{reprintof} \field{shorthand}{RK2} \field{title}{Reprint Title} \field{year}{2009} \field{related}{c2add694bf942dc77b376592d9c862cd} \field{pages}{34\bibrangedash 60} \endentry |; my $kck3 = q| \entry{3631578538a2d6ba5879b31a9a42f290}{inbook}{dataonly} \name{labelname}{1}{}{% {{hash=a517747c3d12f99244ae598910d979c5}{Author}{A\bibinitperiod}{}{}{}{}{}{}}% } \name{author}{1}{}{% {{hash=a517747c3d12f99244ae598910d979c5}{Author}{A\bibinitperiod}{}{}{}{}{}{}}% } \list{location}{1}{% {Location}% } \list{publisher}{1}{% {Publisher2}% } \strng{namehash}{a517747c3d12f99244ae598910d979c5} \strng{fullhash}{a517747c3d12f99244ae598910d979c5} \field{sortinit}{0} \field{labeltitle}{Reprint Title} \field{clonesourcekey}{key3} \field{booktitle}{Booktitle} \field{relatedtype}{translationof} \field{shorthand}{RK3} \field{title}{Reprint Title} \field{year}{2010} \field{related}{caf8e34be07426ae7127c1b4829983c1} \field{pages}{33\bibrangedash 57} \endentry |; my $kck4 = q| \entry{caf8e34be07426ae7127c1b4829983c1}{inbook}{dataonly} \name{labelname}{1}{}{% {{hash=a517747c3d12f99244ae598910d979c5}{Author}{A\bibinitperiod}{}{}{}{}{}{}}% } \name{author}{1}{}{% {{hash=a517747c3d12f99244ae598910d979c5}{Author}{A\bibinitperiod}{}{}{}{}{}{}}% } \list{location}{1}{% {Location}% } \list{publisher}{1}{% {Publisher2}% } \strng{namehash}{a517747c3d12f99244ae598910d979c5} \strng{fullhash}{a517747c3d12f99244ae598910d979c5} \field{sortinit}{0} \field{labeltitle}{Orig Language Title} \field{clonesourcekey}{key4} \field{booktitle}{Booktitle} \field{shorthand}{RK4} \field{title}{Orig Language Title} \field{year}{2011} \field{pages}{33\bibrangedash 57} \endentry |; my $c1 = q| \entry{c1}{book}{} \field{sortinit}{0} \field{related}{9ab62b5ef34a985438bfdf7ee0102229} \endentry |; my $c2k = q| \entry{9ab62b5ef34a985438bfdf7ee0102229}{book}{dataonly} \field{sortinit}{0} \field{clonesourcekey}{c2} \field{related}{0a3d72134fb3d6c024db4c510bc1605b} \endentry |; my $c3k = q| \entry{0a3d72134fb3d6c024db4c510bc1605b}{book}{dataonly} \field{sortinit}{0} \field{clonesourcekey}{c3} \field{related}{9ab62b5ef34a985438bfdf7ee0102229} \endentry |; is( $out->get_output_entry('key1', $main), $k1, 'Related entry test 1' ) ; is( $out->get_output_entry('key2', $main), $k2, 'Related entry test 2' ) ; # Key k3 is used only to create a related entry clone but since it isn't cited itself # it shouldn't be in the .bbl is( $out->get_output_entry('key3', $main), undef, 'Related entry test 3' ) ; is( $out->get_output_entry('c2add694bf942dc77b376592d9c862cd', $main), $kck1, 'Related entry test 4' ) ; is( $out->get_output_entry('78f825aaa0103319aaa1a30bf4fe3ada', $main), $kck2, 'Related entry test 5' ) ; is( $out->get_output_entry('3631578538a2d6ba5879b31a9a42f290', $main), $kck3, 'Related entry test 6' ) ; is( $out->get_output_entry('caf8e34be07426ae7127c1b4829983c1', $main), $kck4, 'Related entry test 7' ) ; # Key k4 is used only to create a related entry clone but since it isn't cited itself # it shouldn't be in the .bbl is( $out->get_output_entry('key4', $main), undef, 'Related entry test 8' ) ; is_deeply([$shs->get_keys], ['key1', 'key2'], 'Related entry test 9'); # Testing circular dependencies is( $out->get_output_entry('c1', $main), $c1, 'Related entry test 10' ) ; is( $out->get_output_entry('9ab62b5ef34a985438bfdf7ee0102229', $main), $c2k, 'Related entry test 11' ) ; is( $out->get_output_entry('0a3d72134fb3d6c024db4c510bc1605b', $main), $c3k, 'Related entry test 12' ) ; biblatex-biber-1.8/t/endnotexml.t000555000000000000 1373312230324177 16331 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 2; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new( configfile => 'biber-test.conf'); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('endnotexml.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # THERE IS A CONFIG FILE BEING READ TO TEST USER MAPS TOO! # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; # Mapped to "report" via user mapping to test user mappings # Also created "usera" with original entrytype my $l1 = q| \entry{fpvfswdz9sw5e0edvxix5z26vxadptrzxfwa:42}{report}{} \name{labelname}{3}{}{% {{hash=5ed7d7f80cf3fd74517bb9c96a1d6ffa}{Alegria}{A\bibinitperiod}{M.}{M\bibinitperiod}{}{}{}{}}% {{hash=418031013857fb1f059185242baea41f}{Perez}{P\bibinitperiod}{D.\bibnamedelimi J.}{D\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{hash=d016356435e41f9f216cd5ad5414be6c}{Williams}{W\bibinitperiod}{S.}{S\bibinitperiod}{}{}{}{}}% } \name{author}{3}{}{% {{hash=5ed7d7f80cf3fd74517bb9c96a1d6ffa}{Alegria}{A\bibinitperiod}{M.}{M\bibinitperiod}{}{}{}{}}% {{hash=418031013857fb1f059185242baea41f}{Perez}{P\bibinitperiod}{D.\bibnamedelimi J.}{D\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{hash=d016356435e41f9f216cd5ad5414be6c}{Williams}{W\bibinitperiod}{S.}{S\bibinitperiod}{}{}{}{}}% } \list{language}{1}{% {eng}% } \strng{namehash}{bb7cc58ecd32f38238f8c0ee2107e097} \strng{fullhash}{bb7cc58ecd32f38238f8c0ee2107e097} \field{sortinit}{A} \field{labeltitle}{The role of public policies in reducing mental health status disparities for people of color} \field{edition}{2003/10/01} \field{isbn}{0278-2715 (Print)} \field{label}{Journal Article} \field{note}{Alegria, Margarita Perez, Debra Joy Williams, Sandra P01H510803/United States PHS P01MH59876/MH/United States NIMH Comparative Study Research Support, U.S. Gov't, P.H.S. United States Health affairs (Project Hope) Health Aff (Millwood). 2003 Sep-Oct;22(5):51-64.} \field{number}{5} \field{subtitle}{Health Aff (Millwood)} \field{title}{The role of public policies in reducing mental health status disparities for people of color} \field{volume}{22} \field{pages}{51\bibrangedash 66} \keyw{{Adult},{Child},{Education, Special/economics/legislation & jurisprudence},{Health Policy/ legislation & jurisprudence},{Health Services Accessibility/statistics & numerical data},{Health Services Needs and Demand},{Housing/economics/legislation & jurisprudence},{Humans},{Income Tax/legislation & jurisprudence},{Mental Disorders/economics/ ethnology/therapy},{Mental Health Services/economics/ organization & administration},{Minority Groups/ statistics & numerical data},{Poverty},{Social Conditions},{Socioeconomic Factors},{Sociology, Medical},{United States/epidemiology}} \warn{\item Datamodel: Entry 'fpvfswdz9sw5e0edvxix5z26vxadptrzxfwa:42' (endnote.xml): Invalid format 'Sep-Oct' of date field 'date' - ignoring} \endentry |; my $l2 = q| \entry{fpvfswdz9sw5e0edvxix5z26vxadptrzxfwa:47}{report}{} \name{labelname}{1}{}{% {{hash=346ad1f92291bef45511d3eb23e3df34}{Amico}{A\bibinitperiod}{Sir\bibnamedelimb Kevin}{K\bibinitperiod}{R}{R\bibinitperiod}{}{}{Jr}{J\bibinitperiod}}% } \name{author}{1}{}{% {{hash=346ad1f92291bef45511d3eb23e3df34}{Amico}{A\bibinitperiod}{Sir\bibnamedelimb Kevin}{K\bibinitperiod}{R}{R\bibinitperiod}{}{}{Jr}{J\bibinitperiod}}% } \list{language}{1}{% {eng}% } \strng{namehash}{346ad1f92291bef45511d3eb23e3df34} \strng{fullhash}{346ad1f92291bef45511d3eb23e3df34} \field{sortinit}{A} \field{labelyear}{2009} \field{labelmonth}{03} \field{labelday}{14} \field{datelabelsource}{} \field{labeltitle}{PTA} \field{day}{14} \field{edition}{2009/07/18} \field{isbn}{1541-0048 (Electronic)} \field{label}{Journal Article} \field{month}{03} \field{note}{Amico, K Rivet Review United States American journal of public health Am J Public Health. 2009 Sep;99(9):1567-75. Epub 2009 Jul 16.} \field{number}{9} \field{shorttitle}{PTA} \field{subtitle}{Am J Public Health} \field{title}{Percent total attrition: a poor metric for study rigor in hosted intervention designs} \field{volume}{99} \field{year}{2009} \field{pages}{1567\bibrangedash 75} \verb{eprint} \verb AJPH.2008.134767 \endverb \verb{url} \verb http://www.sun.com \endverb \keyw{{Health Promotion},{Humans},{Intervention Studies},{Outcome Assessment (Health Care)/methods},{Patient Dropouts},{Patient Selection},{Reproducibility of Results},{Research Design}} \endentry |; is( $out->get_output_entry('fpvfswdz9sw5e0edvxix5z26vxadptrzxfwa:42', $main), $l1, 'Basic Endnote XML test - 1') ; is( $out->get_output_entry('fpvfswdz9sw5e0edvxix5z26vxadptrzxfwa:47', $main), $l2, 'Basic Endnote XML test - 2') ; biblatex-biber-1.8/t/full.t000555000000000000 231312230324177 15066 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More; if ($ENV{BIBER_DEV_TESTS}) { plan tests => 5; } else { plan skip_all => 'BIBER_DEV_TESTS not set'; } use IPC::Run3; use IPC::Cmd qw( can_run ); use File::Temp; use File::Compare; use File::Which; my $perl = which('perl'); my $tmpfile = File::Temp->new(); #my $tmpfile = File::Temp->new(UNLINK => 0); my $bbl = $tmpfile->filename; #print "File: $bbl\n"; my $stdout; run3 [ $perl, 'bin/biber', '--noconf', '--nolog', "--output_file=$bbl", 't/tdata/full.bcf' ], \undef, \$stdout, \undef; is($? >> 8, 0, 'Full test has zero exit status'); ok(compare($bbl, 't/tdata/full1.bbl') == 0, 'Testing lossort case and sortinit for macros'); like($stdout, qr|WARN - Duplicate entry key: 'F1' in file 't/tdata/full\.bib', skipping \.\.\.|ms, 'Testing duplicate/case key warnings - 1'); like($stdout, qr|WARN - Possible typo \(case mismatch\) between datasource keys: 'f1' and 'F1' in file 't/tdata/full\.bib'|ms, 'Testing duplicate/case key warnings - 2'); like($stdout, qr|WARN - Possible typo \(case mismatch\) between citation and datasource keys: 'C1' and 'c1' in file 't/tdata/full\.bib'|ms, 'Testing duplicate/case key warnings - 3'); biblatex-biber-1.8/t/skips.t000555000000000000 2041412230324176 15276 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 16; use Biber; use Biber::Utils; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('skips.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setoption('fastsort', 1); # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section = $biber->sections->get_section(0); my $shs = $biber->sortlists->get_list(0, 'shorthand', 'shorthand'); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; my $set1 = q| \entry{seta}{set}{} \set{set:membera,set:memberb,set:memberc} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{labelalpha}{Doe10} \field{sortinit}{D} \field{extrayear}{1} \field{labelyear}{2010} \field{datelabelsource}{} \field{labeltitle}{Set Member A} \field{extraalpha}{1} \field{title}{Set Member A} \field{year}{2010} \keyw{key1,key2} \endentry |; my $set2 = q| \entry{set:membera}{book}{} \inset{seta} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{sortinit}{D} \field{labeltitle}{Set Member A} \field{title}{Set Member A} \field{year}{2010} \keyw{key1,key2} \endentry |; my $set3 = q| \entry{set:memberb}{book}{} \inset{seta} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{sortinit}{D} \field{labeltitle}{Set Member B} \field{title}{Set Member B} \field{year}{2010} \endentry |; my $set4 = q| \entry{set:memberc}{book}{} \inset{seta} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{sortinit}{D} \field{labeltitle}{Set Member C} \field{title}{Set Member C} \field{year}{2010} \endentry |; my $noset1 = q| \entry{noseta}{book}{} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{labelalpha}{Doe10} \field{sortinit}{D} \field{extrayear}{2} \field{labelyear}{2010} \field{datelabelsource}{} \field{labeltitle}{Stand-Alone A} \field{extraalpha}{2} \field{title}{Stand-Alone A} \field{year}{2010} \endentry |; my $noset2 = q| \entry{nosetb}{book}{} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{labelalpha}{Doe10} \field{sortinit}{D} \field{extrayear}{3} \field{labelyear}{2010} \field{datelabelsource}{} \field{labeltitle}{Stand-Alone B} \field{extraalpha}{3} \field{title}{Stand-Alone B} \field{year}{2010} \endentry |; my $noset3 = q| \entry{nosetc}{book}{} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{labelalpha}{Doe10} \field{sortinit}{D} \field{extrayear}{4} \field{labelyear}{2010} \field{datelabelsource}{} \field{labeltitle}{Stand-Alone C} \field{extraalpha}{4} \field{title}{Stand-Alone C} \field{year}{2010} \endentry |; my $sk4 = q| \entry{skip4}{article}{dataonly} \name{labelname}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \list{location}{1}{% {Cambridge}% } \list{publisher}{1}{% {A press}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{sortinit}{D} \field{labeltitle}{Algorithms Which Sort} \field{shorthand}{AWS} \field{title}{Algorithms Which Sort} \field{year}{1932} \endentry |; is_deeply([$shs->get_keys], ['skip1'], 'skiplos - not in LOS'); is_deeply($bibentries->entry('skip1')->get_field('options'), ['skipbib'], 'Passing skipbib through'); is($bibentries->entry('skip2')->get_field('labelalpha'), 'SA', 'Normal labelalpha'); is($bibentries->entry('skip2')->get_field($bibentries->entry('skip2')->get_labeldate_info->{field}{year}), '1995', 'Normal labelyear'); ok(is_undef($bibentries->entry('skip3')->get_field('labelalpha')), 'skiplab - no labelalpha'); ok(is_undef($bibentries->entry('skip3')->get_labeldate_info), 'skiplab - no labelyear'); ok(is_undef($bibentries->entry('skip4')->get_field('labelalpha')), 'dataonly - no labelalpha'); is($out->get_output_entry('skip4', $main), $sk4, 'dataonly - checking output'); ok(is_undef($bibentries->entry('skip4')->get_labeldate_info), 'dataonly - no labelyear'); is($out->get_output_entry('seta', $main), $set1, 'Set parent - with labels'); is($out->get_output_entry('set:membera', $main), $set2, 'Set member - no labels 1'); is($out->get_output_entry('set:memberb', $main), $set3, 'Set member - no labels 2'); is($out->get_output_entry('set:memberc', $main), $set4, 'Set member - no labels 3'); is($out->get_output_entry('noseta', $main), $noset1, 'Not a set member - extrayear continues from set 1'); is($out->get_output_entry('nosetb', $main), $noset2, 'Not a set member - extrayear continues from set 2'); is($out->get_output_entry('nosetc', $main), $noset3, 'Not a set member - extrayear continues from set 3'); biblatex-biber-1.8/t/ris.t000555000000000000 1103312230324177 14740 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8' ; use Test::More tests => 2; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata") ; # Set up Biber object my $biber = Biber->new( configfile => 'biber-test.conf'); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('ris.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # THERE IS A CONFIG FILE BEING READ TO TEST USER MAPS TOO! # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; my $l1 = q| \entry{test1}{report}{} \name{labelname}{5}{}{% {{uniquename=0,hash=35fb6a7132629790580cd2c9c0a5ab87}{Baldwin}{B\bibinitperiod}{S.A.}{S\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=f8b1ae371652de603e137e413b55de78}{Fugaccia}{F\bibinitperiod}{I.}{I\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=86957f40459ed948ee1b4ff0ec7740f6}{Brown}{B\bibinitperiod}{D.R.}{D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=baf6c971e311fa61ec2f75e93531016e}{Brown}{B\bibinitperiod}{L.V.}{L\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=bd289ff4276c0fc8c16a49161011c5da}{Scheff}{S\bibinitperiod}{S.W.}{S\bibinitperiod}{}{}{}{}}% } \name{author}{5}{}{% {{uniquename=0,hash=35fb6a7132629790580cd2c9c0a5ab87}{Baldwin}{B\bibinitperiod}{S.A.}{S\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=f8b1ae371652de603e137e413b55de78}{Fugaccia}{F\bibinitperiod}{I.}{I\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=86957f40459ed948ee1b4ff0ec7740f6}{Brown}{B\bibinitperiod}{D.R.}{D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=baf6c971e311fa61ec2f75e93531016e}{Brown}{B\bibinitperiod}{L.V.}{L\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=bd289ff4276c0fc8c16a49161011c5da}{Scheff}{S\bibinitperiod}{S.W.}{S\bibinitperiod}{}{}{}{}}% } \strng{namehash}{deae9fead6c78a99d3f38159b0710b1f} \strng{fullhash}{bde87bef9bb3834837786f78acfebc54} \field{sortinit}{B} \field{labelyear}{1996} \field{datelabelsource}{} \field{labeltitle}{Blood-brain barrier breach following cortical contusion in the rat} \field{journaltitle}{J.Neurosurgery} \field{title}{Blood-brain barrier breach following cortical contusion in the rat} \field{volume}{85} \field{year}{1996} \field{pages}{476\bibrangedash 481} \keyw{cortical contusion,blood-brain barrier,horseradish peroxidase,head trauma,hippocampus,rat} \endentry |; my $l2 = q| \entry{test2}{inbook}{} \name{labelname}{1}{}{% {{uniquename=0,hash=f2574dc91f1242eb0e7507a71730631b}{Smith}{S\bibinitperiod}{John\bibnamedelima Frederick}{J\bibinitperiod\bibinitdelim F\bibinitperiod}{}{}{III}{I\bibinitperiod}}% } \name{author}{1}{}{% {{uniquename=0,hash=f2574dc91f1242eb0e7507a71730631b}{Smith}{S\bibinitperiod}{John\bibnamedelima Frederick}{J\bibinitperiod\bibinitdelim F\bibinitperiod}{}{}{III}{I\bibinitperiod}}% } \name{editor}{1}{}{% {{hash=c889e5c69d0c445e8f3bb0fe1ea7a19c}{Brown}{B\bibinitperiod}{Alan}{A\bibinitperiod}{}{}{}{}}% } \strng{namehash}{f2574dc91f1242eb0e7507a71730631b} \strng{fullhash}{f2574dc91f1242eb0e7507a71730631b} \field{sortinit}{S} \field{labelyear}{1996} \field{labelmonth}{03} \field{labelday}{12} \field{datelabelsource}{} \field{labeltitle}{Sometitle} \field{day}{12} \field{month}{03} \field{title}{Sometitle} \field{year}{1996} \field{pages}{1\bibrangedash 20} \keyw{somevalue} \endentry |; is( $out->get_output_entry('test1', $main), $l1, 'Basic RIS test - 1') ; is( $out->get_output_entry('test2', $main), $l2, 'Basic RIS test - 2') ; biblatex-biber-1.8/t/sorting.t000555000000000000 7610212230324177 15640 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 42; use Biber; use Biber::Output::bbl; use Log::Log4perl; use Unicode::Normalize; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile("general1.bcf"); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); my $yearoff1 = 'mm,,Knuth!Donald E,Computers Typesetting,1984,0000'; my $yearoff2 = 'mm,,Knuth!Donald E,Computers Typesetting,198,0000'; my $yearoff3 = 'mm,,Knuth!Donald E,Computers Typesetting,1984,0000'; my $yearoff4 = 'mm,,Knuth!Donald E,Computers Typesetting,984,0000'; my $yearoff5 = 'mm,,Knuth!Donald E,Computers Typesetting,1984,0000'; my $yearoff6 = 'mm,,Knuth!Donald E,Computers Typesetting,1984,0000'; my $yearoff7 = 'mm,,Knuth!Donald E,Computers Typesetting,198,0000'; my $yearoff8 = 'mm,,Knuth!Donald E,Computers Typesetting,1984,0000'; my $yearoff9 = 'mm,,Knuth!Donald E,Computers Typesetting,984,0000'; my $vol1 = 'mm,,Glashow!Sheldon,Partial Symmetries of Weak Interactions,1961,2200'; my $vol2 = 'mm,,Glashow!Sheldon,Partial Symmetries of Weak Interactions,1961,2200000'; my $vol3 = 'mm,,Glashow!Sheldon,Partial Symmetries of Weak Interactions,1961,ĐĐĐ22'; my $nty = 'mm,,Glashow!Sheldon,Partial Symmetries of Weak Interactions,1961,22'; my $nyt = 'mm,,Glashow!Sheldon,1961,Partial Symmetries of Weak Interactions,22'; my $nyvt = 'mm,,Glashow!Sheldon,1961,22,Partial Symmetries of Weak Interactions'; my $anyt_la = 'mm,Gla61,,Glashow!Sheldon,1961,Partial Symmetries of Weak Interactions,0000'; my $anyt = 'mm,,,Glashow!Sheldon,1961,Partial Symmetries of Weak Interactions,0000'; my $anyvt_la = 'mm,Gla61,,Glashow!Sheldon,1961,0022,Partial Symmetries of Weak Interactions'; my $anyvt_la2 = "mm,Hos+98,,Hostetler!Michael J\x{10FFFD},1998,0014,Alkanethiolate gold cluster molecules with core diameters from 15 to 52 nm"; my $anyvt_la3 = "mm,HW98,,Hostetler!Michael J#Wingate!Julia E\x{10FFFD},1998,0014,Alkanethiolate gold cluster molecules with core diameters from 15 to 52 nm"; my $anyvt_la4 = "mm,HW+98,,Hostetler!Michael J#Wingate!Julia E\x{10FFFD},1998,0014,Alkanethiolate gold cluster molecules with core diameters from 15 to 52 nm"; my $anyvt = 'mm,,,Glashow!Sheldon,1961,0022,Partial Symmetries of Weak Interactions'; my $ynt = 'mm,,1961,Glashow!Sheldon,Partial Symmetries of Weak Interactions'; my $ydnt = 'mm,,1961,Glashow!Sheldon,Partial Symmetries of Weak Interactions'; my $sortinits = 'mm,,1961,Glashow!S,Partial Symmetries of Weak Interactions'; my $debug = 'stdmodel'; my $sk1 = 'mm,,AATESTKEY,AATESTKEY,AATESTKEY,AATESTKEY'; my $ps_sc = 'zs,,Partial Symmetries of Weak Interactions,,Partial Symmetries of Weak Interactions,Partial Symmetries of Weak Interactions'; my $noname = 'mm,,Partial Symmetries of Weak Interactions,Partial Symmetries of Weak Interactions,1961,22'; my $citeorder = '0000001'; my $lists1 = 'Marcel Dekker'; my $lists2 = 'Chichester'; my $lists3 = "IBM\x{10FFFD}"; my $lists4 = "IBM!HP\x{10FFFD}"; my $lists5 = 'IBM!HP!Sun!Sony'; my $dates1 = '1979,01,0200000,1980,04,08,1924,06,07,1924,07,09,1924,0002,05,192,02,03,1979,03,04,79,03,03'; my $edtypeclass1 = 'redactor,Jaffé!Philipp,Loewenfeld!Samuel#Kaltenbrunner!Ferdinand#Ewald!Paul'; my $prefix1 = 'mm,,Luzzatto!Moshe Ḥayyim,,,Lashon laRamḥal uvo sheloshah ḥiburim,2000,0000'; my $diacritic1 = 'mm,,Hasan!Alī,alHasan!ʿAlī,Hasan!Alī,Some title,2000,0000'; my $labels = '2005,03,02'; # These have custom presort and also an exclusion on year and title set my $useprefix1 = 'ww,,von!Bobble!Terrence,,,0000'; my $useprefix2 = 'ww,,Bobble!Terrence!von,,,0000'; Biber::Config->setblxoption('useprefix', 1); # regenerate information $biber->prepare; my $section = $biber->sections->get_section(0); my $bibentries = $section->bibentries; my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); is($main->get_sortdata('tvonb')->[0], $useprefix1, 'von with type-specific presort, exclusions and useprefix=true' ); Biber::Config->setblxoption('useprefix', 0); # regenerate information $biber->prepare; is($main->get_sortdata('tvonb')->[0], $useprefix2, 'von with type-specific presort, exclusions and useprefix=false' ); my $S; # Testing nosort $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'editor' => {}}, ], [ {}, {'translator' => {}}, ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'labelyear' => {}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); Biber::Config->setoption('nosort', [ { name => 'author', value => q/\A\p{L}{2}\p{Pd}/ }, { name => 'author', value => q/[\x{2bf}\x{2018}]/ }, { name => 'translator', value => q/\A\p{L}{2}\p{Pd}/ }, { name => 'translator', value => q/[\x{2bf}\x{2018}]/ }, # type_title should be not used as there is an # explicit title nosort { name => 'type_title', value => q/\A.*/ }, { name => 'title', value => q/\A\p{L}{2}\p{Pd}/ } ]); Biber::Config->setoption('sortcase', '1'); # regenerate information $biber->prepare; is(NFC($main->get_sortdata('luzzatto')->[0]), $prefix1, 'Title with nosort' ); is(NFC($main->get_sortdata('hasan')->[0]), $diacritic1, 'Name with nosort' ); # Testing editor roles $S = [ [ {}, {'editoratype' => {}}, ], [ {}, {'editor' => {}}, ], [ {}, {'editora' => {}}, ], ]; $main->set_sortscheme($S); Biber::Config->setoption('sortcase', 0); # regenerate information $biber->prepare; is(NFC($main->get_sortdata('jaffe')->[0]), $edtypeclass1, 'Editor type/class' ); # Testing sorting using various date fields $S = [ [ {}, {'year' => {}}, ], [ {}, {'month' => {}}, ], [ {}, {'day' => {pad_side => 'right', pad_width => 7}}, ], [ {}, {'endyear' => {}}, ], [ {}, {'endmonth' => {}}, ], [ {}, {'endday' => {}}, ], [ {}, {'origyear' => {'sort_direction' => 'descending'}} ], [ {}, {'origmonth' => {}} ], [ {}, {'origday' => {}} ], [ {}, {'origendyear' => {}} ], [ {}, {'origendmonth' => {}} ], [ {}, {'origendday' => {}} ], [ {}, {'eventendyear' => {}} ], [ {}, {'eventendmonth' => {pad_side => 'left', pad_width => 4}} ], [ {}, {'eventendday' => {}} ], [ {}, {'eventyear' => {'substring_side' => 'left', 'substring_width' => 3}} ], [ {}, {'eventmonth' => {}} ], [ {}, {'eventday' => {}} ], [ {sort_direction => 'descending'}, {'urlendyear' => {}} ], [ {}, {'urlendmonth' => {}} ], [ {}, {'urlendday' => {}} ], [ {}, {'urlyear' => {'substring_side' => 'right', 'substring_width' => 2}} ], [ {}, {'urlmonth' => {}} ], [ {}, {'urlday' => {}} ], ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('moraux')->[0], $dates1, 'Very contrived but thorough test of date sorting' ); # Testing max/minITEMS with sorting using list fields # publisher $S = [ [ {}, {'publisher' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('augustine')->[0], $lists1, 'max/minitems test 1 (publisher)' ); # location $S = [ [ {}, {'location' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('cotton')->[0], $lists2, 'max/minitems test 2 (location)' ); # institution $S = [ [ {}, {'institution' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('chiu')->[0], $lists3, 'max/minitems test 3 (institution)' ); # institution with minitems=2 Biber::Config->setblxoption('minitems', 2); $S = [ [ {}, {'institution' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('chiu')->[0], $lists4, 'max/minitems test 4 (institution - minitems=2)' ); # institution with maxitems=4, minitems=3 Biber::Config->setblxoption('maxitems', 4); Biber::Config->setblxoption('minitems', 3); $S = [ [ {}, {'institution' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('chiu')->[0], $lists5, 'max/minitems test 5 (institution - maxitems=4/minitems=3)' ); # nty with implicit default left, 4-digit year sort $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'year' => {}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('knuth:ct')->[0], $yearoff1, 'nty with default left offset, 4 digit year' ); # nty with left, 3-digit year sort, case sensitive $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'year' => {'substring_side' => 'left', 'substring_width' => 3}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); Biber::Config->setoption('sortcase', 1); # regenerate information $biber->prepare; is($main->get_sortdata('knuth:ct')->[0], $yearoff2, 'nty with left offset, 3 digit year, case sensitive' ); # nty with left, 4-digit year sort, case sensitive $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'year' => {'substring_side' => 'left', 'substring_width' => 4}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('knuth:ct')->[0], $yearoff3, 'nty with left offset, 4 digit year, case sensitive' ); # nty with right, 3-digit year sort $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'year' => {'substring_side' => 'right', 'substring_width' => 3}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); Biber::Config->setoption('sortcase', 0); # regenerate information $biber->prepare; is($main->get_sortdata('knuth:ct')->[0], $yearoff4, 'nty with right offset, 3 digit year' ); # nty with right, 4-digit year sort $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'year' => {'substring_side' => 'right', 'substring_width' => 4}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('knuth:ct')->[0], $yearoff5, 'nty with right offset, 4 digit year' ); # ntyd with left, 4-digit year sort $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'year' => {'substring_side' => 'left', 'substring_width' => 4, 'sort_direction' => 'descending'}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('knuth:ct')->[0], $yearoff6, 'ntyd with left offset, 4 digit year' ); # ntyd with left, 3-digit year sort $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'year' => {'substring_side' => 'left', 'substring_width' => 3, 'sort_direction' => 'descending'}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('knuth:ct')->[0], $yearoff7, 'ntyd with left offset, 3 digit year' ); # ntyd with right, 4-digit year sort $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'year' => {'substring_side' => 'right', 'substring_width' => 4, 'sort_direction' => 'descending'}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('knuth:ct')->[0], $yearoff8, 'ntyd with right offset, 4 digit year' ); # ntyd with right, 3-digit year sort $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'year' => {'substring_side' => 'right', 'substring_width' => 3, 'sort_direction' => 'descending'}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('knuth:ct')->[0], $yearoff9, 'ntyd with right offset, 3 digit year' ); # nty with right-padded vol $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}} ], [ {}, {'volume' => {pad_side => 'right'}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $vol1, 'nty with right-padded vol' ); # nty with right-padded 7-char vol $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}} ], [ {}, {'volume' => {pad_side => 'right', pad_width => 7}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $vol2, 'nty with right-padded 7-char vol' ); # nty with left-padded 5-char using Unicode "Đ" as pad_char vol # Unicode char will be lowercase "đ" in sortstring $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}} ], [ {}, {'volume' => {pad_side => 'left', pad_width => 5, pad_char => 'Đ'}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $vol3, 'nty with left-padded 5-char "a" pad char vol' ); # nty $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $nty, 'basic nty sort' ); is($main->get_sortdata('angenendtsk')->[0], $sk1, 'basic sortkey sort' ); # nyt $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'labelname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $nyt, 'basic nyt sort' ); # nyvt $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}} ], [ {}, {'volume' => {}}, {'0000' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $nyvt, 'basic nyvt sort' ); # anyt with labelalpha Biber::Config->setblxoption('labelalpha', 1); $S = [ [ {}, {'presort' => {}} ], [ {}, {'labelalpha' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $anyt_la, 'anyt sort (with labelalpha)' ); Biber::Config->setblxoption('labelalpha', 0); $bibentries->entry('stdmodel')->del_field('labelalpha'); $bibentries->entry('stdmodel')->del_field('sortlabelalpha'); $bibentries->entry('stdmodel:glashow')->del_field('labelalpha'); # it's a crossref so have to clear it here too $bibentries->entry('stdmodel:glashow')->del_field('sortlabelalpha'); # anyt without labelalpha # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $anyt, 'anyt sort (without labelalpha)' ); # anyvt with labelalpha Biber::Config->setblxoption('labelalpha',1); $S = [ [ {}, {'presort' => {}} ], [ {}, {'labelalpha' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}} ], [ {}, {'volume' => {pad_width => 4}}, {'0000' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $anyvt_la, 'anyvt sort (with labelalpha)' ); is($main->get_sortdata('murray')->[0], $anyvt_la2, 'anyvt sort (> maxbibnames=3 minbibnames=1, with labelalpha and alphaothers)' ); Biber::Config->setblxoption('maxalphanames', 2); Biber::Config->setblxoption('minalphanames', 2); Biber::Config->setblxoption('maxbibnames', 2); Biber::Config->setblxoption('minbibnames', 2); # regenerate information $biber->prepare; is($main->get_sortdata('murray')->[0], $anyvt_la4, 'anyvt sort (> maxbibnames=2 minbibnames=2, with labelalpha and alphaothers)' ); Biber::Config->setblxoption('alphaothers', ''); Biber::Config->setblxoption('sortalphaothers', ''); # regenerate information $biber->prepare; is($main->get_sortdata('murray')->[0], $anyvt_la3, 'anyvt sort (> maxbibnames=2 minbibnames=2,with labelalpha and without alphaothers)' ); Biber::Config->setblxoption('labelalpha', 0); $bibentries->entry('stdmodel')->del_field('labelalpha'); $bibentries->entry('stdmodel')->del_field('sortlabelalpha'); $bibentries->entry('stdmodel:glashow')->del_field('labelalpha'); # it's a crossref so have to clear it here too $bibentries->entry('stdmodel:glashow')->del_field('sortlabelalpha'); $bibentries->entry('murray')->del_field('labelalpha'); $bibentries->entry('murray')->del_field('sortlabelalpha'); # anyvt without labelalpha # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $anyvt, 'anyvt sort (without labelalpha)' ); # ynt $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortyear' => {}}, {'labelyear' => {}}, {'9999' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $ynt, 'basic ynt sort' ); # ydnt $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {sort_direction => 'descending'}, {'sortyear' => {}}, {'year' => {}}, {'9999' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $ydnt, 'basic ydnt sort' ); Biber::Config->setoption('sortfirstinits', 1); $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $sortinits, 'sort first name inits only' ); Biber::Config->setoption('sortfirstinits', 0); Biber::Config->setblxoption('labelalpha', 0); # debug $S = [ [ {}, {'entrykey' => {}}, ], ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $debug, 'basic debug sort' ); # nty with use* all off Biber::Config->setblxoption('useauthor', 0); Biber::Config->setblxoption('useeditor', 0); Biber::Config->setblxoption('usetranslator', 0); $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $noname, 'nty with use* all off' ); # nty with modified presort and short_circuit at title $S = [ [ {}, {'presort' => {}} ], [ {final => 1, }, {'sortkey' => {}} ], [ {}, {'sortname' => {}}, {'author' => {}}, {'editor' => {}}, {'translator' => {}}, {'sorttitle' => {}}, {'title' => {}} ], [ {final => 1, }, {'sorttitle' => {}}, {'title' => {}} ], [ {}, {'sortyear' => {}}, {'year' => {}} ], [ {}, {'volume' => {}}, {'0000' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel:ps_sc')->[0], $ps_sc, 'nty with modified presort and short-circuit title' ); # citeorder sort $S = [ [ {}, {'citeorder' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('stdmodel')->[0], $citeorder, 'citeorder' ); # citeorder sort $S = [ [ {}, {'labelyear' => {}}, ], [ {}, {'labelmonth' => {}}, ], [ {}, {'labelday' => {}} ] ]; $main->set_sortscheme($S); # regenerate information $biber->prepare; is($main->get_sortdata('labelstest')->[0], $labels, 'date labels' ); biblatex-biber-1.8/t/tool-bltxml.t000444000000000000 1475412230324177 16432 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use Test::More tests => 2; use Encode; use Biber; use Biber::Utils; use Biber::Output::biblatexml; use Log::Log4perl; use Unicode::Normalize; chdir("t/tdata"); no warnings 'utf8'; use utf8; # Set up Biber object my $biber = Biber->new( configfile => 'tool-test.conf'); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); my $outvar; $biber->set_output_obj(Biber::Output::biblatexml->new()); # Get reference to output object my $out = $biber->get_output_obj; # Set the output target $out->set_output_target_file(\$outvar); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('tool', 1); Biber::Config->setoption('output_resolve', 1); Biber::Config->setoption('output_format', 'biblatexml'); Biber::Config->setoption('sortlocale', 'C'); # THERE IS A CONFIG FILE BEING READ! # Now generate the information $ARGV[0] = 'tool.bib'; # fake this as we are not running through top-level biber program $biber->tool_mode_setup; $biber->prepare_tool; $out->output; my $main = $biber->sortlists->get_list(99999, 'entry', Biber::Config->getblxoption('sortscheme')); my $bltxml1 = q| AAA BBB CCC DDD EEE aaa bbb ccc ddd eee REPlaCEDte early list test late early one two un deux Some abstract %50 of which is useless i3Š Š title Le title test 2003 Ellington Edward New York London Macmillan A Note 2001 macmillanalias New York London Macmillan A Note 2001 macmillan:pubALIAS Macmillan New York London A Note mv1 Mainsubtitle Maintitle Maintitleaddon Booktitle 1999 mvalias Mainsubtitle Maintitle Maintitleaddon |; # NFD here because we are testing internals here and all internals expect NFD is(decode_utf8($outvar), $bltxml1, 'bltxml tool mode - 1'); is_deeply([$main->get_keys], ['macmillan:pub', 'macmillan:loc', 'mv1', 'b1', 'xd1', 'macmillan', NFD('i3Š')], 'tool mode sorting'); biblatex-biber-1.8/t/sections-complex.t000555000000000000 2657312230324177 17456 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 64; use Biber; use Biber::Utils; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('sections-complex.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 1); Biber::Config->setblxoption('maxalphanames', 1); Biber::Config->setblxoption('labeldate', undef); # Now generate the information $biber->prepare; my $section0 = $biber->sections->get_section(0); my $bibentries0 = $section0->bibentries; my $main0 = $biber->sortlists->get_list(0, 'entry', 'nty'); my $section1 = $biber->sections->get_section(1); my $main1 = $biber->sortlists->get_list(1, 'entry', 'nty'); my $bibentries1 = $section1->bibentries; is($bibentries0->entry('L1')->get_field('sortlabelalpha'), 'Doe95', 'maxalphanames=1 minalphanames=1 entry L1 labelalpha'); ok(is_undef($main0->get_extraalphadata('L1')), 'maxalphanames=1 minalphanames=1 entry L1 extraalpha'); is($bibentries0->entry('L2')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=1 minalphanames=1 entry L2 labelalpha'); is($main0->get_extraalphadata('L2'), '1', 'maxalphanames=1 minalphanames=1 entry L2 extraalpha'); is($bibentries0->entry('L3')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=1 minalphanames=1 entry L3 labelalpha'); is($main0->get_extraalphadata('L3'), '2', 'maxalphanames=1 minalphanames=1 entry L3 extraalpha'); is($bibentries0->entry('L4')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=1 minalphanames=1 entry L4 labelalpha'); is($main0->get_extraalphadata('L4'), '3', 'maxalphanames=1 minalphanames=1 entry L4 extraalpha'); is($bibentries1->entry('L5')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=1 minalphanames=1 entry L5 labelalpha'); is($main1->get_extraalphadata('L5'), '1', 'maxalphanames=1 minalphanames=1 entry L5 extraalpha'); is($bibentries1->entry('L6')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=1 minalphanames=1 entry L6 labelalpha'); is($main1->get_extraalphadata('L6'), '2', 'maxalphanames=1 minalphanames=1 entry L6 extraalpha'); is($bibentries1->entry('L7')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=1 minalphanames=1 entry L7 labelalpha'); is($main1->get_extraalphadata('L7'), '3', 'maxalphanames=1 minalphanames=1 entry L7 extraalpha'); is($bibentries1->entry('L8')->get_field('sortlabelalpha'), 'Sha85', 'maxalphanames=1 minalphanames=1 entry L8 labelalpha'); ok(is_undef($main1->get_extraalphadata('L8')), 'maxalphanames=1 minalphanames=1 entry L8 extraalpha'); # reset options and regenerate information Biber::Config->setblxoption('maxcitenames', 2); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('maxalphanames', 2); Biber::Config->setblxoption('minalphanames', 1); for (my $i=1; $i<5; $i++) { $bibentries0->entry("L$i")->del_field('sortlabelalpha'); $bibentries0->entry("L$i")->del_field('labelalpha'); $main0->set_extraalphadata_for_key("L$i", undef); } for (my $i=5; $i<9; $i++) { $bibentries1->entry("L$i")->del_field('sortlabelalpha'); $bibentries1->entry("L$i")->del_field('labelalpha'); $main1->set_extraalphadata_for_key("L$i", undef); } $biber->prepare; $section0 = $biber->sections->get_section(0); $bibentries0 = $section0->bibentries; $main0 = $biber->sortlists->get_list(0, 'entry', 'nty'); $section1 = $biber->sections->get_section(1); $main1 = $biber->sortlists->get_list(1, 'entry', 'nty'); $bibentries1 = $section1->bibentries; is($bibentries0->entry('L1')->get_field('sortlabelalpha'), 'Doe95', 'maxalphanames=2 minalphanames=1 entry L1 labelalpha'); ok(is_undef($main0->get_extraalphadata('L1')), 'maxalphanames=2 minalphanames=1 entry L1 extraalpha'); is($bibentries0->entry('L2')->get_field('sortlabelalpha'), 'DA95', 'maxalphanames=2 minalphanames=1 entry L2 labelalpha'); is($main0->get_extraalphadata('L2'), '1', 'maxalphanames=2 minalphanames=1 entry L2 extraalpha'); is($bibentries0->entry('L3')->get_field('sortlabelalpha'), 'DA95', 'maxalphanames=2 minalphanames=1 entry L3 labelalpha'); is($main0->get_extraalphadata('L3'), '2', 'maxalphanames=2 minalphanames=1 entry L3 extraalpha'); is($bibentries0->entry('L4')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=2 minalphanames=1 entry L4 labelalpha'); ok(is_undef($main0->get_extraalphadata('L4')), 'maxalphanames=2 minalphanames=1 entry L4 extraalpha'); is($bibentries1->entry('L5')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=2 minalphanames=1 entry L5 labelalpha'); is($main1->get_extraalphadata('L5'), '1', 'maxalphanames=2 minalphanames=1 entry L5 extraalpha'); is($bibentries1->entry('L6')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=2 minalphanames=1 entry L6 labelalpha'); is($main1->get_extraalphadata('L6'), '2', 'maxalphanames=2 minalphanames=1 entry L6 extraalpha'); is($bibentries1->entry('L7')->get_field('sortlabelalpha'), 'Doe+95', 'maxalphanames=2 minalphanames=1 entry L7 labelalpha'); is($main1->get_extraalphadata('L7'), '3', 'maxalphanames=2 minalphanames=1 entry L7 extraalpha'); is($bibentries1->entry('L8')->get_field('sortlabelalpha'), 'Sha85', 'maxalphanames=2 minalphanames=1 entry L8 labelalpha'); ok(is_undef($main1->get_extraalphadata('L8')), 'maxalphanames=2 minalphanames=1 entry L8 extraalpha'); # reset options and regenerate information Biber::Config->setblxoption('maxcitenames', 2); Biber::Config->setblxoption('mincitenames', 2); Biber::Config->setblxoption('maxalphanames', 2); Biber::Config->setblxoption('minalphanames', 2); for (my $i=1; $i<5; $i++) { $bibentries0->entry("L$i")->del_field('sortlabelalpha'); $bibentries0->entry("L$i")->del_field('labelalpha'); $main0->set_extraalphadata_for_key("L$i", undef); } for (my $i=5; $i<9; $i++) { $bibentries1->entry("L$i")->del_field('sortlabelalpha'); $bibentries1->entry("L$i")->del_field('labelalpha'); $main1->set_extraalphadata_for_key("L$i", undef); } $biber->prepare; $section0 = $biber->sections->get_section(0); $bibentries0 = $section0->bibentries; $main0 = $biber->sortlists->get_list(0, 'entry', 'nty'); $section1 = $biber->sections->get_section(1); $main1 = $biber->sortlists->get_list(1, 'entry', 'nty'); $bibentries1 = $section1->bibentries; is($bibentries0->entry('L1')->get_field('sortlabelalpha'), 'Doe95', 'maxalphanames=2 minalphanames=2 entry L1 labelalpha'); ok(is_undef($main0->get_extraalphadata('L1')), 'maxalphanames=2 minalphanames=2 entry L1 extraalpha'); is($bibentries0->entry('L2')->get_field('sortlabelalpha'), 'DA95', 'maxalphanames=2 minalphanames=2 entry L2 labelalpha'); is($main0->get_extraalphadata('L2'), '1', 'maxalphanames=2 minalphanames=2 entry L2 extraalpha'); is($bibentries0->entry('L3')->get_field('sortlabelalpha'), 'DA95', 'maxalphanames=2 minalphanames=2 entry L3 labelalpha'); is($main0->get_extraalphadata('L3'), '2', 'maxalphanames=2 minalphanames=2 entry L3 extraalpha'); is($bibentries0->entry('L4')->get_field('sortlabelalpha'), 'DA+95', 'maxalphanames=2 minalphanames=2 entry L4 labelalpha'); ok(is_undef($main0->get_extraalphadata('L4')), 'maxalphanames=2 minalphanames=2 entry L4 extraalpha'); is($bibentries1->entry('L5')->get_field('sortlabelalpha'), 'DA+95', 'maxalphanames=2 minalphanames=2 entry L5 labelalpha'); ok(is_undef($main1->get_extraalphadata('L5')), 'maxalphanames=2 minalphanames=2 entry L5 extraalpha'); is($bibentries1->entry('L6')->get_field('sortlabelalpha'), 'DS+95', 'maxalphanames=2 minalphanames=2 entry L6 labelalpha'); is($main1->get_extraalphadata('L6'), '1', 'maxalphanames=2 minalphanames=2 entry L6 extraalpha'); is($bibentries1->entry('L7')->get_field('sortlabelalpha'), 'DS+95', 'maxalphanames=2 minalphanames=2 entry L7 labelalpha'); is($main1->get_extraalphadata('L7'), '2', 'maxalphanames=2 minalphanames=2 entry L7 extraalpha'); is($bibentries1->entry('L8')->get_field('sortlabelalpha'), 'Sha85', 'maxalphanames=2 minalphanames=2 entry L8 labelalpha'); ok(is_undef($main1->get_extraalphadata('L8')), 'maxalphanames=2 minalphanames=2 entry L8 extraalpha'); # reset options and regenerate information Biber::Config->setblxoption('maxcitenames', 3); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('maxalphanames', 3); Biber::Config->setblxoption('minalphanames', 1); for (my $i=1; $i<5; $i++) { $bibentries0->entry("L$i")->del_field('sortlabelalpha'); $bibentries0->entry("L$i")->del_field('labelalpha'); $main0->set_extraalphadata_for_key("L$i", undef); } for (my $i=5; $i<9; $i++) { $bibentries1->entry("L$i")->del_field('sortlabelalpha'); $bibentries1->entry("L$i")->del_field('labelalpha'); $main1->set_extraalphadata_for_key("L$i", undef); } $biber->prepare; $section0 = $biber->sections->get_section(0); $bibentries0 = $section0->bibentries; $main0 = $biber->sortlists->get_list(0, 'entry', 'nty'); $section1 = $biber->sections->get_section(1); $main1 = $biber->sortlists->get_list(1, 'entry', 'nty'); $bibentries1 = $section1->bibentries; is($bibentries0->entry('L1')->get_field('sortlabelalpha'), 'Doe95', 'maxalphanames=3 minalphanames=1 entry L1 labelalpha'); ok(is_undef($main0->get_extraalphadata('L1')), 'maxalphanames=3 minalphanames=1 entry L1 extraalpha'); is($bibentries0->entry('L2')->get_field('sortlabelalpha'), 'DA95', 'maxalphanames=3 minalphanames=1 entry L2 labelalpha'); is($main0->get_extraalphadata('L2'), '1', 'maxalphanames=3 minalphanames=1 entry L2 extraalpha'); is($bibentries0->entry('L3')->get_field('sortlabelalpha'), 'DA95', 'maxalphanames=3 minalphanames=1 entry L3 labelalpha'); is($main0->get_extraalphadata('L3'), '2', 'maxalphanames=3 minalphanames=1 entry L3 extraalpha'); is($bibentries0->entry('L4')->get_field('sortlabelalpha'), 'DAE95', 'maxalphanames=3 minalphanames=1 entry L4 labelalpha'); ok(is_undef($main0->get_extraalphadata('L4')), 'maxalphanames=3 minalphanames=1 entry L4 extraalpha'); is($bibentries1->entry('L5')->get_field('sortlabelalpha'), 'DAE95', 'maxalphanames=3 minalphanames=1 entry L5 labelalpha'); ok(is_undef($main1->get_extraalphadata('L5')), 'maxalphanames=3 minalphanames=1 entry L5 extraalpha'); is($bibentries1->entry('L6')->get_field('sortlabelalpha'), 'DSE95', 'maxalphanames=3 minalphanames=1 entry L6 labelalpha'); ok(is_undef($main1->get_extraalphadata('L6')), 'maxalphanames=3 minalphanames=1 entry L6 extraalpha'); is($bibentries1->entry('L7')->get_field('sortlabelalpha'), 'DSJ95', 'maxalphanames=3 minalphanames=1 entry L7 labelalpha'); ok(is_undef($main1->get_extraalphadata('L7')), 'maxalphanames=3 minalphanames=1 entry L7 extraalpha'); is($bibentries1->entry('L8')->get_field('sortlabelalpha'), 'Sha85', 'maxalphanames=3 minalphanames=1 entry L8 labelalpha'); ok(is_undef($main1->get_extraalphadata('L8')), 'maxalphanames=3 minalphanames=1 entry L8 extraalpha'); biblatex-biber-1.8/t/uniqueness.t000555000000000000 12101612230324175 16363 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 193; use Biber; use Biber::Utils; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'TRACE'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('uniqueness1.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 1); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('uniquename', 2); Biber::Config->setblxoption('uniquelist', 1); # Now generate the information $biber->prepare; my $section = $biber->sections->get_section(0); my $bibentries = $section->bibentries; my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); # Basic uniquename and hash testing is($bibentries->entry('un1')->get_field($bibentries->entry('un1')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Uniquename requiring full name expansion - 1'); is($bibentries->entry('un2')->get_field($bibentries->entry('un2')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Uniquename requiring full name expansion - 2'); is($bibentries->entry('un5')->get_field($bibentries->entry('un5')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Uniquename requiring full name expansion - 3'); is($bibentries->entry('un3')->get_field($bibentries->entry('un2')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '1', 'Uniquename requiring initials name expansion - 1'); is($bibentries->entry('un4')->get_field($bibentries->entry('un4')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '1', 'Uniquename requiring initials name expansion - 2'); ok(is_undef($bibentries->entry('un4a')->get_field($bibentries->entry('un4a')->get_labelname_info->{field})->nth_name(1)->get_uniquename), 'per-entry uniquename'); is($bibentries->entry('un6')->get_field('namehash'), 'f8169a157f8d9209961157b8d23902db', 'Namehash and fullhash - 1'); is($bibentries->entry('un6')->get_field('fullhash'), 'f8169a157f8d9209961157b8d23902db', 'Namehash and fullhash - 2'); is($bibentries->entry('un7')->get_field('namehash'), 'b33fbd3f3349d1536dbcc14664f2cbbd', 'Fullnamshash ignores SHORT* names - 1'); is($bibentries->entry('un7')->get_field('fullhash'), 'f8169a157f8d9209961157b8d23902db', 'Fullnamshash ignores SHORT* names - 2'); is($bibentries->entry('test1')->get_field('namehash'), '07df5c892ba1452776abee0a867591f2', 'Namehash and fullhash - 3'); is($bibentries->entry('test1')->get_field('fullhash'), '637292dd2997a74c91847f1ec5081a46', 'Namehash and fullhash - 4'); is($bibentries->entry('untf1')->get_field($bibentries->entry('untf1')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '2', 'Uniquename with full and repeat - 1'); is($bibentries->entry('untf2')->get_field($bibentries->entry('untf2')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '2', 'Uniquename with full and repeat - 2'); is($bibentries->entry('untf3')->get_field($bibentries->entry('untf3')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '2', 'Uniquename with full and repeat - 3'); # Prefix/suffix is($bibentries->entry('sp1')->get_field($bibentries->entry('sp1')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Prefix/Suffix - 1'); is($bibentries->entry('sp2')->get_field($bibentries->entry('sp2')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Prefix/Suffix - 2'); is($bibentries->entry('sp3')->get_field($bibentries->entry('sp3')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Prefix/Suffix - 3'); is($bibentries->entry('sp4')->get_field($bibentries->entry('sp4')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Prefix/Suffix - 4'); is($bibentries->entry('sp5')->get_field($bibentries->entry('sp5')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Prefix/Suffix - 5'); is($bibentries->entry('sp6')->get_field($bibentries->entry('sp6')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Prefix/Suffix - 6'); is($bibentries->entry('sp7')->get_field($bibentries->entry('sp7')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Prefix/Suffix - 7'); is($bibentries->entry('sp8')->get_field($bibentries->entry('sp8')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Prefix/Suffix - 8'); is($bibentries->entry('sp9')->get_field($bibentries->entry('sp9')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Prefix/Suffix - 9'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness1.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 1); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('uniquename', 1); Biber::Config->setblxoption('uniquelist', 1); # Now generate the information $biber->prepare; $section = $biber->sections->get_section(0); $bibentries = $section->bibentries; $main = $biber->sortlists->get_list(0, 'entry', 'nty'); is($bibentries->entry('unt1')->get_field($bibentries->entry('unt1')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '1', 'Uniquename with inits and repeat - 1'); is($bibentries->entry('unt2')->get_field($bibentries->entry('unt2')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '1', 'Uniquename with inits and repeat - 2'); is($bibentries->entry('unt3')->get_field($bibentries->entry('unt3')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '1', 'Uniquename with inits and repeat - 3'); is($bibentries->entry('unt4')->get_field($bibentries->entry('unt4')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename with inits and repeat - 4'); is($bibentries->entry('unt5')->get_field($bibentries->entry('unt5')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename with inits and repeat - 5'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness2.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 5); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('uniquename', 2); Biber::Config->setblxoption('uniquelist', 1); # Now generate the information $biber->prepare; $section = $biber->sections->get_section(0); $bibentries = $section->bibentries; $main = $biber->sortlists->get_list(0, 'entry', 'nty'); # Hashes the same as uniquelist expansion expands to the whole list is($bibentries->entry('unall3')->get_field('namehash'), 'f1c5973adbc2e674fa4d98164c9ba5d5', 'Namehash and fullhash - 5'); is($bibentries->entry('unall3')->get_field('fullhash'), 'f1c5973adbc2e674fa4d98164c9ba5d5', 'Namehash and fullhash - 6'); ok(is_undef($bibentries->entry('unall3')->get_field($bibentries->entry('unall3')->get_labelname_info->{field})->get_uniquelist), 'Uniquelist edgecase - 1'); is($bibentries->entry('unall4')->get_field($bibentries->entry('unall4')->get_labelname_info->{field})->get_uniquelist, '6', 'Uniquelist edgecase - 2'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness1.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 2); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('uniquename', 1); Biber::Config->setblxoption('uniquelist', 0); # Now generate the information $biber->prepare; $bibentries = $biber->sections->get_section('0')->bibentries; is($bibentries->entry('test2')->get_field($bibentries->entry('test2')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename 0 due to mincitenames truncation'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness2.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('uniquename', 1); Biber::Config->setblxoption('uniquelist', 1); Biber::Config->setblxoption('maxcitenames', 1); Biber::Config->setblxoption('mincitenames', 1); # Now generate the information $biber->prepare; $bibentries = $biber->sections->get_section('0')->bibentries; is($bibentries->entry('un8')->get_field($bibentries->entry('un8')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename - 1'); is($bibentries->entry('un8')->get_field($bibentries->entry('un8')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename - 2'); is($bibentries->entry('un8')->get_field($bibentries->entry('un8')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '1', 'Uniquename - 3'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename - 4'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename - 5'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '1', 'Uniquename - 6'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->nth_name(4)->get_uniquename, '0', 'Uniquename - 7'); is($bibentries->entry('un10')->get_field($bibentries->entry('un10')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename - 8'); is($bibentries->entry('un8')->get_field($bibentries->entry('un8')->get_labelname_info->{field})->get_uniquelist, '3', 'Uniquelist - 1'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->get_uniquelist, '3', 'Uniquelist - 2'); ok(is_undef($bibentries->entry('un10')->get_field($bibentries->entry('un10')->get_labelname_info->{field})->get_uniquelist), 'Uniquelist - 3'); is($bibentries->entry('unapa1')->get_field($bibentries->entry('unapa1')->get_labelname_info->{field})->get_uniquelist, '3', 'Uniquelist - 4'); is($bibentries->entry('unapa2')->get_field($bibentries->entry('unapa2')->get_labelname_info->{field})->get_uniquelist, '3', 'Uniquelist - 5'); ok(is_undef($bibentries->entry('others1')->get_field($bibentries->entry('others1')->get_labelname_info->{field})->get_uniquelist), 'Uniquelist - 6'); # These next two should have uniquelist undef as they are identical author lists and so # can't be disambiguated (and shouldn't be). ok(is_undef($bibentries->entry('unall1')->get_field($bibentries->entry('unall1')->get_labelname_info->{field})->get_uniquelist), 'Uniquelist - 7'); ok(is_undef($bibentries->entry('unall2')->get_field($bibentries->entry('unall2')->get_labelname_info->{field})->get_uniquelist), 'Uniquelist - 8'); # These all should have uniquelist=5 as even though two are identical, they still both # need disambiguating from the other one which differs in fifth place is($bibentries->entry('unall5')->get_field($bibentries->entry('unall5')->get_labelname_info->{field})->get_uniquelist, '5', 'Uniquelist - 9'); is($bibentries->entry('unall6')->get_field($bibentries->entry('unall6')->get_labelname_info->{field})->get_uniquelist, '5', 'Uniquelist - 10'); is($bibentries->entry('unall7')->get_field($bibentries->entry('unall7')->get_labelname_info->{field})->get_uniquelist, '5', 'Uniquelist - 11'); # unall8/unall9 are the same (ul=5) and unall10 is superset of them (ul=6) # unall9a is ul=undef due to per-entry settings (would otherwise be ul=5) is($bibentries->entry('unall8')->get_field($bibentries->entry('unall8')->get_labelname_info->{field})->get_uniquelist, '5', 'Uniquelist - 12'); is($bibentries->entry('unall9')->get_field($bibentries->entry('unall9')->get_labelname_info->{field})->get_uniquelist, '5', 'Uniquelist - 13'); ok(is_undef($bibentries->entry('unall9a')->get_field($bibentries->entry('unall9a')->get_labelname_info->{field})->get_uniquelist), 'Per-entry Uniquelist - 1'); is($bibentries->entry('unall10')->get_field($bibentries->entry('unall10')->get_labelname_info->{field})->get_uniquelist, '6', 'Uniquelist - 14'); # These next two should have uniquelist 5/6 as they need disambiguating in place 5 is($bibentries->entry('unall3')->get_field($bibentries->entry('unall3')->get_labelname_info->{field})->get_uniquelist, '5', 'Uniquelist - 15'); is($bibentries->entry('unall4')->get_field($bibentries->entry('unall4')->get_labelname_info->{field})->get_uniquelist, '6', 'Uniquelist - 16'); # Testing "et al" counting as a uniquelist position # ul01 = 3 # ul02 = 3 (because it will be "XXX and YYY and ZZZ et al" which disambiguated the list from # "XXX and YYY and ZZZ" is($bibentries->entry('ul01')->get_field($bibentries->entry('ul01')->get_labelname_info->{field})->get_uniquelist, '3', 'Uniquelist - 17'); is($bibentries->entry('ul02')->get_field($bibentries->entry('ul02')->get_labelname_info->{field})->get_uniquelist, '3', 'Uniquelist - 18'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness1.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 1); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('uniquename', 2); Biber::Config->setblxoption('uniquelist', 1); # Now generate the information $biber->prepare; $bibentries = $biber->sections->get_section('0')->bibentries; is($bibentries->entry('test3')->get_field($bibentries->entry('test3')->get_labelname_info->{field})->get_uniquelist, '2', 'Uniquelist - 19'); is($bibentries->entry('test3')->get_field($bibentries->entry('test3')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename - 9'); is($bibentries->entry('test3')->get_field($bibentries->entry('test3')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '2', 'Uniquename - 10'); is($bibentries->entry('test4')->get_field($bibentries->entry('test4')->get_labelname_info->{field})->get_uniquelist, '2', 'Uniquelist - 20'); is($bibentries->entry('test4')->get_field($bibentries->entry('test4')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename - 11'); is($bibentries->entry('test4')->get_field($bibentries->entry('test4')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '2', 'Uniquename - 12'); is($bibentries->entry('test5')->get_field($bibentries->entry('test5')->get_labelname_info->{field})->get_uniquelist, '2', 'Uniquelist - 21'); is($bibentries->entry('test5')->get_field($bibentries->entry('test5')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename - 13'); is($bibentries->entry('test5')->get_field($bibentries->entry('test5')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '1', 'Uniquename - 14'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness4.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 3); Biber::Config->setblxoption('mincitenames', 3); Biber::Config->setblxoption('uniquename', 6); Biber::Config->setblxoption('uniquelist', 1); Biber::Config->setblxoption('singletitle', 0); Biber::Config->setblxoption('labeldatespec', [ {content => 'date', type => 'field'} ]); # Now generate the information $biber->prepare; $section = $biber->sections->get_section(0); $bibentries = $section->bibentries; $main = $biber->sortlists->get_list(0, 'entry', 'nty'); is($bibentries->entry('us1')->get_field($bibentries->entry('us1')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 1'); is($bibentries->entry('us1')->get_field($bibentries->entry('us1')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 2'); is($bibentries->entry('us2')->get_field($bibentries->entry('us2')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 3'); is($bibentries->entry('us2')->get_field($bibentries->entry('us2')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 4'); is($bibentries->entry('us3')->get_field($bibentries->entry('us3')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 5'); is($bibentries->entry('us3')->get_field($bibentries->entry('us3')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 6'); is($bibentries->entry('us4')->get_field($bibentries->entry('us4')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 7'); is($bibentries->entry('us4')->get_field($bibentries->entry('us4')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 8'); is($bibentries->entry('us5')->get_field($bibentries->entry('us5')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 9'); is($bibentries->entry('us6')->get_field($bibentries->entry('us6')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 10'); is($bibentries->entry('us6')->get_field($bibentries->entry('us6')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 11'); is($bibentries->entry('us6')->get_field($bibentries->entry('us6')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '0', 'Uniquename sparse - 12'); is($bibentries->entry('us7')->get_field($bibentries->entry('us7')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 13'); is($bibentries->entry('us7')->get_field($bibentries->entry('us7')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 14'); is($bibentries->entry('us8')->get_field($bibentries->entry('us8')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 15'); is($bibentries->entry('us8')->get_field($bibentries->entry('us8')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 16'); is($bibentries->entry('us9')->get_field($bibentries->entry('us9')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 17'); is($bibentries->entry('us9')->get_field($bibentries->entry('us9')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 18'); is($bibentries->entry('us10')->get_field($bibentries->entry('us10')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '1', 'Uniquename sparse - 19'); is($bibentries->entry('us10')->get_field($bibentries->entry('us10')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '1', 'Uniquename sparse - 20'); is($bibentries->entry('us11')->get_field($bibentries->entry('us11')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '1', 'Uniquename sparse - 21'); is($bibentries->entry('us11')->get_field($bibentries->entry('us11')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '1', 'Uniquename sparse - 22'); is($bibentries->entry('us12')->get_field($bibentries->entry('us12')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Uniquename sparse - 23'); is($bibentries->entry('us12')->get_field($bibentries->entry('us12')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 24'); is($bibentries->entry('us13')->get_field($bibentries->entry('us13')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Uniquename sparse - 25'); is($bibentries->entry('us13')->get_field($bibentries->entry('us13')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 26'); # maxcitenames/mincitenames is 3 in but us14 is still "et al" so it's a "different list is($bibentries->entry('us14')->get_field($bibentries->entry('us14')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 27'); is($bibentries->entry('us14')->get_field($bibentries->entry('us14')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 28'); is($bibentries->entry('us14')->get_field($bibentries->entry('us14')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '0', 'Uniquename sparse - 29'); is($bibentries->entry('us15')->get_field($bibentries->entry('us15')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 30'); is($bibentries->entry('us15')->get_field($bibentries->entry('us15')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 31'); is($bibentries->entry('us15')->get_field($bibentries->entry('us15')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '0', 'Uniquename sparse - 32'); is($bibentries->entry('us16')->get_field($bibentries->entry('us16')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 33'); is($bibentries->entry('us16')->get_field($bibentries->entry('us16')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 34'); is($bibentries->entry('us16')->get_field($bibentries->entry('us16')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '0', 'Uniquename sparse - 35'); ok(is_undef($bibentries->entry('us16')->get_field($bibentries->entry('us16')->get_labelname_info->{field})->get_uniquelist), 'Uniquename sparse - 36'); is($bibentries->entry('us17')->get_field($bibentries->entry('us17')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 37'); is($bibentries->entry('us17')->get_field($bibentries->entry('us17')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 38'); is($bibentries->entry('us17')->get_field($bibentries->entry('us17')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '0', 'Uniquename sparse - 39'); is($bibentries->entry('us17')->get_field($bibentries->entry('us17')->get_labelname_info->{field})->nth_name(4)->get_uniquename, '0', 'Uniquename sparse - 40'); is($bibentries->entry('us17')->get_field($bibentries->entry('us17')->get_labelname_info->{field})->get_uniquelist, '4', 'Uniquename sparse - 41'); is($bibentries->entry('us18')->get_field($bibentries->entry('us18')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 42'); is($bibentries->entry('us19')->get_field($bibentries->entry('us19')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 43'); ok(is_undef($bibentries->entry('us18')->get_field($bibentries->entry('us18')->get_labelname_info->{field})->get_uniquelist), 'Uniquename sparse - 44'); is($bibentries->entry('us19')->get_field($bibentries->entry('us19')->get_labelname_info->{field})->get_uniquelist, '4', 'Uniquename sparse - 45'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness4.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 3); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('uniquename', 6); Biber::Config->setblxoption('uniquelist', 1); Biber::Config->setblxoption('singletitle', 0); Biber::Config->setblxoption('labeldatespec', [ {content => 'date', type => 'field'} ]); # Now generate the information $biber->prepare; $section = $biber->sections->get_section(0); $bibentries = $section->bibentries; $main = $biber->sortlists->get_list(0, 'entry', 'nty'); # maxcitenames/mincitenames = 3/1 so these will not truncate to the same list (since # us15 would not be truncated at all) and they therefore would not need disambiguating with # uniquename = 5 or 6 is($bibentries->entry('us14')->get_field($bibentries->entry('us14')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 46'); is($bibentries->entry('us14')->get_field($bibentries->entry('us14')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 47'); is($bibentries->entry('us14')->get_field($bibentries->entry('us14')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '0', 'Uniquename sparse - 48'); is($bibentries->entry('us15')->get_field($bibentries->entry('us15')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 49'); is($bibentries->entry('us15')->get_field($bibentries->entry('us15')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 50'); is($bibentries->entry('us15')->get_field($bibentries->entry('us15')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '0', 'Uniquename sparse - 51'); # is($bibentries->entry('us20')->get_field($bibentries->entry('us20')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 52'); is($bibentries->entry('us21')->get_field($bibentries->entry('us21')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Uniquename sparse - 53'); is($bibentries->entry('us22')->get_field($bibentries->entry('us22')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 54'); is($bibentries->entry('us23')->get_field($bibentries->entry('us23')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Uniquename sparse - 55'); is($bibentries->entry('us24')->get_field($bibentries->entry('us24')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Uniquename sparse - 56'); is($bibentries->entry('us25')->get_field($bibentries->entry('us25')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 57'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness4.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 2); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('uniquename', 6); Biber::Config->setblxoption('uniquelist', 1); Biber::Config->setblxoption('singletitle', 0); Biber::Config->setblxoption('labeldatespec', [ {content => 'date', type => 'field'} ]); # Now generate the information $biber->prepare; $section = $biber->sections->get_section(0); $bibentries = $section->bibentries; $main = $biber->sortlists->get_list(0, 'entry', 'nty'); # maxcitenames/mincitenames = 2/1 so list are the same and need disambiguating but only in the first # name as the others are not visible is($bibentries->entry('us14')->get_field($bibentries->entry('us14')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '1', 'Uniquename sparse - 58'); is($bibentries->entry('us14')->get_field($bibentries->entry('us14')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 59'); is($bibentries->entry('us14')->get_field($bibentries->entry('us14')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '0', 'Uniquename sparse - 60'); is($bibentries->entry('us15')->get_field($bibentries->entry('us15')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '1', 'Uniquename sparse - 61'); is($bibentries->entry('us15')->get_field($bibentries->entry('us15')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Uniquename sparse - 62'); is($bibentries->entry('us15')->get_field($bibentries->entry('us15')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '0', 'Uniquename sparse - 63'); is($bibentries->entry('us26')->get_field($bibentries->entry('us26')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '1', 'Uniquename sparse - 64'); is($bibentries->entry('us27')->get_field($bibentries->entry('us27')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Uniquename sparse - 65'); is($bibentries->entry('us28')->get_field($bibentries->entry('us28')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Uniquename sparse - 66'); is($bibentries->entry('us29')->get_field($bibentries->entry('us29')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '1', 'Uniquename sparse - 67'); is($bibentries->entry('us30')->get_field($bibentries->entry('us30')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '1', 'Uniquename sparse - 68'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness5.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 1); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('uniquename', 2); Biber::Config->setblxoption('uniquelist', 2); Biber::Config->setblxoption('singletitle', 0); Biber::Config->setblxoption('labeldatespec', [ {content => 'date', type => 'field'} ]); # Now generate the information $biber->prepare; $section = $biber->sections->get_section(0); $bibentries = $section->bibentries; $main = $biber->sortlists->get_list(0, 'entry', 'nty'); ok(is_undef($bibentries->entry('uls1')->get_field($bibentries->entry('uls1')->get_labelname_info->{field})->get_uniquelist), 'Uniquelist strict - 1'); ok(is_undef($bibentries->entry('uls2')->get_field($bibentries->entry('uls2')->get_labelname_info->{field})->get_uniquelist), 'Uniquelist strict - 2'); is($bibentries->entry('uls3')->get_field($bibentries->entry('uls3')->get_labelname_info->{field})->get_uniquelist, '2', 'Uniquelist strict - 3'); is($bibentries->entry('uls4')->get_field($bibentries->entry('uls4')->get_labelname_info->{field})->get_uniquelist, '2', 'Uniquelist strict - 4'); is($bibentries->entry('uls5')->get_field($bibentries->entry('uls5')->get_labelname_info->{field})->get_uniquelist, '2', 'Uniquelist strict - 5'); is($bibentries->entry('uls6')->get_field($bibentries->entry('uls6')->get_labelname_info->{field})->get_uniquelist, '2', 'Uniquelist strict - 6'); ok(is_undef($bibentries->entry('uls7')->get_field($bibentries->entry('uls7')->get_labelname_info->{field})->get_uniquelist), 'Uniquelist strict - 7'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness5.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('maxcitenames', 3); Biber::Config->setblxoption('mincitenames', 2); Biber::Config->setblxoption('uniquename', 2); Biber::Config->setblxoption('uniquelist', 2); Biber::Config->setblxoption('singletitle', 0); Biber::Config->setblxoption('labeldatespec', [ {content => 'date', type => 'field'} ]); # Now generate the information $biber->prepare; $section = $biber->sections->get_section(0); $bibentries = $section->bibentries; $main = $biber->sortlists->get_list(0, 'entry', 'nty'); ok(is_undef($bibentries->entry('uls8')->get_field($bibentries->entry('uls8')->get_labelname_info->{field})->get_uniquelist), 'Uniquelist strict - 8'); ok(is_undef($bibentries->entry('uls9')->get_field($bibentries->entry('uls9')->get_labelname_info->{field})->get_uniquelist),'Uniquelist strict - 9'); ok(is_undef($bibentries->entry('uls1')->get_field($bibentries->entry('uls1')->get_labelname_info->{field})->get_uniquelist),'Uniquelist strict - 10'); is($bibentries->entry('uls10')->get_field($bibentries->entry('uls10')->get_labelname_info->{field})->get_uniquelist, '3', 'Uniquelist strict - 11'); is($bibentries->entry('uls11')->get_field($bibentries->entry('uls11')->get_labelname_info->{field})->get_uniquelist, '3', 'Uniquelist strict - 12'); ok(is_undef($bibentries->entry('uls12')->get_field($bibentries->entry('uls12')->get_labelname_info->{field})->get_uniquelist), 'Uniquelist strict - 13'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness3.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('uniquename', 1); Biber::Config->setblxoption('uniquelist', 0); Biber::Config->setblxoption('singletitle', 1); Biber::Config->setblxoption('labeldatespec', [ {content => 'date', type => 'field'} ]); # Now generate the information $biber->prepare; $section = $biber->sections->get_section(0); $bibentries = $section->bibentries; $main = $biber->sortlists->get_list(0, 'entry', 'nty'); is($main->get_extrayeardata('ey1'), '1', 'Extrayear - 1'); is($main->get_extrayeardata('ey2'), '2', 'Extrayear - 2'); is($main->get_extrayeardata('ey3'), '1', 'Extrayear - 3'); is($main->get_extrayeardata('ey4'), '2', 'Extrayear - 4'); is($main->get_extrayeardata('ey5'), '1', 'Extrayear - 5'); is($main->get_extrayeardata('ey6'), '2', 'Extrayear - 6'); ok(is_undef($bibentries->entry('ey1')->get_field('singletitle')), 'Singletitle - 1'); ok(is_undef($bibentries->entry('ey2')->get_field('singletitle')), 'Singletitle - 2'); ok(is_undef($bibentries->entry('ey5')->get_field('singletitle')), 'Singletitle - 3'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness3.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('uniquename', 2); Biber::Config->setblxoption('uniquelist', 1); Biber::Config->setblxoption('singletitle', 1); Biber::Config->setblxoption('labeldatespec', [ {content => 'date', type => 'field'} ]); # Now generate the information $biber->prepare; $section = $biber->sections->get_section(0); $bibentries = $section->bibentries; $main = $biber->sortlists->get_list(0, 'entry', 'nty'); ok(is_undef($main->get_extrayeardata('ey1')), 'Extrayear - 7'); ok(is_undef($main->get_extrayeardata('ey2')), 'Extrayear - 8'); is($main->get_extrayeardata('ey3'), '1', 'Extrayear - 9'); is($main->get_extrayeardata('ey4'), '2', 'Extrayear - 10'); ok(is_undef($main->get_extrayeardata('ey5')), 'Extrayear - 11'); ok(is_undef($main->get_extrayeardata('ey6')), 'Extrayear - 12'); is($bibentries->entry('ey1')->get_field('singletitle'), '1', 'Singletitle - 4'); is($bibentries->entry('ey2')->get_field('singletitle'), '1', 'Singletitle - 5'); is($bibentries->entry('ey5')->get_field('singletitle'), '1', 'Singletitle - 6'); ############################################################################# $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness3.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('uniquename', 0); Biber::Config->setblxoption('uniquelist', 0); Biber::Config->setblxoption('singletitle', 1); Biber::Config->setblxoption('labeldatespec', [ {content => 'date', type => 'field'} ]); # Now generate the information $biber->prepare; $section = $biber->sections->get_section(0); $bibentries = $section->bibentries; $main = $biber->sortlists->get_list(0, 'entry', 'nty'); is($main->get_extrayeardata('ey1'), '1', 'Extrayear - 13'); is($main->get_extrayeardata('ey2'), '2', 'Extrayear - 14'); is($main->get_extrayeardata('ey3'), '1', 'Extrayear - 15'); is($main->get_extrayeardata('ey4'), '2', 'Extrayear - 16'); is($main->get_extrayeardata('ey5'), '1', 'Extrayear - 17'); is($main->get_extrayeardata('ey6'), '2', 'Extrayear - 18'); ok(is_undef($bibentries->entry('ey1')->get_field('singletitle')), 'Singletitle - 7'); ok(is_undef($bibentries->entry('ey2')->get_field('singletitle')), 'Singletitle - 8'); ############################################################################# # Testing uniquename = 3 $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness2.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('uniquename', 3); Biber::Config->setblxoption('uniquelist', 1); # Now generate the information $biber->prepare; $section = $biber->sections->get_section(0); $bibentries = $section->bibentries; $main = $biber->sortlists->get_list(0, 'entry', 'nty'); is($bibentries->entry('un8')->get_field($bibentries->entry('un8')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Forced init expansion - 1'); is($bibentries->entry('un8')->get_field($bibentries->entry('un8')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Forced init expansion - 2'); is($bibentries->entry('un8')->get_field($bibentries->entry('un8')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '1', 'Forced init expansion - 3'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '0', 'Forced init expansion - 4'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Forced init expansion - 5'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '1', 'Forced init expansion - 6'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->nth_name(4)->get_uniquename, '1', 'Forced init expansion - 7'); is($bibentries->entry('un10')->get_field($bibentries->entry('un10')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '1', 'Forced init expansion - 8'); ############################################################################# # Testing uniquename = 4 $biber = Biber->new(noconf => 1); $biber->parse_ctrlfile('uniqueness2.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Biblatex options Biber::Config->setblxoption('uniquename', 4); Biber::Config->setblxoption('uniquelist', 1); # Now generate the information $biber->prepare; $section = $biber->sections->get_section(0); $bibentries = $section->bibentries; $main = $biber->sortlists->get_list(0, 'entry', 'nty'); is($bibentries->entry('un8')->get_field($bibentries->entry('un8')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Forced name expansion - 1'); is($bibentries->entry('un8')->get_field($bibentries->entry('un8')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Forced name expansion - 2'); is($bibentries->entry('un8')->get_field($bibentries->entry('un8')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '1', 'Forced name expansion - 3'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '2', 'Forced name expansion - 4'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->nth_name(2)->get_uniquename, '0', 'Forced name expansion - 5'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->nth_name(3)->get_uniquename, '1', 'Forced name expansion - 6'); is($bibentries->entry('un9')->get_field($bibentries->entry('un9')->get_labelname_info->{field})->nth_name(4)->get_uniquename, '1', 'Forced name expansion - 7'); is($bibentries->entry('un10')->get_field($bibentries->entry('un10')->get_labelname_info->{field})->nth_name(1)->get_uniquename, '1', 'Forced name expansion - 8'); biblatex-biber-1.8/t/dm-dateformats.t000555000000000000 4136112230324176 17060 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 33; use Biber; use Biber::Output::bbl; use Biber::Utils; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('dm-dateformats.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setoption('validate_datamodel', 1); # Biblatex options Biber::Config->setblxoption('labeldatespec', [ {content => 'date', type => 'field'} ]); # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; my $l1 = [ "Datamodel: Entry 'L1' (dm-dateformats.bib): Invalid format '1985-1030' of date field 'origdate' - ignoring", "Datamodel: Entry 'L1' (dm-dateformats.bib): Invalid format '1.5.1998' of date field 'urldate' - ignoring", "Datamodel: Entry 'L1' (dm-dateformats.bib): Invalid date value 'YYYY/14/DD' - ignoring its components" ]; my $l2 = [ "Datamodel: Entry 'L2' (dm-dateformats.bib): Invalid format '1995-1230' of date field 'origdate' - ignoring" ]; my $l3 = [ "Datamodel: Entry 'L3' (dm-dateformats.bib): Invalid format '1.5.1988' of date field 'urldate' - ignoring" ]; my $l4 = [ "Datamodel: Entry 'L4' (dm-dateformats.bib): Invalid format '1995-1-04' of date field 'date' - ignoring", "Datamodel: Entry 'L4' (dm-dateformats.bib): Missing mandatory field - one of 'date, year' must be defined" ]; my $l5 = [ "Datamodel: Entry 'L5' (dm-dateformats.bib): Invalid format '1995-10-4' of date field 'date' - ignoring", "Datamodel: Entry 'L5' (dm-dateformats.bib): Missing mandatory field - one of 'date, year' must be defined" ]; my $l6 = [ "Datamodel: Entry 'L6' (dm-dateformats.bib): Invalid date value '1996/13/03' - ignoring its components" ]; my $l7 = [ "Datamodel: Entry 'L7' (dm-dateformats.bib): Invalid date value '1996/10/35' - ignoring its components" ]; my $l11 = [ "Overwriting field 'year' with year value from field 'date' for entry 'L11'"]; my $l12 = [ "Overwriting field 'month' with month value from field 'date' for entry 'L12'" ]; my $l13c = q| \entry{L13}{book}{} \name{labelname}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \name{author}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Oxford}% } \strng{namehash}{8c77336299b25bdada7bf8038f46722f} \strng{fullhash}{8c77336299b25bdada7bf8038f46722f} \field{sortinit}{D} \field{extrayear}{3} \field{labelyear}{1996} \field{labelmonth}{01} \field{labelday}{01} \field{datelabelsource}{} \field{labeltitle}{Title 2} \field{day}{01} \field{endyear}{} \field{month}{01} \field{title}{Title 2} \field{year}{1996} \endentry |; my $l14 = q| \entry{L14}{book}{} \name{labelname}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \name{author}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Oxford}% } \strng{namehash}{8c77336299b25bdada7bf8038f46722f} \strng{fullhash}{8c77336299b25bdada7bf8038f46722f} \field{sortinit}{D} \field{extrayear}{4} \field{labelyear}{1996} \field{labelmonth}{12} \field{labelday}{10\bibdatedash 12} \field{datelabelsource}{} \field{labeltitle}{Title 2} \field{day}{10} \field{endday}{12} \field{endmonth}{12} \field{endyear}{1996} \field{month}{12} \field{title}{Title 2} \field{year}{1996} \endentry |; my $l15 = q| \entry{L15}{book}{} \name{labelname}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \name{author}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Oxford}% } \strng{namehash}{8c77336299b25bdada7bf8038f46722f} \strng{fullhash}{8c77336299b25bdada7bf8038f46722f} \field{sortinit}{D} \field{extrayear}{4} \field{labeltitle}{Title 2} \field{title}{Title 2} \warn{\item Datamodel: Entry 'L15' (dm-dateformats.bib): Missing mandatory field - one of 'date, year' must be defined} \endentry |; my $l16 = q| \entry{L16}{proceedings}{} \name{labelname}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \name{editor}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Oxford}% } \strng{namehash}{8c77336299b25bdada7bf8038f46722f} \strng{fullhash}{8c77336299b25bdada7bf8038f46722f} \field{sortinit}{D} \field{extrayear}{6} \field{labelyear}{1996} \field{labelmonth}{01} \field{labelday}{01} \field{datelabelsource}{event} \field{labeltitle}{Title 2} \field{eventday}{01} \field{eventmonth}{01} \field{eventyear}{1996} \field{title}{Title 2} \warn{\item Datamodel: Entry 'L16' (dm-dateformats.bib): Missing mandatory field - one of 'date, year' must be defined} \endentry |; my $l17 = q| \entry{L17}{proceedings}{} \name{labelname}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \name{editor}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Oxford}% } \strng{namehash}{8c77336299b25bdada7bf8038f46722f} \strng{fullhash}{8c77336299b25bdada7bf8038f46722f} \field{sortinit}{D} \field{extrayear}{5} \field{labelyear}{1996} \field{labelmonth}{12} \field{labelday}{10\bibdatedash 12} \field{datelabelsource}{} \field{labeltitle}{Title 2} \field{day}{10} \field{endday}{12} \field{endmonth}{12} \field{endyear}{1996} \field{eventday}{10} \field{eventendday}{12} \field{eventendmonth}{12} \field{eventendyear}{2004} \field{eventmonth}{12} \field{eventyear}{1998} \field{month}{12} \field{origday}{10} \field{origendday}{12} \field{origendmonth}{12} \field{origendyear}{1998} \field{origmonth}{12} \field{origyear}{1998} \field{pubstate}{inpress} \field{title}{Title 2} \field{year}{1996} \endentry |; my $l17c = q| \entry{L17}{proceedings}{} \name{labelname}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \name{editor}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Oxford}% } \strng{namehash}{8c77336299b25bdada7bf8038f46722f} \strng{fullhash}{8c77336299b25bdada7bf8038f46722f} \field{sortinit}{D} \field{labelyear}{1998} \field{labelmonth}{12} \field{labelday}{10\bibdatedash 12} \field{datelabelsource}{orig} \field{labeltitle}{Title 2} \field{day}{10} \field{endday}{12} \field{endmonth}{12} \field{endyear}{1996} \field{eventday}{10} \field{eventendday}{12} \field{eventendmonth}{12} \field{eventendyear}{2004} \field{eventmonth}{12} \field{eventyear}{1998} \field{month}{12} \field{origday}{10} \field{origendday}{12} \field{origendmonth}{12} \field{origendyear}{1998} \field{origmonth}{12} \field{origyear}{1998} \field{pubstate}{inpress} \field{title}{Title 2} \field{year}{1996} \endentry |; my $l17e = q| \entry{L17}{proceedings}{} \name{labelname}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \name{editor}{2}{}{% {{hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% {{hash=df9bf04cd41245e6d23ad7543e7fd90d}{Abrahams}{A\bibinitperiod}{Albert}{A\bibinitperiod}{}{}{}{}}% } \list{publisher}{1}{% {Oxford}% } \strng{namehash}{8c77336299b25bdada7bf8038f46722f} \strng{fullhash}{8c77336299b25bdada7bf8038f46722f} \field{sortinit}{D} \field{labelyear}{1998\bibdatedash 2004} \field{labelmonth}{12} \field{labelday}{10\bibdatedash 12} \field{datelabelsource}{event} \field{labeltitle}{Title 2} \field{day}{10} \field{endday}{12} \field{endmonth}{12} \field{endyear}{1996} \field{eventday}{10} \field{eventendday}{12} \field{eventendmonth}{12} \field{eventendyear}{2004} \field{eventmonth}{12} \field{eventyear}{1998} \field{month}{12} \field{origday}{10} \field{origendday}{12} \field{origendmonth}{12} \field{origendyear}{1998} \field{origmonth}{12} \field{origyear}{1998} \field{pubstate}{inpress} \field{title}{Title 2} \field{year}{1996} \endentry |; is_deeply($bibentries->entry('L1')->get_field('warnings'), $l1, 'Date values test 1' ) ; ok(is_undef($bibentries->entry('L1')->get_field('origyear')), 'Date values test 1a - ORIGYEAR undef since ORIGDATE is bad' ) ; ok(is_undef($bibentries->entry('L1')->get_field('urlyear')), 'Date values test 1b - URLYEAR undef since URLDATE is bad' ) ; ok(is_undef($bibentries->entry('L1')->get_field('month')), 'Date values test 1c - MONTH undef since not integer' ) ; is_deeply($bibentries->entry('L2')->get_field('warnings'), $l2, 'Date values test 2' ) ; is_deeply($bibentries->entry('L3')->get_field('warnings'), $l3, 'Date values test 3' ) ; is_deeply($bibentries->entry('L4')->get_field('warnings'), $l4, 'Date values test 4' ) ; is_deeply($bibentries->entry('L5')->get_field('warnings'), $l5, 'Date values test 5' ) ; is_deeply($bibentries->entry('L6')->get_field('warnings'), $l6, 'Date values test 6' ) ; is_deeply($bibentries->entry('L7')->get_field('warnings'), $l7, 'Date values test 7' ) ; is($bibentries->entry('L8')->get_field('month'), '01', 'Date values test 8b - MONTH hacked to integer' ) ; ok(is_undef($bibentries->entry('L9')->get_field('warnings')), 'Date values test 9' ) ; ok(is_undef($bibentries->entry('L10')->get_field('warnings')), 'Date values test 10' ) ; is_deeply($bibentries->entry('L11')->get_field('warnings'), $l11, 'Date values test 11' ); is($bibentries->entry('L11')->get_field('year'), '1996', 'Date values test 11a - DATE overrides YEAR' ) ; is_deeply($bibentries->entry('L12')->get_field('warnings'), $l12, 'Date values test 12' ); is($bibentries->entry('L12')->get_field('month'), '01', 'Date values test 12a - DATE overrides MONTH' ) ; # it means something if endyear is defined but null ("1935-") ok(is_def_and_null($bibentries->entry('L13')->get_field('endyear')), 'Date values test 13 - range with no end' ) ; ok(is_undef($bibentries->entry('L13')->get_field('endmonth')), 'Date values test 13a - ENDMONTH undef for open-ended range' ) ; ok(is_undef($bibentries->entry('L13')->get_field('endday')), 'Date values test 13b - ENDDAY undef for open-ended range' ) ; is( $out->get_output_entry('L13', $main), $l13c, 'Date values test 13c - labelyear open-ended range' ) ; is( $out->get_output_entry('L14', $main), $l14, 'Date values test 14 - labelyear same as YEAR when ENDYEAR == YEAR') ; is( $out->get_output_entry('L15', $main), $l15, 'Date values test 15 - labelyear should be undef, no DATE or YEAR') ; # reset options and regenerate information Biber::Config->setblxoption('labeldatespec', [ {content => 'date', type => 'field'}, {content => 'eventdate', type => 'field'}, {content => 'origdate', type => 'field'} ]); $bibentries->del_entry('L17'); $bibentries->del_entry('L16'); $biber->prepare; $out = $biber->get_output_obj; is($bibentries->entry('L16')->get_labeldate_info->{field}{year}, 'eventyear', 'Date values test 16 - labelyear = EVENTYEAR when YEAR is (mistakenly) missing' ) ; is($out->get_output_entry('L16', $main), $l16, 'Date values test 16a - labelyear = EVENTYEAR value when YEAR is (mistakenly) missing' ); is($bibentries->entry('L17')->get_labeldate_info->{field}{year}, 'year', 'Date values test 17 - labelyear = YEAR' ) ; is($out->get_output_entry('L17', $main), $l17, 'Date values test 17a - labelyear = YEAR value when ENDYEAR is the same and ORIGYEAR is also present' ) ; # reset options and regenerate information Biber::Config->setblxoption('labeldatespec', [ {content => 'origdate', type => 'field'}, {content => 'date', type => 'field'}, {content => 'eventdate', type => 'field'} ]); $bibentries->del_entry('L17'); $biber->prepare; $out = $biber->get_output_obj; is($bibentries->entry('L17')->get_labeldate_info->{field}{year}, 'origyear', 'Date values test 17b - labelyear = ORIGYEAR' ) ; is($out->get_output_entry('L17', $main), $l17c, 'Date values test 17c - labelyear = ORIGYEAR value when ENDORIGYEAR is the same and YEAR is also present' ) ; # reset options and regenerate information Biber::Config->setblxoption('labeldatespec', [ {content => 'eventdate', type => 'field'}, {content => 'date', type => 'field'}, {content => 'origdate', type => 'field'} ], 'PER_TYPE', 'proceedings'); $bibentries->del_entry('L17'); $biber->prepare; $out = $biber->get_output_obj; is($bibentries->entry('L17')->get_labeldate_info->{field}{year}, 'eventyear', 'Date values test 17d - labelyear = EVENTYEAR' ) ; is($bibentries->entry('L17')->get_labeldate_info->{field}{source}, 'event', 'Date values test 17d - source = event' ) ; is($out->get_output_entry('L17', $main), $l17e, 'Date values test 17e - labelyear = ORIGYEAR-ORIGENDYEAR' ) ; # reset options and regenerate information Biber::Config->setblxoption('labeldatespec', [ {content => 'pubstate', type => 'field'} ], 'PER_TYPE', 'proceedings'); $bibentries->del_entry('L17'); $biber->prepare; $out = $biber->get_output_obj; is($bibentries->entry('L17')->get_labeldate_info->{field}{source}, 'pubstate', 'Source is non-date field' ); biblatex-biber-1.8/t/extratitleyear.t000555000000000000 340212230324176 17171 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 5; use Biber; use Biber::Utils; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('extratitleyear.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Now generate the information $biber->prepare; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; # Don't forget that the extratitleyear data is inserted after sorting is($main->get_extratitleyeardata('L1'), '1', 'Same title, same year'); is($main->get_extratitleyeardata('L2'), '2', 'Same title, same year'); ok(is_undef($main->get_extratitledata('L3')), 'No title, same year'); ok(is_undef($main->get_extratitleyeardata('L4')), 'Same title, different year'); ok(is_undef($main->get_extratitleyeardata('L5')), 'Different labeltitle, same year'); biblatex-biber-1.8/t/basic-misc.t000555000000000000 6726312230324175 16173 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 55; use Biber; use Biber::Utils; use Biber::Output::bbl; use Log::Log4perl; use Unicode::Normalize; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(configfile => 'biber-test.conf'); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('general2.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setoption('fastsort', 1); Biber::Config->setblxoption('uniquelist', 1); Biber::Config->setblxoption('maxcitenames', 3); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('maxalphanames', 3); Biber::Config->setblxoption('minalphanames', 1); Biber::Config->setblxoption('maxbibnames', 10); Biber::Config->setblxoption('minbibnames', 7); # THERE IS A CONFIG FILE BEING READ TO TEST USER MAPS TOO! # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my @keys = sort $section->get_citekeys; my @citedkeys = sort qw{ alias1 alias2 alias5 anon1 anon2 murray t1 kant:ku kant:kpv t2 shore u1 u2 us1 list1 }; # entry "loh" is missing as the biber.conf map removes it with map_entry_null my @allkeys = sort map {lc()} qw{ anon1 anon2 stdmodel aristotle:poetics vazques-de-parga t1 gonzalez averroes/bland laufenberg westfahl:frontier knuth:ct:a kastenholz averroes/hannes iliad luzzatto malinowski sorace knuth:ct:d britannica nietzsche:historie stdmodel:weinberg knuth:ct:b baez/article knuth:ct:e itzhaki jaffe padhye cicero stdmodel:salam reese averroes/hercz murray shore aristotle:physics massa aristotle:anima gillies set kowalik gaonkar springer geer hammond wormanx westfahl:space worman set:herrmann augustine gerhardt piccato hasan hyman stdmodel:glashow stdmodel:ps_sc kant:kpv companion almendro sigfridsson ctan baez/online aristotle:rhetoric pimentel00 pines knuth:ct:c moraux cms angenendt angenendtsk markey cotton vangennepx kant:ku nussbaum nietzsche:ksa1 vangennep knuth:ct angenendtsa spiegelberg bertram brandt set:aksin chiu nietzsche:ksa set:yoon maron coleridge tvonb t2 u1 u2 i1 i2 tmn1 tmn2 tmn3 tmn4 lne1 alias1 alias2 alias5 url1 url2 ol1 pages1 pages2 pages3 pages4 pages5 pages6 pages7 us1 labelstest list1 } ; my $u1 = q| \entry{u1}{misc}{} \name{labelname}{4}{uniquelist=4}{% {{uniquename=0,hash=e1faffb3e614e6c2fba74296962386b7}{AAA}{A\bibinitperiod}{}{}{}{}{}{}}% {{uniquename=0,hash=2bb225f0ba9a58930757a868ed57d9a3}{BBB}{B\bibinitperiod}{}{}{}{}{}{}}% {{uniquename=0,hash=defb99e69a9f1f6e06f15006b1f166ae}{CCC}{C\bibinitperiod}{}{}{}{}{}{}}% {{uniquename=0,hash=45054f47ac3305a2a33e9bcceadff712}{DDD}{D\bibinitperiod}{}{}{}{}{}{}}% } \name{author}{4}{uniquelist=4}{% {{uniquename=0,hash=e1faffb3e614e6c2fba74296962386b7}{AAA}{A\bibinitperiod}{}{}{}{}{}{}}% {{uniquename=0,hash=2bb225f0ba9a58930757a868ed57d9a3}{BBB}{B\bibinitperiod}{}{}{}{}{}{}}% {{uniquename=0,hash=defb99e69a9f1f6e06f15006b1f166ae}{CCC}{C\bibinitperiod}{}{}{}{}{}{}}% {{uniquename=0,hash=45054f47ac3305a2a33e9bcceadff712}{DDD}{D\bibinitperiod}{}{}{}{}{}{}}% } \strng{namehash}{b78abdc838d79b6576f2ed0021642766} \strng{fullhash}{b78abdc838d79b6576f2ed0021642766} \field{labelalpha}{AAA\textbf{+}00} \field{sortinit}{A} \field{labeltitle}{A title} \true{singletitle} \field{title}{A title} \field{year}{2000} \endentry |; is( $out->get_output_entry('u1', $main), $u1, 'uniquelist 1' ) ; is_deeply( \@keys, \@citedkeys, 'citekeys 1') ; is_deeply( [ $biber->sortlists->get_list(0, 'shorthand', 'shorthand')->get_keys ], [ 'kant:kpv', 'kant:ku' ], 'shorthands' ) ; # reset some options and re-generate information # Have to do a citekey deletion as we are not re-reading the .bcf which would do it for us # Otherwise, we have citekeys and allkeys which confuses fetch_data() $section->del_citekeys; $section->set_allkeys(1); $section->bibentries->del_entries; $section->del_everykeys; Biber::Input::file::bibtex->init_cache; $biber->prepare; $section = $biber->sections->get_section(0); my $bibentries = $section->bibentries; $out = $biber->get_output_obj; @keys = sort map {lc()} $section->get_citekeys; is_deeply( \@keys, \@allkeys, 'citekeys 2') ; my $murray1 = q| \entry{murray}{article}{} \name{labelname}{14}{}{% {{uniquename=0,hash=f1bafaf959660d1c3ca82d486ce5a651}{Hostetler}{H\bibinitperiod}{Michael\bibnamedelima J.}{M\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=de9f774c929dc661b4180b07f5eb62f3}{Wingate}{W\bibinitperiod}{Julia\bibnamedelima E.}{J\bibinitperiod\bibinitdelim E\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=76100791c221471771c6bf1dbbc0975d}{Zhong}{Z\bibinitperiod}{Chuan-Jian}{C\bibinithyphendelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=34c410f87490dd022093780c69640413}{Harris}{H\bibinitperiod}{Jay\bibnamedelima E.}{J\bibinitperiod\bibinitdelim E\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=a803710eddd16b95e91f420c0081985c}{Vachet}{V\bibinitperiod}{Richard\bibnamedelima W.}{R\bibinitperiod\bibinitdelim W\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=38d1db37321ac524d14a116e74123685}{Clark}{C\bibinitperiod}{Michael\bibnamedelima R.}{M\bibinitperiod\bibinitdelim R\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=969c673c8b05314f89a822ecfbead6af}{Londono}{L\bibinitperiod}{J.\bibnamedelimi David}{J\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=fc6cda30bdeb421b5b57ef2d1ce6f92b}{Green}{G\bibinitperiod}{Stephen\bibnamedelima J.}{S\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=69dcde2965d0ce8a53fae463355f36f5}{Stokes}{S\bibinitperiod}{Jennifer\bibnamedelima J.}{J\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=8cfed260a429843a4846ad8d83f9a09f}{Wignall}{W\bibinitperiod}{George\bibnamedelima D.}{G\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=71a4aee3f5124c9c94825634735417be}{Glish}{G\bibinitperiod}{Gary\bibnamedelima L.}{G\bibinitperiod\bibinitdelim L\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=9406f7f2b15056febb90692ae05e8620}{Porter}{P\bibinitperiod}{Marc\bibnamedelima D.}{M\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=f8d80918767d0ce7f535453dc016c327}{Evans}{E\bibinitperiod}{Neal\bibnamedelima D.}{N\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=98688e58f25c10d275f9d15d31ba3396}{Murray}{M\bibinitperiod}{Royce\bibnamedelima W.}{R\bibinitperiod\bibinitdelim W\bibinitperiod}{}{}{}{}}% } \name{author}{14}{}{% {{uniquename=0,hash=f1bafaf959660d1c3ca82d486ce5a651}{Hostetler}{H\bibinitperiod}{Michael\bibnamedelima J.}{M\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=de9f774c929dc661b4180b07f5eb62f3}{Wingate}{W\bibinitperiod}{Julia\bibnamedelima E.}{J\bibinitperiod\bibinitdelim E\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=76100791c221471771c6bf1dbbc0975d}{Zhong}{Z\bibinitperiod}{Chuan-Jian}{C\bibinithyphendelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=34c410f87490dd022093780c69640413}{Harris}{H\bibinitperiod}{Jay\bibnamedelima E.}{J\bibinitperiod\bibinitdelim E\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=a803710eddd16b95e91f420c0081985c}{Vachet}{V\bibinitperiod}{Richard\bibnamedelima W.}{R\bibinitperiod\bibinitdelim W\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=38d1db37321ac524d14a116e74123685}{Clark}{C\bibinitperiod}{Michael\bibnamedelima R.}{M\bibinitperiod\bibinitdelim R\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=969c673c8b05314f89a822ecfbead6af}{Londono}{L\bibinitperiod}{J.\bibnamedelimi David}{J\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=fc6cda30bdeb421b5b57ef2d1ce6f92b}{Green}{G\bibinitperiod}{Stephen\bibnamedelima J.}{S\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=69dcde2965d0ce8a53fae463355f36f5}{Stokes}{S\bibinitperiod}{Jennifer\bibnamedelima J.}{J\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=8cfed260a429843a4846ad8d83f9a09f}{Wignall}{W\bibinitperiod}{George\bibnamedelima D.}{G\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=71a4aee3f5124c9c94825634735417be}{Glish}{G\bibinitperiod}{Gary\bibnamedelima L.}{G\bibinitperiod\bibinitdelim L\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=9406f7f2b15056febb90692ae05e8620}{Porter}{P\bibinitperiod}{Marc\bibnamedelima D.}{M\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=f8d80918767d0ce7f535453dc016c327}{Evans}{E\bibinitperiod}{Neal\bibnamedelima D.}{N\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=98688e58f25c10d275f9d15d31ba3396}{Murray}{M\bibinitperiod}{Royce\bibnamedelima W.}{R\bibinitperiod\bibinitdelim W\bibinitperiod}{}{}{}{}}% } \strng{namehash}{7ba00ed438c44a2270c14ba95a7fc011} \strng{fullhash}{61836f4684b2615842b68c26479f6ec2} \field{labelalpha}{Hos\textbf{+}98} \field{sortinit}{H} \field{labeltitle}{Alkanethiolate gold cluster molecules} \true{singletitle} \field{annotation}{An \texttt{article} entry with \arabic{author} authors. By default, long author and editor lists are automatically truncated. This is configurable} \field{hyphenation}{american} \field{indextitle}{Alkanethiolate gold cluster molecules} \field{journaltitle}{Langmuir} \field{number}{1} \field{shorttitle}{Alkanethiolate gold cluster molecules} \field{subtitle}{Core and monolayer properties as a function of core size} \field{title}{Alkanethiolate gold cluster molecules with core diameters from 1.5 to 5.2~nm} \field{volume}{14} \field{year}{1998} \field{pages}{17\bibrangedash 30} \keyw{keyw1,keyw2} \endentry |; my $murray2 = q| \entry{murray}{article}{} \name{labelname}{14}{}{% {{uniquename=0,hash=f1bafaf959660d1c3ca82d486ce5a651}{Hostetler}{H\bibinitperiod}{Michael\bibnamedelima J.}{M\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=de9f774c929dc661b4180b07f5eb62f3}{Wingate}{W\bibinitperiod}{Julia\bibnamedelima E.}{J\bibinitperiod\bibinitdelim E\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=76100791c221471771c6bf1dbbc0975d}{Zhong}{Z\bibinitperiod}{Chuan-Jian}{C\bibinithyphendelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=34c410f87490dd022093780c69640413}{Harris}{H\bibinitperiod}{Jay\bibnamedelima E.}{J\bibinitperiod\bibinitdelim E\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=a803710eddd16b95e91f420c0081985c}{Vachet}{V\bibinitperiod}{Richard\bibnamedelima W.}{R\bibinitperiod\bibinitdelim W\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=38d1db37321ac524d14a116e74123685}{Clark}{C\bibinitperiod}{Michael\bibnamedelima R.}{M\bibinitperiod\bibinitdelim R\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=969c673c8b05314f89a822ecfbead6af}{Londono}{L\bibinitperiod}{J.\bibnamedelimi David}{J\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=fc6cda30bdeb421b5b57ef2d1ce6f92b}{Green}{G\bibinitperiod}{Stephen\bibnamedelima J.}{S\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=69dcde2965d0ce8a53fae463355f36f5}{Stokes}{S\bibinitperiod}{Jennifer\bibnamedelima J.}{J\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=8cfed260a429843a4846ad8d83f9a09f}{Wignall}{W\bibinitperiod}{George\bibnamedelima D.}{G\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=71a4aee3f5124c9c94825634735417be}{Glish}{G\bibinitperiod}{Gary\bibnamedelima L.}{G\bibinitperiod\bibinitdelim L\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=9406f7f2b15056febb90692ae05e8620}{Porter}{P\bibinitperiod}{Marc\bibnamedelima D.}{M\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=f8d80918767d0ce7f535453dc016c327}{Evans}{E\bibinitperiod}{Neal\bibnamedelima D.}{N\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=98688e58f25c10d275f9d15d31ba3396}{Murray}{M\bibinitperiod}{Royce\bibnamedelima W.}{R\bibinitperiod\bibinitdelim W\bibinitperiod}{}{}{}{}}% } \name{author}{14}{}{% {{uniquename=0,hash=f1bafaf959660d1c3ca82d486ce5a651}{Hostetler}{H\bibinitperiod}{Michael\bibnamedelima J.}{M\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=de9f774c929dc661b4180b07f5eb62f3}{Wingate}{W\bibinitperiod}{Julia\bibnamedelima E.}{J\bibinitperiod\bibinitdelim E\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=76100791c221471771c6bf1dbbc0975d}{Zhong}{Z\bibinitperiod}{Chuan-Jian}{C\bibinithyphendelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=34c410f87490dd022093780c69640413}{Harris}{H\bibinitperiod}{Jay\bibnamedelima E.}{J\bibinitperiod\bibinitdelim E\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=a803710eddd16b95e91f420c0081985c}{Vachet}{V\bibinitperiod}{Richard\bibnamedelima W.}{R\bibinitperiod\bibinitdelim W\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=38d1db37321ac524d14a116e74123685}{Clark}{C\bibinitperiod}{Michael\bibnamedelima R.}{M\bibinitperiod\bibinitdelim R\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=969c673c8b05314f89a822ecfbead6af}{Londono}{L\bibinitperiod}{J.\bibnamedelimi David}{J\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=fc6cda30bdeb421b5b57ef2d1ce6f92b}{Green}{G\bibinitperiod}{Stephen\bibnamedelima J.}{S\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=69dcde2965d0ce8a53fae463355f36f5}{Stokes}{S\bibinitperiod}{Jennifer\bibnamedelima J.}{J\bibinitperiod\bibinitdelim J\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=8cfed260a429843a4846ad8d83f9a09f}{Wignall}{W\bibinitperiod}{George\bibnamedelima D.}{G\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=71a4aee3f5124c9c94825634735417be}{Glish}{G\bibinitperiod}{Gary\bibnamedelima L.}{G\bibinitperiod\bibinitdelim L\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=9406f7f2b15056febb90692ae05e8620}{Porter}{P\bibinitperiod}{Marc\bibnamedelima D.}{M\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=f8d80918767d0ce7f535453dc016c327}{Evans}{E\bibinitperiod}{Neal\bibnamedelima D.}{N\bibinitperiod\bibinitdelim D\bibinitperiod}{}{}{}{}}% {{uniquename=0,hash=98688e58f25c10d275f9d15d31ba3396}{Murray}{M\bibinitperiod}{Royce\bibnamedelima W.}{R\bibinitperiod\bibinitdelim W\bibinitperiod}{}{}{}{}}% } \strng{namehash}{7ba00ed438c44a2270c14ba95a7fc011} \strng{fullhash}{61836f4684b2615842b68c26479f6ec2} \field{labelalpha}{Hos98} \field{sortinit}{H} \field{labeltitle}{Alkanethiolate gold cluster molecules} \true{singletitle} \field{annotation}{An \texttt{article} entry with \arabic{author} authors. By default, long author and editor lists are automatically truncated. This is configurable} \field{hyphenation}{american} \field{indextitle}{Alkanethiolate gold cluster molecules} \field{journaltitle}{Langmuir} \field{number}{1} \field{shorttitle}{Alkanethiolate gold cluster molecules} \field{subtitle}{Core and monolayer properties as a function of core size} \field{title}{Alkanethiolate gold cluster molecules with core diameters from 1.5 to 5.2~nm} \field{volume}{14} \field{year}{1998} \field{pages}{17\bibrangedash 30} \keyw{keyw1,keyw2} \endentry |; # This example wouldn't compile - it's just to test escaping my $t1 = q+ \entry{t1}{misc}{} \name{labelname}{1}{}{% {{uniquename=0,hash=858fcf9483ec29b7707a7dda2dde7a6f}{Brown}{B\bibinitperiod}{Bill}{B\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=858fcf9483ec29b7707a7dda2dde7a6f}{Brown}{B\bibinitperiod}{Bill}{B\bibinitperiod}{}{}{}{}}% } \strng{namehash}{858fcf9483ec29b7707a7dda2dde7a6f} \strng{fullhash}{858fcf9483ec29b7707a7dda2dde7a6f} \field{labelalpha}{Bro92} \field{sortinit}{B} \field{labeltitle}{10\% of [100] and 90% of $Normal_2$ | \& # things {$^{3}$}} \field{title}{10\% of [100] and 90% of $Normal_2$ | \& # things {$^{3}$}} \field{year}{1992} \field{pages}{100\bibrangedash} \keyw{primary,something,somethingelse} \endentry +; my $t2 = q| \entry{t2}{misc}{} \name{labelname}{1}{}{% {{uniquename=0,hash=858fcf9483ec29b7707a7dda2dde7a6f}{Brown}{B\bibinitperiod}{Bill}{B\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=858fcf9483ec29b7707a7dda2dde7a6f}{Brown}{B\bibinitperiod}{Bill}{B\bibinitperiod}{}{}{}{}}% } \strng{namehash}{858fcf9483ec29b7707a7dda2dde7a6f} \strng{fullhash}{858fcf9483ec29b7707a7dda2dde7a6f} \field{labelalpha}{Bro94} \field{sortinit}{B} \field{labeltitle}{Signs of W$\frac{o}{a}$nder} \field{title}{Signs of W$\frac{o}{a}$nder} \field{year}{1994} \field{pages}{100\bibrangedash 108} \endentry |; my $anon1 = q| \entry{anon1}{unpublished}{} \name{labelname}{1}{}{% {{uniquename=0,hash=9873a6cc65c553faa2b21aaad626fe4b}{XAnony}{X\bibinitperiod}{}{}{}{}{}{}}% } \name{author}{1}{}{% {{hash=a66f357fe2fd356fe49959173522a651}{AnonymousX}{A\bibinitperiod}{}{}{}{}{}{}}% } \name{shortauthor}{1}{}{% {{uniquename=0,hash=9873a6cc65c553faa2b21aaad626fe4b}{XAnony}{X\bibinitperiod}{}{}{}{}{}{}}% } \strng{namehash}{9873a6cc65c553faa2b21aaad626fe4b} \strng{fullhash}{a66f357fe2fd356fe49959173522a651} \field{labelalpha}{XAn35} \field{sortinit}{A} \field{labeltitle}{Shorttitle} \true{singletitle} \field{hyphenation}{USenglish} \field{note}{anon1} \field{shorttitle}{Shorttitle} \field{title}{Title1} \field{year}{1835} \field{pages}{111\bibrangedash 118} \keyw{arc} \endentry |; my $anon2 = q| \entry{anon2}{unpublished}{} \name{labelname}{1}{}{% {{uniquename=0,hash=f64c29e89ea49402b997956610b58ef6}{YAnony}{Y\bibinitperiod}{}{}{}{}{}{}}% } \name{author}{1}{}{% {{hash=a0bccee4041bc840e14c06e5ba7f083c}{AnonymousY}{A\bibinitperiod}{}{}{}{}{}{}}% } \name{shortauthor}{1}{}{% {{uniquename=0,hash=f64c29e89ea49402b997956610b58ef6}{YAnony}{Y\bibinitperiod}{}{}{}{}{}{}}% } \strng{namehash}{f64c29e89ea49402b997956610b58ef6} \strng{fullhash}{a0bccee4041bc840e14c06e5ba7f083c} \field{labelalpha}{YAn39} \field{sortinit}{A} \field{labeltitle}{Shorttitle} \true{singletitle} \field{hyphenation}{USenglish} \field{note}{anon2} \field{shorttitle}{Shorttitle} \field{title}{Title2} \field{year}{1839} \field{pages}{1176\bibrangedash 1276} \keyw{arc} \endentry |; my $url1 = q| \entry{url1}{misc}{} \name{labelname}{1}{}{% {{uniquename=0,hash=b2106a3dda6c5a4879a0cab37e9cca55}{Alias}{A\bibinitperiod}{Alan}{A\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=b2106a3dda6c5a4879a0cab37e9cca55}{Alias}{A\bibinitperiod}{Alan}{A\bibinitperiod}{}{}{}{}}% } \strng{namehash}{b2106a3dda6c5a4879a0cab37e9cca55} \strng{fullhash}{b2106a3dda6c5a4879a0cab37e9cca55} \field{labelalpha}{Ali05} \field{sortinit}{A} \field{extraalpha}{4} \field{year}{2005} \verb{url} \verb http://www.something.com/q=%C3%A1%C3%A9%C3%A1%C5%A0 \endverb \endentry |; my $list1 = q| \entry{list1}{book}{} \true{morelocation} \list{location}{2}{% {AAA}% {BBB}% } \field{sortinit}{0} \endentry |; my $Worman_N = [ 'Worman_N' ] ; my $Gennep = [ 'v_Gennep_A', 'v_Gennep_J' ] ; is( $out->get_output_entry('t1', $main), $t1, 'bbl entry with maths in title 1' ) ; is( $bibentries->entry('shore')->get_field('month'), '03', 'default bib month macros' ) ; ok( $bibentries->entry('t1')->has_keyword('primary'), 'Keywords test - 1' ) ; ok( $bibentries->entry('t1')->has_keyword('something'), 'Keywords test - 2' ) ; ok( $bibentries->entry('t1')->has_keyword('somethingelse'), 'Keywords test - 3' ) ; is( $out->get_output_entry('t2', $main), $t2, 'bbl entry with maths in title 2' ) ; is_deeply( Biber::Config->_get_uniquename('Worman_N', 'global'), $Worman_N, 'uniquename count 1') ; is_deeply( Biber::Config->_get_uniquename('vanGennep', 'global'), $Gennep, 'uniquename count 2') ; is( $out->get_output_entry('murray', $main), $murray1, 'bbl with > maxcitenames' ) ; is( $out->get_output_entry('missing1', $main), " \\missing{missing1}\n", 'missing citekey 1' ) ; is( $out->get_output_entry('missing2', $main), " \\missing{missing2}\n", 'missing citekey 2' ) ; Biber::Config->setblxoption('alphaothers', ''); Biber::Config->setblxoption('sortalphaothers', ''); # Have to do a citekey deletion as we are not re-reading the .bcf which would do it for us # Otherwise, we have citekeys and allkeys which confuses fetch_data() $section->del_citekeys; $section->bibentries->del_entries; $section->del_everykeys; Biber::Input::file::bibtex->init_cache; $biber->prepare ; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $out = $biber->get_output_obj; is( $out->get_output_entry('murray', $main), $murray2, 'bbl with > maxcitenames, empty alphaothers' ) ; # Make sure namehash and fullhash are seperately generated is( $out->get_output_entry('anon1', $main), $anon1, 'namehash/fullhash 1' ) ; is( $out->get_output_entry('anon2', $main), $anon2, 'namehash/fullhash 2' ) ; # Testing of user field map ignores ok(is_undef($bibentries->entry('i1')->get_field('abstract')), 'map 1' ); is($bibentries->entry('i1')->get_field('userd'), 'test', 'map 2' ); ok(is_undef($bibentries->entry('i2')->get_field('userb')), 'map 3' ); is(NFC($bibentries->entry('i2')->get_field('usere')), 'a Štring', 'map 4' ); # Testing of user field map match/replace is($biber->_liststring('i1', 'listb'), 'REPlacedte!early', 'map 5'); is($biber->_liststring('i1', 'institution'), 'REPlaCEDte!early', 'map 6'); # Testing of pseudo-field "entrykey" handling is($bibentries->entry('i1')->get_field('note'), 'i1', 'map 3' ); # Checking deletion of alsosets with value BMAP_NULL ok(is_undef($bibentries->entry('i2')->get_field('userf')), 'map 7' ); # Checking that the "misc" type-specific mapping to null takes precedence over global userb->userc ok(is_undef($bibentries->entry('i2')->get_field('userc')), 'map 8' ); # Make sure visibility doesn't exceed number of names. is($bibentries->entry('i2')->get_field($bibentries->entry('i2')->get_labelname_info->{field})->get_visible_bib, '3', 'bib visibility - 1'); # Testing per_type and per_entry max/min* so reset globals to defaults Biber::Config->setblxoption('uniquelist', 0); Biber::Config->setblxoption('maxcitenames', 3); Biber::Config->setblxoption('mincitenames', 1); Biber::Config->setblxoption('maxitems', 3); Biber::Config->setblxoption('minitems', 1); Biber::Config->setblxoption('maxbibnames', 3); Biber::Config->setblxoption('minbibnames', 1); Biber::Config->setblxoption('maxalphanames', 3); Biber::Config->setblxoption('minalphanames', 1); Biber::Config->setblxoption('maxcitenames', 1, 'PER_TYPE', 'misc'); Biber::Config->setblxoption('maxbibnames', 2, 'PER_TYPE', 'unpublished'); Biber::Config->setblxoption('minbibnames', 2, 'PER_TYPE', 'unpublished'); # maxalphanames is set on tmn2 entry Biber::Config->setblxoption('minalphanames', 2, 'PER_TYPE', 'book'); # minitems is set on tmn3 entry Biber::Config->setblxoption('maxitems', 2, 'PER_TYPE', 'unpublished'); # Have to do a citekey deletion as we are not re-reading the .bcf which would do it for us # Otherwise, we have citekeys and allkeys which confuses fetch_data() $section->del_citekeys; $section->bibentries->del_entries; $section->del_everykeys; Biber::Input::file::bibtex->init_cache; $biber->prepare; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); is($bibentries->entry('tmn1')->get_field($bibentries->entry('tmn1')->get_labelname_info->{field})->get_visible_cite, '1', 'per_type maxcitenames - 1'); is($bibentries->entry('tmn2')->get_field($bibentries->entry('tmn2')->get_labelname_info->{field})->get_visible_cite, '3', 'per_type maxcitenames - 2'); is($bibentries->entry('tmn3')->get_field($bibentries->entry('tmn3')->get_labelname_info->{field})->get_visible_bib, '2', 'per_type bibnames - 3'); is($bibentries->entry('tmn4')->get_field($bibentries->entry('tmn4')->get_labelname_info->{field})->get_visible_bib, '3', 'per_type bibnames - 4'); is($bibentries->entry('tmn1')->get_field($bibentries->entry('tmn1')->get_labelname_info->{field})->get_visible_alpha, '3', 'per_type/entry alphanames - 1'); is($bibentries->entry('tmn2')->get_field($bibentries->entry('tmn2')->get_labelname_info->{field})->get_visible_alpha, '2', 'per_type/entry alphanames - 2'); is($biber->_liststring('tmn1', 'institution'), 'A!B!C', 'per_type/entry items - 1'); is($biber->_liststring('tmn3', 'institution'), "A!B\x{10FFFD}", 'per_type/entry items - 2'); # Citekey alias testing is($section->get_citekey_alias('alias3'), 'alias1', 'Citekey aliases - 1'); ok(is_undef($section->get_citekey_alias('alias2')), 'Citekey aliases - 2'); is($section->get_citekey_alias('alias4'), 'alias2', 'Citekey aliases - 3'); # primary key 'alias5' is not cited but should be added anyway as cited alias 'alias6' needs it is($section->get_citekey_alias('alias6'), 'alias5', 'Citekey aliases - 4'); ok($bibentries->entry('alias5'), 'Citekey aliases - 5'); # URL encoding testing is($bibentries->entry('url1')->get_field('url'), 'http://www.something.com/q=%C3%A1%C3%A9%C3%A1%C5%A0', 'URL encoding - 1'); is($bibentries->entry('url2')->get_field('url'), 'http://www.something.com/q=one%20two', 'URL encoding - 2'); is($out->get_output_entry('url1', $main), $url1, 'URL encoding - 3' ) ; # map_final testing with map_field_set is($bibentries->entry('ol1')->get_field('note'), 'A note', 'map_final - 1'); is($bibentries->entry('ol1')->get_field('title'), 'Online1', 'map_final - 2'); # Test for tricky pages field is_deeply($bibentries->entry('pages1')->get_field('pages'),[[23, 24]], 'pages - 1'); is_deeply($bibentries->entry('pages2')->get_field('pages'),[[23, undef]], 'pages - 2'); is_deeply($bibentries->entry('pages3')->get_field('pages'), [['I-II', 'III-IV']], 'pages - 3'); is_deeply($bibentries->entry('pages4')->get_field('pages'), [[3,5]], 'pages - 4'); is_deeply($bibentries->entry('pages5')->get_field('pages'), [[42, '']], 'pages - 5'); is_deeply($bibentries->entry('pages6')->get_field('pages'), [['\bibstring{number} 42', undef]], 'pages - 6'); is_deeply($bibentries->entry('pages7')->get_field('pages'), [['\bibstring{number} 42', undef], [3,6], ['I-II',5 ]], 'pages - 7'); # Test for map levels, the user map makes this CUSTOMC and then style map makes it CUSTOMA is($bibentries->entry('us1')->get_field('entrytype'), 'customa', 'Map levels - 1'); # Test for "others" in lists is( $out->get_output_entry('list1', $main), $list1, 'Entry with others list' ) ; biblatex-biber-1.8/t/biblatexml.t000555000000000000 1010612230324176 16265 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 3; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('biblatexml.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section = $biber->sections->get_section(0); my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); my $bibentries = $section->bibentries; my $l1 = q| \entry{bltx1}{book}{} \true{morelabelname} \name{labelname}{3}{}{% {{hash=7b4da3df896da456361ae44dc651770a}{Булгаков}{Б\bibinitperiod}{Павел\bibnamedelima Георгиевич}{П\bibinitperiod\bibinitdelim Г\bibinitperiod}{}{}{}{}}% {{hash=ee55ff3b0e4268cfb193143e86c283a9}{Розенфельд}{Р\bibinitperiod}{Борис-ZZ\bibnamedelima Aбрамович}{Б\bibinithyphendelim Z\bibinitperiod\bibinitdelim A\bibinitperiod}{Билл}{Б\bibinitperiod}{}{}{}{}}% {{hash=e708d5a31534e937578abf161c867a25}{Aхмедов}{A\bibinitperiod}{Ашраф\bibnamedelima Ахмедович}{А\bibinitperiod\bibinitdelim А\bibinitperiod}{}{}{}{}}% } \true{moreauthor} \name{author}{3}{}{% {{hash=7b4da3df896da456361ae44dc651770a}{Булгаков}{Б\bibinitperiod}{Павел\bibnamedelima Георгиевич}{П\bibinitperiod\bibinitdelim Г\bibinitperiod}{}{}{}{}}% {{hash=ee55ff3b0e4268cfb193143e86c283a9}{Розенфельд}{Р\bibinitperiod}{Борис-ZZ\bibnamedelima Aбрамович}{Б\bibinithyphendelim Z\bibinitperiod\bibinitdelim A\bibinitperiod}{Билл}{Б\bibinitperiod}{}{}{}{}}% {{hash=e708d5a31534e937578abf161c867a25}{Aхмедов}{A\bibinitperiod}{Ашраф\bibnamedelima Ахмедович}{А\bibinitperiod\bibinitdelim А\bibinitperiod}{}{}{}{}}% } \list{language}{1}{% {Russian}% } \list{location}{1}{% {Москва}% } \list{publisher}{1}{% {Наука}% } \strng{namehash}{80e524d8402a5619e59ea67ea2d937a5} \strng{fullhash}{afcf3a11058ba0a3fc7609c2a29ae6da} \field{sortinit}{Б} \field{labelyear}{1983} \field{datelabelsource}{} \field{labeltitle}{Мухаммад ибн муса ал-Хорезми. Около 783 – около 850} \field{eventday}{16} \field{eventendday}{17} \field{eventendmonth}{05} \field{eventendyear}{1990} \field{eventmonth}{05} \field{eventyear}{1990} \field{origday}{02} \field{origmonth}{04} \field{origyear}{1985} \field{pagetotal}{240} \field{relatedstring}{Somestring} \field{relatedtype}{reprint} \field{series}{Научно-биографическая литература} \field{title}{Мухаммад ибн муса ал-Хорезми. Около 783 – около 850} \field{urlday}{01} \field{urlendyear}{} \field{urlmonth}{07} \field{urlyear}{1991} \field{year}{1983} \endentry |; is($out->get_output_entry('bltx1', $main), $l1, 'BibLaTeXML - 1'); is($section->get_citekey_alias('bltx1a1'), 'bltx1', 'Citekey aliases - 1'); is($section->get_citekey_alias('bltx1a2'), 'bltx1', 'Citekey aliases - 2'); biblatex-biber-1.8/t/set-dynamic.t000555000000000000 1313112230324177 16361 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 7; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile('set-dynamic.bcf'); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); # Now generate the information $biber->prepare; my $section0 = $biber->sections->get_section(0); my $main0 = $biber->sortlists->get_list(0, 'entry', 'nty'); my $sh0 = $biber->sortlists->get_list(0, 'shorthand', 'shorthand'); my $section1 = $biber->sections->get_section(1); my $main1 = $biber->sortlists->get_list(1, 'entry', 'nty'); my $sh1 = $biber->sortlists->get_list(1, 'shorthand', 'shorthand'); my $out = $biber->get_output_obj; my $string1 = q| \entry{DynSet}{set}{} \set{Dynamic1,Dynamic2,Dynamic3} \name{labelname}{1}{}{% {{hash=252caa7921a061ca92087a1a52f15b78}{Dynamism}{D\bibinitperiod}{Derek}{D\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=252caa7921a061ca92087a1a52f15b78}{Dynamism}{D\bibinitperiod}{Derek}{D\bibinitperiod}{}{}{}{}}% } \strng{namehash}{252caa7921a061ca92087a1a52f15b78} \strng{fullhash}{252caa7921a061ca92087a1a52f15b78} \field{sortinit}{0} \field{labelyear}{2002} \field{datelabelsource}{} \field{labeltitle}{Doing Daring Deeds} \field{annotation}{Some Dynamic Note} \field{shorthand}{d1} \field{title}{Doing Daring Deeds} \field{year}{2002} \endentry |; my $string2 = q| \entry{Dynamic1}{book}{} \inset{DynSet} \name{labelname}{1}{}{% {{hash=252caa7921a061ca92087a1a52f15b78}{Dynamism}{D\bibinitperiod}{Derek}{D\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=252caa7921a061ca92087a1a52f15b78}{Dynamism}{D\bibinitperiod}{Derek}{D\bibinitperiod}{}{}{}{}}% } \strng{namehash}{252caa7921a061ca92087a1a52f15b78} \strng{fullhash}{252caa7921a061ca92087a1a52f15b78} \field{sortinit}{0} \field{labeltitle}{Doing Daring Deeds} \field{annotation}{Some Dynamic Note} \field{shorthand}{d1} \field{title}{Doing Daring Deeds} \field{year}{2002} \endentry |; my $string3 = q| \entry{Dynamic2}{book}{} \inset{DynSet} \name{labelname}{1}{}{% {{hash=894a5fe6de820f5dcce84a65581667f4}{Bunting}{B\bibinitperiod}{Brian}{B\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=894a5fe6de820f5dcce84a65581667f4}{Bunting}{B\bibinitperiod}{Brian}{B\bibinitperiod}{}{}{}{}}% } \strng{namehash}{894a5fe6de820f5dcce84a65581667f4} \strng{fullhash}{894a5fe6de820f5dcce84a65581667f4} \field{sortinit}{0} \field{labeltitle}{Beautiful Birthdays} \field{shorthand}{d2} \field{title}{Beautiful Birthdays} \field{year}{2010} \endentry |; my $string4 = q| \entry{Dynamic3}{book}{} \inset{DynSet} \name{labelname}{1}{}{% {{hash=fc3cc97631ceaecdde2aee6cc60ab42b}{Regardless}{R\bibinitperiod}{Roger}{R\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=fc3cc97631ceaecdde2aee6cc60ab42b}{Regardless}{R\bibinitperiod}{Roger}{R\bibinitperiod}{}{}{}{}}% } \strng{namehash}{fc3cc97631ceaecdde2aee6cc60ab42b} \strng{fullhash}{fc3cc97631ceaecdde2aee6cc60ab42b} \field{sortinit}{0} \field{labeltitle}{Reckless Ravishings} \field{shorthand}{d3} \field{title}{Reckless Ravishings} \field{year}{2000} \endentry |; # Labelyear is now here as skiplab is not set for this entry when cited in section # without citation of a set it is a member of my $string5 = q| \entry{Dynamic3}{book}{} \name{labelname}{1}{}{% {{hash=fc3cc97631ceaecdde2aee6cc60ab42b}{Regardless}{R\bibinitperiod}{Roger}{R\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{hash=fc3cc97631ceaecdde2aee6cc60ab42b}{Regardless}{R\bibinitperiod}{Roger}{R\bibinitperiod}{}{}{}{}}% } \strng{namehash}{fc3cc97631ceaecdde2aee6cc60ab42b} \strng{fullhash}{fc3cc97631ceaecdde2aee6cc60ab42b} \field{sortinit}{0} \field{labelyear}{2000} \field{datelabelsource}{} \field{labeltitle}{Reckless Ravishings} \field{shorthand}{d3} \field{title}{Reckless Ravishings} \field{year}{2000} \endentry |; is($out->get_output_entry('DynSet', $main0), $string1, 'Dynamic set test 1'); is($out->get_output_entry('Dynamic1', $main0), $string2, 'Dynamic set test 2'); is($out->get_output_entry('Dynamic2', $main0), $string3, 'Dynamic set test 3'); is($out->get_output_entry('Dynamic3', $main0), $string4, 'Dynamic set test 4'); is($out->get_output_entry('Dynamic3', $main0, 1), $string5, 'Dynamic set test 5'); is_deeply([$sh0->get_keys], ['DynSet'], 'Dynamic set skiplos 1'); is_deeply([$sh1->get_keys], ['Dynamic3'], 'Dynamic set skiplos 2'); biblatex-biber-1.8/t/labelname.t000555000000000000 444212230324176 16050 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 4; use Biber; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); Biber::Config->setoption('fastsort', 1); Biber::Config->setoption('sortlocale', 'C'); $biber->parse_ctrlfile("general1.bcf"); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biblatex options Biber::Config->setblxoption('labelnamespec', [ {content => 'shortauthor'}, {content => 'author'}, {content => 'shorteditor'}, {content => 'editor'}, {content => 'translator'}]); Biber::Config->setblxoption('labelnamespec', [ {content => 'editor'}, {content => 'translator'}], 'PER_TYPE', 'book'); Biber::Config->setblxoption('labelnamespec', [ {content => 'namea'}, {content => 'author' }], 'PER_TYPE', 'misc'); # Now generate the information $biber->prepare; my $bibentries = $biber->sections->get_section(0)->bibentries; is($bibentries->entry('angenendtsa')->get_labelname_info->{field}, 'shortauthor', 'global shortauthor' ); is($bibentries->entry('stdmodel')->get_labelname_info->{field}, 'author', 'global author' ); is($bibentries->entry('aristotle:anima')->get_labelname_info->{field}, 'editor', 'type-specific editor' ); is($bibentries->entry('lne1')->get_labelname_info->{field}, 'namea', 'type-specific exotic name' ); biblatex-biber-1.8/t/bibtex-forms.t000555000000000000 1302712230324176 16550 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 17; use Biber; use Biber::Utils; use Biber::Output::bbl; use Log::Log4perl; chdir("t/tdata"); # Set up Biber object my $biber = Biber->new(noconf => 1); my $LEVEL = 'ERROR'; my $l4pconf = qq| log4perl.category.main = $LEVEL, Screen log4perl.category.screen = $LEVEL, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LEVEL log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; Log::Log4perl->init(\$l4pconf); $biber->parse_ctrlfile("bibtex-forms.bcf"); $biber->set_output_obj(Biber::Output::bbl->new()); # Options - we could set these in the control file but it's nice to see what we're # relying on here for tests # Biber options Biber::Config->setoption('sortlocale', 'C'); Biber::Config->setoption('fastsort', 1); # Now generate the information $biber->prepare; my $out = $biber->get_output_obj; my $section = $biber->sections->get_section(0); my $bibentries = $section->bibentries; my $main = $biber->sortlists->get_list(0, 'entry', 'nty'); is($bibentries->entry('forms1')->get_field('title'), 'Мухаммад ибн муса ал-Хорезми. Около 783 – около 850', 'forms - 1'); is($bibentries->entry('forms1')->get_field('title', 'original'), 'Мухаммад ибн муса ал-Хорезми. Около 783 – около 850', 'forms - 2'); is($bibentries->entry('forms1')->get_field('title', 'romanised'), 'Mukhammad al-Khorezmi. Okolo 783 – okolo 850', 'forms - 3'); is($bibentries->entry('forms1')->get_field('title', 'translated'), 'Mukhammad al-Khorezmi. Ca. 783 – ca. 850', 'forms - 4'); is($bibentries->entry('forms1')->get_field('publisher', 'original')->[0], 'Наука', 'forms - 5'); is($bibentries->entry('forms1')->get_field('author')->nth_name(2)->get_firstname, 'Борис', 'forms - 6'); # global labelname form is($bibentries->entry('forms1')->get_field('labelname')->nth_name(2)->get_firstname, 'Борис', 'labelname - 1'); # per-type labelname form is($bibentries->entry('forms2')->get_field('labelname')->nth_name(1)->get_firstname, 'Boris', 'labelname - 2'); # per-entry labelname form is($bibentries->entry('forms3')->get_field('labelname')->nth_name(1)->get_firstname, 'Борис', 'labelname - 3'); # global labeltitle form is($bibentries->entry('forms1')->get_field('labeltitle'), 'Мухаммад ибн муса ал-Хорезми. Около 783 – около 850', 'labeltitle - 1'); # per-type labeltitle form is($bibentries->entry('forms2')->get_field('labeltitle'), 'Mukhammad al-Khorezmi. Okolo 783 – okolo 850', 'labeltitle - 2'); # per-entry labeltitle form is($bibentries->entry('forms3')->get_field('labeltitle'), 'Mukhammad al-Khorezmi. Ca. 783 – ca. 850', 'labeltitle - 3'); my $S = [ [ {}, {'author' => {'form' => 'uniform'}}, {'author' => {}}, ], [ {}, {'title' => {'form' => 'translated', 'lang' => 'lang1'}}, {'title' => {'form' => 'translated', 'lang' => 'lang2'}}, {'title' => {}} ], [ {}, {'year' => {}}, ], ]; $main->set_sortscheme($S); $biber->set_output_obj(Biber::Output::bbl->new()); $biber->prepare; $section = $biber->sections->get_section(0); is_deeply([$main->get_keys], ['forms5', 'forms4', 'forms6', 'forms3', 'forms1', 'forms2'], 'Forms sorting - 1'); # reset options and regenerate information Biber::Config->setblxoption('labelalphatemplate', { labelelement => [ { labelpart => [ { content => "author", form => "uniform", substring_width => "3", substring_side => "left" }, ], order => 1, }, { labelpart => [ { content => "title", form => "translated", lang => "lang1", substring_width => "3", substring_side => "left" }, { content => "title", substring_width => "3", substring_side => "left" }, ], order => 2, }, ], type => "global", }); foreach my $k ($section->get_citekeys) { $bibentries->entry($k)->del_field('sortlabelalpha'); $bibentries->entry($k)->del_field('labelalpha'); $main->set_extraalphadata_for_key($k, undef); } $biber->prepare; $section = $biber->sections->get_section(0); $main = $biber->sortlists->get_list(0, 'entry', 'nty'); $bibentries = $section->bibentries; is($bibentries->entry('forms1')->get_field('sortlabelalpha'), 'BulRosМух', 'labelalpha forms - 1'); is($bibentries->entry('forms4')->get_field('sortlabelalpha'), 'F t', 'labelalpha forms - 2'); is($bibentries->entry('forms5')->get_field('sortlabelalpha'), 'A t', 'labelalpha forms - 3'); is($bibentries->entry('forms6')->get_field('sortlabelalpha'), 'Z t', 'labelalpha forms - 4'); biblatex-biber-1.8/t/bcfvalidation.t000555000000000000 132512230324175 16731 0ustar00rootroot000000000000# -*- cperl -*- use strict; use warnings; use utf8; no warnings 'utf8'; use Test::More tests => 44; use XML::LibXML; use Biber; chdir('t'); # Validate all .bcfs used in tests # Set up schema my $CFxmlschema = XML::LibXML::RelaxNG->new(location => '../data/schemata/bcf.rng'); foreach my $bcf () { # Set up XML parser my $CFxmlparser = XML::LibXML->new(); # basic parse and XInclude processing my $CFxp = $CFxmlparser->parse_file($bcf); # XPath context my $CFxpc = XML::LibXML::XPathContext->new($CFxp); $CFxpc->registerNs('bcf', 'https://sourceforge.net/projects/biblatex'); # Validate against schema. Dies if it fails. $CFxmlschema->validate($CFxp); is($@, '', "Validation of $bcf"); } biblatex-biber-1.8/t/tdata000755000000000000 012230324177 14675 5ustar00rootroot000000000000biblatex-biber-1.8/t/tdata/encoding1.bcf000444000000000000 26256112230324177 17431 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 1 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender encoding1.bib testŠ shorthand biblatex-biber-1.8/t/tdata/sections3.bib000444000000000000 120512230324175 17416 0ustar00rootroot000000000000@STRING{STRING1 = {value2}} @BOOK{sect4, SHORTHAND = {DDDD}, AUTHOR = {Derek Ditherington and David Dumpton}, TITLE = {Dangerous Dames}, SUBTITLE = {Don't Dally Dude!}, PUBLISHER = {Dright and Drought Press}, LOCATION = {Dunbar}, YEAR = {2003}, NOTE = STRING1 } @BOOK{sect5, SHORTHAND = {EE}, SORTKEY = {aaaaaaa}, AUTHOR = {Edward E. Ethoxon}, TITLE = {Eating Evil Enemies}, PUBLISHER = {Ethical Encouragement Press}, LOCATION = {Edinburgh}, YEAR = {2007}, } biblatex-biber-1.8/t/tdata/sections4.bib000444000000000000 104412230324177 17422 0ustar00rootroot000000000000@BOOK{sect6, SHORTHAND = {MMMM}, AUTHOR = {Michael Mumford and Millie Mutherington}, TITLE = {Malodourous Muffins}, PUBLISHER = {Ming and Mink Press}, LOCATION = {Manchester}, YEAR = {2003}, } @PREAMBLE{"String for Preamble 4"} @BOOK{sect7, SHORTHAND = {PP}, AUTHOR = {Percy Pilkington}, TITLE = {Perhaps Penguins Prance}, PUBLISHER = {Possible Prattle Press}, LOCATION = {Pimlico}, YEAR = {2007}, } biblatex-biber-1.8/t/tdata/encoding6.bcf000444000000000000 26255312230324176 17436 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 1 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender encoding6.bib * shorthand biblatex-biber-1.8/t/tdata/extratitle.bib000444000000000000 167612230324176 17706 0ustar00rootroot000000000000@BOOK{L1, AUTHOR = {John Doe}, TITLE = {Title 1}, YEAR = {1995}, } @BOOK{L2, AUTHOR = {John Doe}, TITLE = {Title 1}, YEAR = {1996}, } @BOOK{L3, TITLE = {Title 2}, YEAR = {1995}, } @BOOK{L4, TITLE = {Title 2}, YEAR = {1995}, } @BOOK{L5, TITLE = {Title 1}, YEAR = {1995}, } @BOOK{L6, SHORTTITLE = {Title A}, TITLE = {Title 3}, YEAR = {1995}, } @BOOK{L7, TITLE = {Title A}, YEAR = {1995}, } @BOOK{L8, AUTHOR = {Billy Brown}, TITLE = {Title A}, YEAR = {1934} } @BOOK{L9, AUTHOR = {Billy Brown}, TITLE = {Title B}, YEAR = {1932} } @BOOK{L10, AUTHOR = {Clive Cautious}, TITLE = {Title A}, YEAR = {1946} } @BOOK{L11, TITLE = {Titular Titilation}, YEAR = {1946} } @BOOK{L12, YEAR = {1943} } biblatex-biber-1.8/t/tdata/sort-case.bib000444000000000000 45612230324177 17375 0ustar00rootroot000000000000% Test of U::C case sensitivity and case ordering @BOOK{CS1, AUTHOR = {Albert, Edwin}, TITLE = {TITLE} } @BOOK{CS2, AUTHOR = {albert, Edwin}, TITLE = {title} } @BOOK{CS3, AUTHOR = {Albert, edwin}, TITLE = {The title} } biblatex-biber-1.8/t/tdata/dm-dateformats.bcf000444000000000000 25141112230324177 20461 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 1 useprefix 0 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey labelalpha sortname author editor translator sorttitle title sortyear year volume 0000 sorttitle title article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype reprinttitle shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language month note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location month note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location month note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language month note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon month note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon month note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location month note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location month note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location month note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title date eventdate origdate urldate gender dm-dateformats.bib L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12 L13 L14 L15 L16 L17 shorthand biblatex-biber-1.8/t/tdata/uniqueness1.bcf000444000000000000 26263512230324176 20043 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 1 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 1 uniquename 2 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort mm sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender uniqueness1.bib * shorthand biblatex-biber-1.8/t/tdata/full.bib000444000000000000 117412230324176 16454 0ustar00rootroot000000000000@BOOK{F1, SHORTHAND = {\emph{A}}, SORTSHORTHAND = {A}, AUTHOR = {John Doe}, TITLE = {The Fullness of Times}, YEAR = {1995}, } % Duplicate key. Should be reported via a warning @MISC{F1, AUTHOR = {Frank Frill}, TITLE = {Dresses for Gentlemen}, YEAR = {1997}, } % Mismatched cased key. Should be reported via a warning @BOOK{f1, AUTHOR = {Someone Else}, TITLE = {The Case of the Duplicitous Duplicate}, YEAR = {1996}, } @MISC{c1, AUTHOR = {Benny Balgreen}, TITLE = {Names We Invent}, YEAR = {1900} }biblatex-biber-1.8/t/tdata/crossrefs.bcf000444000000000000 25402412230324175 17564 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 0 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender crossrefs.bib cr1 cr2 cr3 cr4 cr6 cr7 cr8 crt xr1 xr2 xr3 xr4 xrt mxr mcr ccr1 ccr2 ccr3 ccr4 circ1 circ2 circ3 r1 crossrefs.bib cr5 shorthand shorthand biblatex-biber-1.8/t/tdata/bibtex-forms.bib000444000000000000 446112230324176 20115 0ustar00rootroot000000000000@BOOK{forms1, AUTHOR = {Булгаков, Павел and Розенфельд, Борис}, AUTHOR_uniform = {Bulgakov, Pavel and Rosenfeld, Boris}, TITLE_original = {Мухаммад ибн муса ал-Хорезми. Около 783 – около 850}, TITLE_romanised = {Mukhammad al-Khorezmi. Okolo 783 – okolo 850}, TITLE_translated = {Mukhammad al-Khorezmi. Ca. 783 – ca. 850}, LOCATION_original = {Москва}, LOCATION_romanised = {Moskva}, LOCATION_uniform = {Moscow}, PUBLISHER = {Наука}, PUBLISHER_romanised = {Nauka}, PUBLISHER_translated = {Science}, INSTITUTION = {University of Life}, ADDRESS = {Ivory Towers}, DATE = {2002-10-01}, } @MISC{forms2, AUTHOR = {Булгаков, Павел and Розенфельд, Борис}, AUTHOR_uniform = {Bulgakov, Pavel and Rosenfeld, Boris}, TRANSLATOR = {Розенфельд, Борис}, TRANSLATOR_uniform = {Rosenfeld, Boris}, TITLE_original = {Мухаммад ибн муса ал-Хорезми. Около 783 – около 850}, TITLE_romanised = {Mukhammad al-Khorezmi. Okolo 783 – okolo 850}, TITLE_translated = {Mukhammad al-Khorezmi. Ca. 783 – ca. 850}, DATE = {2003-10-01}, } @BOOK{forms3, OPTIONS = {labelnamefield=translator,labelnameform=original,labeltitlefield=title,labeltitleform=translated}, AUTHOR = {Булгаков, Павел and Розенфельд, Борис}, AUTHOR_uniform = {Bulgakov, Pavel and Rosenfeld, Boris}, TRANSLATOR = {Розенфельд, Борис}, TRANSLATOR_uniform = {Rosenfeld, Boris}, TITLE_original = {Мухаммад ибн муса ал-Хорезми. Около 783 – около 850}, TITLE_romanised = {Mukhammad al-Khorezmi. Okolo 783 – okolo 850}, TITLE_translated = {Mukhammad al-Khorezmi. Ca. 783 – ca. 850}, DATE = {2001-10-01}, } @BOOK{forms4, TITLE = {A title}, TITLE_translated_lang1 = {F title}, TITLE_translated_lang2 = {C title} } @BOOK{forms5, TITLE = {A title}, TITLE_translated_lang2 = {C title} } @BOOK{forms6, TITLE = {Z title}, } biblatex-biber-1.8/t/tdata/sort.bib000444000000000000 175012230324175 16500 0ustar00rootroot000000000000@BOOK{L1, SHORTHAND = {\emph{A}}, SORTSHORTHAND = {A}, AUTHOR = {John Doe}, TITLE = {Algorithms For Sorting}, PUBLISHER = {A press}, LOCATION = {Cambridge}, YEAR = {1995}, } @BOOK{L2, SHORTHAND = {B}, AUTHOR = {John Doe}, TITLE = {Sorting Algorithms}, PUBLISHER = {A press}, LOCATION = {Cambridge}, YEAR = {1995}, } @BOOK{L3, SHORTHAND = {C}, AUTHOR = {John Doe}, TITLE = {More and More Algorithms}, PUBLISHER = {A press}, LOCATION = {Cambridge}, YEAR = {1995}, } @BOOK{L4, SHORTHAND = {D}, AUTHOR = {John Doe and others}, TITLE = {Some title about sorting}, PUBLISHER = {Another press}, LOCATION = {Cambridge}, YEAR = {1995}, } @BOOK{L5, SHORTHAND = {E}, AUTHOR = {John Doe and others}, TITLE = {Some other title about sorting}, PUBLISHER = {Another press}, LOCATION = {Cambridge}, YEAR = {1995}, } biblatex-biber-1.8/t/tdata/ris.bcf000444000000000000 26057012230324176 16354 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 88 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers + labelalpha 0 labelnamespec author labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 labelnamespec author editor useprefix 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender ris1.ris test1 test2 shorthand biblatex-biber-1.8/t/tdata/encoding5.bib000444000000000000 21312230324176 17336 0ustar00rootroot000000000000% This is a UTF-8 encoded file @BOOK{test, AUTHOR = {Edward Encalcer}, YEAR = {1999}, TITLE = {à titlé}, PUBLISHER = {A press} } biblatex-biber-1.8/t/tdata/names.bcf000444000000000000 26374112230324177 16666 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 0 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 1 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey labelalpha sortname author editor translator sorttitle title sortyear year volume 0000 sorttitle title article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender names.bib * shorthand biblatex-biber-1.8/t/tdata/encoding2.bib000444000000000000 21712230324175 17336 0ustar00rootroot000000000000% This is a UTF-8 encoded file @BOOK{testŠ, YEAR = {1999}, AUTHOR = {Edward Encalcer}, TITLE = {Šome title}, PUBLISHER = {A press} } biblatex-biber-1.8/t/tdata/sections.bcf000444000000000000 26764712230324176 17422 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort labelalpha sortkey sortname author editor translator sorttitle title sortyear year volume 0000 sorttitle title article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender sections1.bib sections2.bib sect1 sect2 sect3 sections3.bib sect4 sect5 sections4.bib sections1.bib sect1 sect6 sect7 sect3 sectx sections1.bib * sect8 shorthand shorthand shorthand shorthand biblatex-biber-1.8/t/tdata/zoterordfxml.bcf000444000000000000 26657512230324177 20332 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 1 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey labelalpha sortname author editor translator sorttitle title sortyear year volume 0000 sorttitle title article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender zotero.rdf http://0-muse.jhu.edu.pugwash.lib.warwick.ac.uk:80/journals/theory_and_event/v005/5.3ranciere.html urn:isbn:0713990023 item_54 shorthand biblatex-biber-1.8/t/tdata/uniqueness5.bib000444000000000000 300712230324176 17773 0ustar00rootroot000000000000% maxnames=1, minnames=1 % both should be uniquelist=undef as the year disambiguates @ARTICLE{uls1, AUTHOR = {John Smith and Henry Jones}, YEAR = {2000} } @ARTICLE{uls2, AUTHOR = {John Smith and Sam Small}, YEAR = {2001} } % Should be uniquelist = 2 for both as the year is the same @ARTICLE{uls3, AUTHOR = {Henry Helarn and Brian Bonkers}, YEAR = {2000} } @ARTICLE{uls4, AUTHOR = {Henry Helarn and Michael Resin}, YEAR = {2000} } % uls5 and uls6 should all be uniquelist = 2 as same year but uls7 should be undef @ARTICLE{uls5, AUTHOR = {Robert Feld and Ian Ink}, YEAR = {2000} } @ARTICLE{uls6, AUTHOR = {Robert Feld and Brian Belt}, YEAR = {2000} } @ARTICLE{uls7, AUTHOR = {Robert Feld and Stanley Gibbons}, YEAR = {2001} } % maxnames=3, minnames=2 % uls8 and uls9 should all be undef as the year disambiguates @ARTICLE{uls8, AUTHOR = {Patrick Poodle and Robin Vessel and Marvin Eagle and Rupert Trendle}, YEAR = {2000} } @ARTICLE{uls9, AUTHOR = {Patrick Poodle and Robin Vessel and Jeremy Idle and Leigh Loog}, YEAR = {2001} } % uls10 and uls11 should be uniquelist = 3 and uls12 should be undef @ARTICLE{uls10, AUTHOR = {Vogel and Beast and Garble and Rook}, YEAR = {2000} } @ARTICLE{uls11, AUTHOR = {Vogel and Beast and Tremble and Bite}, YEAR = {2000} } @ARTICLE{uls12, AUTHOR = {Vogel and Beast and Acid and Squeeze}, YEAR = {2001} }biblatex-biber-1.8/t/tdata/sets.bib000444000000000000 354612230324177 16476 0ustar00rootroot000000000000@SET{Elias1955, ENTRYSET = {Elias1955aALIAS,Elias1955b}, CROSSREF = {Elias1955a} } % Also test of month hacking - should be forced to "03" by the bibtex driver @ARTICLE{Elias1955a, IDS = {Elias1955aALIAS}, AUTHOR = {Elias, P.}, TITLE = {Predictive coding--I}, JOURNAL = {IRE Transactions on Information Theory}, YEAR = {1955}, VOLUME = {1}, PAGES = {16-24}, NUMBER = {1}, MONTH = {March}, DOI = {10.1109/TIT.1955.1055126}, ENTRYSET = {Elias1955}, ISSN = {0096-1000}, } % Also test of month hacking - should be forced to "03" by the bibtex driver @ARTICLE{Elias1955b, AUTHOR = {Elias, P.}, TITLE = {Predictive coding--II}, JOURNAL = {IRE Transactions on Information Theory}, YEAR = {1955}, VOLUME = {1}, PAGES = {24-33}, NUMBER = {1}, MONTH = {Mar.}, DOI = {10.1109/TIT.1955.1055116}, ENTRYSET = {Elias1955}, ISSN = {0096-1000}, } @SET{Static1, ENTRYSET = {Static2alias, Static3, Static4, missing1}, ANNOTATION = {Some notes} } @BOOK{Static2, IDS = {Somealias, Static2alias}, AUTHOR = {Brian Bumble}, TITLE = {Blessed Brains}, YEAR = {2001}, ANNOTATION = {Some Blessed Note} } @BOOK{Static3, AUTHOR = {Clive Crenellation}, TITLE = {Castles and Crime}, YEAR = {2002} } @BOOK{Static4, AUTHOR = {Derek Dingle}, TITLE = {Dungeons, Dark and Dangerous}, YEAR = {2005} } @BOOK{Dynamic1, AUTHOR = {Derek Dynamism}, TITLE = {Doing Daring Deeds}, YEAR = {2002}, ANNOTATION = {Some Dynamic Note}, SHORTHAND = {d1} } @BOOK{Dynamic2, AUTHOR = {Brian Bunting}, TITLE = {Beautiful Birthdays}, YEAR = {2010}, SHORTHAND = {d2} } @BOOK{Dynamic3, IDS = {Dynamic3alias}, AUTHOR = {Roger Regardless}, TITLE = {Reckless Ravishings}, YEAR = {2000}, SHORTHAND = {d3} } biblatex-biber-1.8/t/tdata/uniqueness2.bib000444000000000000 533012230324176 17771 0ustar00rootroot000000000000@ARTICLE{un8, AUTHOR = {Alan AAA and B. BBB and A. CCC}, } @ARTICLE{un9, AUTHOR = {Anthon AAA and B. BBB and B. CCC and A. DDD}, } @ARTICLE{un10, AUTHOR = {B. DDD}, } @ARTICLE{unapa1, AUTHOR = {Ireys, A. and Chernoff, A. and DeVet, A. and Kim, A.}, } @ARTICLE{unapa2, AUTHOR = {Ireys, A. and Chernoff, A. and Stein, A. and DeVet, A. and Silver, A.}, } @MISC{others1, AUTHOR = {NameA and NameB and others}, YEAR = {2011} } @MISC{others2, AUTHOR = {NameA and NameB and others}, YEAR = {2011} } % Two works by the same author list, should be no uniquelist @BOOK{unall1, AUTHOR = {Name11 and Name22 and Name33 and Name44 and Name55}, TITLE = {Title 1}, YEAR = {2011} } @BOOK{unall2, AUTHOR = {Name11 and Name22 and Name33 and Name44 and Name55}, TITLE = {Title 2}, YEAR = {2011} } % First namelist is subset of second, % maxnames=5 -> ul=undef and ul=6 respectively % maxnames=1 -> ul=5 and ul=6 respectively @BOOK{unall3, AUTHOR = {A111 and A222 and A333 and A444 and A555}, YEAR = {2011} } @BOOK{unall4, AUTHOR = {A111 and A222 and A333 and A444 and A555 and A666}, YEAR = {2011} } % Two lists with same authors, one differing in last place % ul=5 @BOOK{unall5, AUTHOR = {Name1 and Name2 and Name3 and Name4 and Name5}, TITLE = {Title 3}, YEAR = {2010} } % ul=5 @BOOK{unall6, AUTHOR = {Name1 and Name2 and Name3 and Name4 and Name5}, TITLE = {Title 5}, YEAR = {2010} } % ul=5 @BOOK{unall7, AUTHOR = {Name1 and Name2 and Name3 and Name4 and Name6}, TITLE = {Title 3}, YEAR = {2010} } % Two lists with same authors, one differing in being a superset. maxnames/minnames=1 % so the truncations are ambiguous, hence uniquelist is needed. % ul=5 @BOOK{unall8, AUTHOR = {Name1111 and Name2222 and Name3333 and Name4444 and Name5555}, TITLE = {Title 3}, YEAR = {2010} } % ul=5 @BOOK{unall9, AUTHOR = {Name1111 and Name2222 and Name3333 and Name4444 and Name5555}, TITLE = {Title 5}, YEAR = {2010} } % ul=undef (per-entry setting) @BOOK{unall9a, OPTIONS = {uniquelist=0}, AUTHOR = {Name1111 and Name2222 and Name3333 and Name4444 and Name5555}, TITLE = {Title 5}, YEAR = {2010} } % ul=6 @BOOK{unall10, AUTHOR = {Name1111 and Name2222 and Name3333 and Name4444 and Name5555 and Name6666}, TITLE = {Title 5}, YEAR = {2010} } % Testing "et al" counting as a uniquelist position % ul01 = 3 % ul02 = 3 (because it will be "XXX and YYY and ZZZ et al" which disambiguated the list from % "XXX and YYY and ZZZ" @ARTICLE{ul01, AUTHOR = {XXX and YYY and ZZZ}, } @ARTICLE{ul02, AUTHOR = {XXX and YYY and ZZZ and MMM and NNN}, } biblatex-biber-1.8/t/tdata/sort-order.bib000444000000000000 470312230324177 17614 0ustar00rootroot000000000000@ARTICLE{L1, AUTHOR = {Aaron Adamson}, TITLE = {Artificial Advice}, PUBLISHER = {Aardvark Press}, LOCATION = {Arlington}, VOLUME = {4}, YEAR = {1995}, } @ARTICLE{L1A, AUTHOR = {Aaron Adamson}, TITLE = {Anarchic Ambidexstrous Anomalies}, PUBLISHER = {Aardvark Press}, LOCATION = {Arlington}, VOLUME = {40}, YEAR = {1995}, } @ARTICLE{L1B, AUTHOR = {Aaron Adazki}, TITLE = {Average Attitudes Are Awful}, PUBLISHER = {Aardvark Press}, LOCATION = {Arlington}, YEAR = {1984}, } @ARTICLE{L2, AUTHOR = {Brian Britherthwaite}, TITLE = {Best Barnacled Boat Bottoms}, PUBLISHER = {British Bulldog Press}, LOCATION = {Bridlington}, YEAR = {2004}, } @ARTICLE{L3, AUTHOR = {Clive Clumberton}, TITLE = {Clumsy Cultural Caveats}, SUBTITLE = {Counter-cultural Concepts}, PUBLISHER = {Clapp and Clopp Press}, LOCATION = {Cambridge}, YEAR = {1914}, } @BOOK{L4, AUTHOR = {Derek Ditherington and David Dumpton}, TITLE = {Dangerous Dames}, SUBTITLE = {Don't Dally Dude!}, PUBLISHER = {Dright and Drought Press}, LOCATION = {Dunbar}, YEAR = {2003}, } @BOOK{L5, SORTKEY = {aaaaaaa}, AUTHOR = {Edward E. Ethoxon}, TITLE = {Eating Evil Enemies}, PUBLISHER = {Ethical Encouragement Press}, LOCATION = {Edinburgh}, YEAR = {2007}, } @BOOK{L6, AUTHOR = {Richard F. Rank}, TITLE = {Ruminating on Rhubarb}, PUBLISHER = {Red, Raw and Raucous}, LOCATION = {edinburgh}, YEAR = {2011}, } @BOOK{L7, AUTHOR = {Peter Pettigrew}, TITLE = {The Pretending Peanuts Pout}, PUBLISHER = {Nut Press}, LOCATION = {Edinburgh}, YEAR = {2010}, } @BOOK{L8, AUTHOR = {Lawrence Langour}, TITLE = {Why Walnuts Won't}, PUBLISHER = {Nut Press}, LOCATION = {Edinburgh}, YEAR = {2009}, } @BOOK{L9, AUTHOR = {Steven Sensible}, TITLE = {Sorting Sucks Eggs}, PUBLISHER = {Yolk Enterprises}, LOCATION = {London} } biblatex-biber-1.8/t/tdata/sort-uc.bcf000444000000000000 26335412230324176 17156 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 1 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sortyear year sorttitle title volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender sort-uc.bib LS1 LS2 LS3 LS4 LS5 LS6 shorthand shorthand biblatex-biber-1.8/t/tdata/full1.bbl000444000000000000 243312230324175 16536 0ustar00rootroot000000000000% $ biblatex auxiliary file $ % $ biblatex bbl format version 2.3 $ % Do not modify the above lines! % % This is an auxiliary file used by the 'biblatex' package. % This file may safely be deleted. It will be recreated by % biber as required. % \begingroup \makeatletter \@ifundefined{ver@biblatex.sty} {\@latex@error {Missing 'biblatex' package} {The bibliography requires the 'biblatex' package.} \aftergroup\endinput} {} \endgroup \refsection{0} \sortlist{shorthand}{shorthand} \key{F1} \endsortlist \sortlist{entry}{nty} \entry{F1}{book}{} \name{labelname}{1}{}{% {{uniquename=0,hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \name{author}{1}{}{% {{uniquename=0,hash=bd051a2f7a5f377e3a62581b0e0f8577}{Doe}{D\bibinitperiod}{John}{J\bibinitperiod}{}{}{}{}}% } \strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577} \strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577} \field{labelalpha}{\emph{A}} \field{sortinit}{A} \field{labeltitle}{The Fullness of Times} \true{singletitle} \field{shorthand}{\emph{A}} \field{title}{The Fullness of Times} \field{year}{1995} \endentry \endsortlist \missing{C1} \endrefsection \endinput biblatex-biber-1.8/t/tdata/related.bib000444000000000000 262212230324176 17131 0ustar00rootroot000000000000@ARTICLE{key1, IDS = {key1alias}, RELATED = {key2,key3,missing1}, RELATEDTYPE = {reprintas}, AUTHOR = {Author}, TITLE = {Original Title}, JOURNALTITLE = {Journal Title}, VOLUME = {12}, NUMBER = {5}, DATE = {1998}, PAGES = {125--150}, SHORTHAND = {RK1} } @INBOOK{key2, RELATED = {key1alias}, RELATEDTYPE = {reprintof}, RELATEDSTRING = {First}, AUTHOR = {Author}, TITLE = {Reprint Title}, BOOKTITLE = {Booktitle}, LOCATION = {Location}, PUBLISHER = {Publisher}, DATE = {2009}, PAGES = {34--60}, SHORTHAND = {RK2} } @INBOOK{key3, RELATED = {key4}, RELATEDTYPE = {translationof}, AUTHOR = {Author}, TITLE = {Reprint Title}, BOOKTITLE = {Booktitle}, LOCATION = {Location}, PUBLISHER = {Publisher2}, DATE = {2010}, PAGES = {33--57}, SHORTHAND = {RK3} } @INBOOK{key4, AUTHOR = {Author}, TITLE = {Orig Language Title}, BOOKTITLE = {Booktitle}, LOCATION = {Location}, PUBLISHER = {Publisher2}, DATE = {2011}, PAGES = {33--57}, SHORTHAND = {RK4} } @BOOK{c1, RELATED = {c2}, } @BOOK{c2, RELATED = {c3}, } @BOOK{c3, RELATED = {c2}, } biblatex-biber-1.8/t/tdata/xdata.bcf000444000000000000 26305212230324176 16656 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender xdata.bib xdata.bltxml xd1 xd2 xd3 shorthand biblatex-biber-1.8/t/tdata/skips.bcf000444000000000000 26446012230324175 16711 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey labelalpha sortname author editor translator sorttitle title sortyear year volume 0000 sorttitle title article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender skips.bib skip1 skip2 skip3 skip4 seta noseta nosetb nosetc shorthand biblatex-biber-1.8/t/tdata/sections2.bib000444000000000000 104012230324176 17413 0ustar00rootroot000000000000@ARTICLE{sect3, AUTHOR = {Clive Clumberton}, TITLE = {Clumsy Cultural Caveats}, SUBTITLE = {Counter-cultural Concepts}, PUBLISHER = {Clapp and Clopp Press}, LOCATION = {Cambridge}, YEAR = {1914}, } @ARTICLE{sect8, SHORTHAND = {JJ}, AUTHOR = {Jimmy Johnson}, TITLE = {Jovial Jamborees}, PUBLISHER = {Jasper and Jiff}, LOCATION = {Johannesburg}, YEAR = {1938}, } @PREAMBLE{"String for Preamble 3"}biblatex-biber-1.8/t/tdata/set-dynamic.bcf000444000000000000 26173212230324177 17776 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm citeorder article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender sets.bib DynSet sets.bib Dynamic3 shorthand shorthand biblatex-biber-1.8/t/tdata/sortlists.bib000444000000000000 154212230324176 17557 0ustar00rootroot000000000000@ARTICLE{K1, AUTHOR = {Aaron Adamson}, TITLE = {Artificial Advice}, PUBLISHER = {Aardvark Press}, LOCATION = {Arlington}, YEAR = {1995}, VERBA = {String} } @BOOK{K2, AUTHOR = {Brian Bully}, TITLE = {Lucid Lamas}, PUBLISHER = {Aardvark Press}, LOCATION = {Arlington}, YEAR = {1971}, } @PHDTHESIS{K3, ENTRYSUBTYPE = {rubbish}, AUTHOR = {Richard Radiator}, TITLE = {Zenos Things}, LOCATION = {Cambridge}, YEAR = {1953}, } @BOOK{K4, AUTHOR = {Linda Lucid}, TITLE = {Decrepit Delineations}, PUBLISHER = {Stuff and Nonesense Press}, LOCATION = {London}, YEAR = {1999}, KEYWORDS = {key1, key2} } biblatex-biber-1.8/t/tdata/uniqueness3.bib000444000000000000 104412230324176 17770 0ustar00rootroot000000000000@ARTICLE{ey1, AUTHOR = {A. AAA and B. BBB and A. CCC and E. EEE}, YEAR = {1968} } @ARTICLE{ey2, AUTHOR = {A. AAA and B. BBB and A. CCC and D. DDD}, YEAR = {1968} } @ARTICLE{ey3, AUTHOR = {A. MMM and B. NNN}, YEAR = {1968} } @ARTICLE{ey4, AUTHOR = {A. MMM and B. NNN}, YEAR = {1968} } @ARTICLE{ey5, AUTHOR = {Aaa ZZZ and Bbb VVV}, YEAR = {1968} } @ARTICLE{ey6, AUTHOR = {Abb ZZZ and Bbb VVV}, YEAR = {1968} } biblatex-biber-1.8/t/tdata/biblatexml.bltxml000444000000000000 655212230324176 20410 0ustar00rootroot000000000000 bltx1a1 bltx1a2 Павел Георгиевич Булгаков Борис-ZZ Aбрамович Розенфельд Билл Ашраф Ахмедович Aхмедов Pavel G. Bulgakov Boris A. Rozenfeld Bill Ashraf A. Akhmedov Мухаммад ибн муса ал-Хорезми. Около 783 – около 850 Mukhammad al-Khorezmi. Okolo 783 – okolo 850 Mukhammad al-Khorezmi. Ca. 783 – ca. 850 Москва Moskva Moscow Наука Nauka Science Russian Научно-биографическая литература Nauchno-biograficheskaya literatura 1983 1985-04-02 1990-05-16 1990-05-17 1991-07-01 240 biblatex-biber-1.8/t/tdata/options.bcf000444000000000000 26302312230324176 17246 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 88 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers + labelalpha 0 labelnamespec author labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 labelnamespec author editor useprefix 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender options.bib * shorthand biblatex-biber-1.8/t/tdata/uniqueness4.bib000444000000000000 656712230324176 20010 0ustar00rootroot000000000000% Smith and Smith @ARTICLE{us1, AUTHOR = {John Smith and Bert Smith}, YEAR = {1968} } % Reynolds and Plumb @ARTICLE{us2, AUTHOR = {Bill Reynolds and James Plumb}, YEAR = {1932} } % Plumb and Reynolds @ARTICLE{us3, AUTHOR = {Alan Plumb and Trevor Reynolds}, YEAR = {1945} } % Brown and Heretic @ARTICLE{us4, AUTHOR = {Basil Brown and Helen Heretic}, YEAR = {1984} } % Brown @ARTICLE{us5, AUTHOR = {Mary Brown}, YEAR = {1983} } % Prefect, Mangle and Loon @ARTICLE{us6, AUTHOR = {Peter Prefect and Martin Mangle and Leigh Loon}, YEAR = {1982} } % Prefect and Mangle @ARTICLE{us7, AUTHOR = {Russ Prefect and Graham Mangle}, YEAR = {1989} } % Jingle and Irate @ARTICLE{us8, AUTHOR = {Jeremy Jingle and Otto Irate}, YEAR = {1982} } % Jingle and Montle @ARTICLE{us9, AUTHOR = {Kevin Jingle and Barbara Montle}, YEAR = {1989} } % R. Red and G. Green @ARTICLE{us10, AUTHOR = {Richard Red and Graham Green}, YEAR = {1982} } % V. Red and M. Green @ARTICLE{us11, AUTHOR = {Victor Red and Mark Green}, YEAR = {1989} } % Simon Slip and Brass @ARTICLE{us12, AUTHOR = {Simon Slip and Bertie Brass}, YEAR = {1989} } % Steven Slip and Brass @ARTICLE{us13, AUTHOR = {Steven Slip and Bertie Brass}, YEAR = {1989} } % With maxnames/minnames=3, don't disambiguate the names in these lists as due to the "et al", % the lists are different in themselves % With maxnames=2/minnames=1, the lists are "the same" (Gurgle et al) so do disambiguate the % lists. % With maxnames=3/minnames=1, the lists are different (Gurgle et al, Gurgle, Splonk and Remedial) % so don't disambiguate % lists. % Gurgle, Splonk, Remdial et al @ARTICLE{us14, AUTHOR = {Peter Gurgle and Martin Splonk and Leigh Remedial and Trevor Argue}, YEAR = {1989} } % Gurgle, Splonk and Remedial @ARTICLE{us15, AUTHOR = {Alan Gurgle and Michael Splonk and Leigh Remedial}, YEAR = {1989} } % $ul = 3 and 4 @ARTICLE{us16, AUTHOR = {AAA and BBB and CCC}, YEAR = {1902} } @ARTICLE{us17, AUTHOR = {AAA and BBB and CCC and DDD}, YEAR = {1906} } % $ul = 3 and 4 % AAAA won't be disambiguated since the lists are therefore different @ARTICLE{us18, AUTHOR = {a. AAAA and BBBB and CCCC}, YEAR = {1902} } @ARTICLE{us19, AUTHOR = {b. AAAA and BBBB and CCCC and DDDD}, YEAR = {1906} } % @ARTICLE{us20, AUTHOR = {Ulrich Schmitz}, YEAR = {1906} } @ARTICLE{us21, AUTHOR = {Ulrich Schmitz}, YEAR = {1934} } @ARTICLE{us22, AUTHOR = {Brian Cambell and Frank Schmitz}, YEAR = {1936} } @ARTICLE{us23, AUTHOR = {Oliver Oligarch}, YEAR = {1906} } @ARTICLE{us24, AUTHOR = {Otto Oligarch}, YEAR = {1934} } @ARTICLE{us25, AUTHOR = {Ian Ink and Peter Oligarch}, YEAR = {1936} } @ARTICLE{us26, AUTHOR = {Roger Meredith}, YEAR = {1936} } @ARTICLE{us27a, AUTHOR = {Roger Meredith}, YEAR = {1934} } @ARTICLE{us27, AUTHOR = {Alan Meredith}, YEAR = {1936} } @ARTICLE{us28, AUTHOR = {Andrew Meredith}, YEAR = {1936} } @ARTICLE{us29, AUTHOR = {Clive Creation and Peter Patronage}, YEAR = {1936} } @ARTICLE{us29a, AUTHOR = {Clive Creation and Peter Patronage}, YEAR = {1934} } @ARTICLE{us30, AUTHOR = {Liam Creation and Peter Patronage}, YEAR = {1932} } biblatex-biber-1.8/t/tdata/dm-constraints.bib000444000000000000 604312230324177 20460 0ustar00rootroot000000000000% Not a valid type % Valid gender @BADTYPE{c1, AUTHOR = {Clive Constraint}, TITLE = {Limits of Things}, DATE = {2003-10-01}, GENDER = {sm} } % Completely nonexistent field and field (alias) not valid for this type % Testing a field valid for all entrytypes (ABSTRACT) % Testing missing mandatory field @ETA{c2, TITLE = {Limits of Things}, DATE = {2003-10-01}, BADFIELD = {Something}, JOURNAL = {Some journal}, ABSTRACT = {Some text} } % Datatype constraint - wrong month format % Randomly named field % Invalid gender @ETB{c3, AUTHOR = {Clive Constraint}, TITLE = {Limits of Things}, JOURNAL = {Some journal}, YEAR = {2003}, MONTH = {WRONG FORMAT}, FIELD1 = {7}, GENDER = {zz} } % Datatype constraint - wrong month format (range) % Randomly named field with custom range (integer) @ETB{c4, AUTHOR = {Clive Constraint}, TITLE = {Limits of Things}, JOURNAL = {Some journal}, YEAR = {2003}, MONTH = {14}, FIELD1 = {4} } % Conditional checks % XOR mandatory check - DATE and YEAR are both defined % all 2,3,4 -> none 5,6 (fail) @ETB{c5, AUTHOR = {Clive Constraint}, TITLE = {Limits of Things}, JOURNAL = {Some journal}, DATE = {2004-01-02}, YEAR = {2003}, FIELD2 = {a}, FIELD3 = {a}, FIELD4 = {a}, FIELD5 = {a}, FIELD6 = {a}, } % Conditional checks % all 2,3,4 -> none 5,6 (pass) (because antecedent is not satisfied) % all 1,2 -> one 7,8 (fail) % all 5,6 -> all 9,10 (fail) @ETB{c6, AUTHOR = {Clive Constraint}, TITLE = {Limits of Things}, JOURNAL = {Some journal}, YEAR = {2003}, FIELD1 = {8}, FIELD2 = {a}, FIELD3 = {a}, FIELD5 = {a}, FIELD6 = {a}, FIELD9 = {a} } % Conditional checks % one 2,3 -> none 4 (pass) % one 5,6 -> none 7 (fail) % one 2,3 -> all 8,9 (pass) % one 10,11 -> one 5 (pass) % Mandatory OR check - one of FIELDA or FIELDB must be present (fail) @ETC{c7, AUTHOR = {Clive Constraint}, TITLE = {Limits of Things}, JOURNAL = {Some journal}, YEAR = {2003}, FIELD2 = {a}, FIELD3 = {a}, FIELD5 = {a}, FIELD7 = {a}, FIELD8 = {a}, FIELD9 = {a}, FIELD11 = {a}, } % Conditional checks % none 2,3 -> none 4 (fail) % none 7 -> none 5 (pass) as antecedent is false % none 8,9 -> one 10,11 (fail) % none 6 -> all 12,13 (fail) % Mandatory OR check - one of FIELDA or FIELDB must be present % (both are, testing different from XOR) (pass) @ETD{c8, AUTHOR = {Clive Constraint}, TITLE = {Limits of Things}, JOURNAL = {Some journal}, YEAR = {2003}, FIELD4 = {a}, FIELD5 = {a}, FIELD7 = {a}, FIELD12 = {a}, FIELDA = {a}, FIELDB = {a}, } % ISBN and ISSN checks @MISC{c9, AUTHOR = {Fred Flummox}, ISBN = {90-70002-34-5}, ISSN = {0317-8471}, } @MISC{c10, AUTHOR = {Fred Flummox}, ISBN = {90-7002-34-5}, ISSN = {0317-8470}, } biblatex-biber-1.8/t/tdata/labelalpha.bib000444000000000000 1561112230324176 17620 0ustar00rootroot000000000000@BOOK{L1, AUTHOR = {John Doe}, TITLE = {Title 1}, PUBLISHER = {Oxford}, YEAR = {1995}, } @BOOK{L2, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, YEAR = {1995}, } @BOOK{L3, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 3}, PUBLISHER = {Oxford}, YEAR = {1995}, } @BOOK{L4, AUTHOR = {John Doe and Albert Abrahams and Ernie Edwards}, TITLE = {Title 4}, PUBLISHER = {Oxford}, YEAR = {1995}, } @BOOK{L5, AUTHOR = {John Doe and Albert Abrahams and Ernie Edwards}, TITLE = {Title 5}, PUBLISHER = {Oxford}, YEAR = {1995}, } @BOOK{L6, AUTHOR = {John Doe and Simon Smith and Ernie Edwards}, TITLE = {Title 6}, PUBLISHER = {Oxford}, YEAR = {1995}, } @BOOK{L7, AUTHOR = {John Doe and Simon Smith and James Jones}, TITLE = {Title 7}, PUBLISHER = {Oxford}, YEAR = {1995}, } @BOOK{L8, AUTHOR = {Bill Shakespeare}, TITLE = {Works}, PUBLISHER = {Oxford}, DATE = {1985/1992}, } % For these two, the shorthand should prevent extraalpha being set for them as % they are disambiguated by their shorthands and labelalpha is true @BOOK{L9, SHORTHAND = {SS1}, AUTHOR = {Sam Smiley}, TITLE = {Works}, PUBLISHER = {Oxford}, YEAR = {1922}, } @BOOK{L10, SHORTHAND = {SS2}, AUTHOR = {Sam Smiley}, TITLE = {UnWorks}, PUBLISHER = {Oxford}, YEAR = {1922}, } % prefix in label @BOOK{L11, AUTHOR = {Carl von Rancour}, TITLE = {UnWorks}, YEAR = {1922}, } @BOOK{L12, AUTHOR = {Carl von Rancour and Russel von Bile}, TITLE = {UnWorks}, ORIGDATE = {1922-03-21}, } % per-type labeltemplate @MISC{L13, AUTHOR = {Carl von Rancour and Russel von Bile}, TITLE = {UnVorks}, YEAR = {1987}, } @MISC{L14, LABEL = {Alabel}, AUTHOR = {Carl von Rancour and Russel von Bile}, TITLE = {UnWorks}, YEAR = {1989}, } % disambiguation of labelparts @UNPUBLISHED{L15, AUTHOR = {Alan Acckerman and Bert Briff and Clive Climben}, TITLE = {Title}, YEAR = {1989}, } @BOOKLET{L16, AUTHOR = {Alan Acckerman and Bert Baff and Clive Climbi}, TITLE = {Title}, YEAR = {1990}, } @BOOKLET{L16a, AUTHOR = {Alan Acckerman and Bert Baff and Clive Climbi}, TITLE = {Title2}, YEAR = {1990}, } @REPORT{L17, AUTHOR = {Alan Ackkerman and Bert Baff and Clive Climbi}, TITLE = {Title}, YEAR = {1911}, } @REPORT{L17a, AUTHOR = {Alan Ackkerman and Bert Baff and Clive Climbi}, TITLE = {Title2}, YEAR = {1911}, } @UNPUBLISHED{L18, AUTHOR = {Agassi and Chang and Laver}, TITLE = {Title}, YEAR = {1911}, } @UNPUBLISHED{L19, AUTHOR = {Agassi and Connors and Lendl}, TITLE = {Title}, YEAR = {1911}, } @UNPUBLISHED{L20, AUTHOR = {Agassi and Courier and Laver}, TITLE = {Title}, YEAR = {1911}, } @UNPUBLISHED{L21, AUTHOR = {Borg and Connors and Edberg}, TITLE = {Title}, YEAR = {1911}, } @UNPUBLISHED{L22, AUTHOR = {Borg and Connors and Emerson}, TITLE = {Title}, YEAR = {1911}, } @UNPUBLISHED{L23, AUTHOR = {Sanchez-Vicario, Bill}, TITLE = {Title}, YEAR = {1900}, } @UNPUBLISHED{L24, AUTHOR = {Zaa}, TITLE = {Title}, YEAR = {1900}, } @UNPUBLISHED{L25, AUTHOR = {Zoo and Xaa}, TITLE = {Title}, YEAR = {1900}, } @UNPUBLISHED{L26, AUTHOR = {Zoo and Xaa}, TITLE = {Title}, YEAR = {1901}, } @BOOK{LDN1, AUTHOR = {Vela, Luis and Ura Ru, Juan}, TITLE = {Title}, YEAR = {1889}, } @CUSTOMA{LDN2, AUTHOR = {Vela, Luis and Ura Ru, Juan}, TITLE = {Title}, YEAR = {1845}, } % Some examples from biblatex examples file of collection plus individual volumes % The date ranges should be handled differently by extrayear and extraalpha @BOOK{knuth:ct, hyphenation = {american}, sortyear = {1984-0}, sorttitle = {Computers & Typesetting}, indexsorttitle = {Computers & Typesetting}, author = {Knuth, Donald E.}, title = {Computers \& Typesetting}, volumes = {5}, publisher = {Addison-Wesley}, location = {Reading, Mass.}, date = {1984/1986}, annotation = {A five-volume book cited as a whole. This is a \texttt{book} entry, note the \texttt{volumes} field} } @BOOK{knuth:ct:a, hyphenation = {american}, sortyear = {1984-1}, sorttitle = {Computers & Typesetting A}, indexsorttitle = {The TeXbook}, author = {Knuth, Donald E.}, indextitle = {\TeX book, The}, title = {The \TeX book}, shorttitle = {\TeX book}, maintitle = {Computers \& Typesetting}, volume = {A}, publisher = {Addison-Wesley}, location = {Reading, Mass.}, date = {1984}, annotation = {The first volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields. We want this volume to be listed after the entry referring to the entire five-volume set. Also note the \texttt{indextitle} and \texttt{indexsorttitle} fields} } @BOOK{knuth:ct:b, hyphenation = {american}, sortyear = {1986-1}, sorttitle = {Computers & Typesetting B}, indexsorttitle = {TeX: The Program}, author = {Knuth, Donald E.}, title = {\TeX: The Program}, shorttitle = {\TeX}, maintitle = {Computers \& Typesetting}, volume = {B}, publisher = {Addison-Wesley}, location = {Reading, Mass.}, date = {1986}, annotation = {The second volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields. Also note the \texttt{indexsorttitle} field} } @BOOK{knuth:ct:c, hyphenation = {american}, sortyear = {1986-2}, sorttitle = {Computers & Typesetting C}, author = {Knuth, Donald E.}, indextitle = {METAFONTbook, The}, title = {The METAFONTbook}, shorttitle = {METAFONTbook}, maintitle = {Computers \& Typesetting}, volume = {C}, publisher = {Addison-Wesley}, location = {Reading, Mass.}, date = {1986}, annotation = {The third volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields as well as the \texttt{indextitle} field} } @PHDTHESIS{Schmidt2007a, author = {C. Schmidt}, year = {2007}, } @INPROCEEDINGS{Schmidt2007, author = {C. Schmidt and XXX and YYY and ZZZ}, year = {2007}, } @PHDTHESIS{Schnee2007a, author = {D. Schnee}, year = {2007}, } @ARTICLE{Schnee2007, author = {D. Schnee and XXX and YYY and ZZZ}, year = {2007}, } @CUSTOMB{title1, author = {D. Schnee and XXX and YYY and ZZZ}, title = {{T\"i{tle} in Braces with char}}, year = {2007}, } @BOOK{labelstest, AUTHOR = {AAA and BBB and CCC}, TITLE = {A title}, DATE = {2005-03-02} } @CUSTOMC{padtest, AUTHOR = {Alan Al}, TITLE = {T}, YEAR = {2007}, } biblatex-biber-1.8/t/tdata/zotero.rdf000444000000000000 124470512230324176 17145 0ustar00rootroot000000000000 journalArticle Artforum Rancière Jacques creator: Rancière Rancière ‘‘Art of the Possible.’’ Interview with Fulvia Carnevale and John Kelsey 256-69 2007 journalArticle Topoi 7 2 DOI 10.1007/BF00141639 Deleuze Gilles creator: Deleuze Deleuze, Gilles “A philosophical concept . . .” 111-112 1988 http://dx.doi.org/10.1007/BF00141639 bookSection People's history and socialist theory ISBN 0710006527 London Routledge Samuel Raphael Rancière Jacques creator: Rancière Rancière “le social”: the lost tradition in French labour history 1981 267-272 bookSection Film Fables Rancière Jacques creator: Rancière Rancière A Fable without a Moral: Godard, Cinema,(Hi) stories 2006 journalArticle Parallax 15 3 DOI 10.1080/13534640902982983 Rancière Jacques creator: Rancière Rancière A few remarks on the method of Jacques Rancière 114 - 123 2009 http://www.informaworld.com/10.1080/13534640902982983 114 - 123 book London Athlone Deleuze Gilles Guattari Félix Massui Brian creator: Deleuze Deleuze, Gilles Psychoanalysis Social psychology A Thousand Plateaus: Capitalism and Schizophrenia 1988 611 ISBN 0485120585 HM251 <p>106 [b]ecoming minoritarian as the universal figure of consciousness is called autonomy</p> journalArticle Foucault Michel creator: Foucault Foucault About the Beginning of the Hermeneutics of the Self: Two Lectures at Dartmouth 198-227 May, 1993 About the Beginning of the Hermeneutics of the Self JSTOR 2.5 Political Theory 21 2 DOI http://www.jstor.org/stable/191814 ISSN 00905917 journalArticle International Journal of Law and Psychiatry 1 1 DOI http://dx.doi.org/10.1016/0160-2527(78)90020-1 Foucault Michel Baudot Alain Couchman Jane creator: Foucault Diagnosis Foucault About the concept of the “dangerous individual” in 19th-century legal psychiatry 1-18 1978 1.6 book London Allen Lane Foucault Michel Faubion James D Hurley Robert creator: Foucault Foucault Aesthetics, Method and Epistemology 2 1998 486 ISBN 071399164X webcat.warwick.ac.uk Library Catalog 194 book The New Press Foucault Michel Rabinow Paul Hurley Robert Aesthetics, Method, and Epistemology 1 1999-09-01 ISBN 1565845587 Amazon.com journalArticle Topoi 7 2 DOI 10.1007/BF00141648 Rancière Jacques Davis Christina creator: Rancière Rancière After what 181-185 1988 http://dx.doi.org/10.1007/BF00141648 2008-07-31 11:28:05 SpringerLink journalArticle Guénoun Solange Rancière Jacques Rancière An interview with Jacques Rancière: Cinematographic image, democracy, and the “splendor of the insignificant” 249 2000 An interview with Jacques Rancière http://www.informaworld.com/10.1080/10260210008456030 2008-07-31 12:05:17 Informaworld Contemporary French and Francophone Studies 4 2 DOI 10.1080/10260210008456030 ISSN 1740-9292 book London Athlone Deleuze Gilles Guattari Félix Hurley Robert Seem Mark Lane Helen Capital creator: Deleuze Deleuze, Gilles Oedipus complex Psychoanalysis Schizophrenia Social psychiatry Anti-Oedipus: Capitalism and Schizophrenia 1984 400 ISBN 0485300184 HM251 book London Continuum Deleuze Gilles Guattari Félix Hurley Robert Seem Mark Lane Helen Deleuze, Gilles Anti-Oedipus: Capitalism and Schizophrenia 2004 ISBN 0826476953, 9780826476951 Google Books book New York Harper & Row Heidegger Martin Macquarrie John Robinson Edward Being and Time 1962-08-01 589 English ISBN 0060638508 Amazon.com book Stanford University Press Vattimo Gianni D'Isanto Luca Webb David Belief 1 1999-10-01 ISBN 0804739196 Amazon.com book Zone Books Deleuze Gilles Tomlinson Hugh Habberjam Barbara creator: Deleuze Deleuze, Gilles Bergsonism Reissue edition November 8, 1990 144 ISBN 0942299078 Language: English Product Dimensions: 9 x 6 x 0.5 inches Shipping Weight: 9.44 ounces Amazon.com Sales Rank: #108,075 in Books Also Available in: Hardcover | All Editions book Stanford University Press Vattimo Gianni Beyond Interpretation: The Meaning of Hermeneutics for Philosophy 1 1997-06-01 ISBN 0804729948 Beyond Interpretation Amazon.com book Vintage Foucault Michel creator: Foucault Foucault Birth of the Clinic, The: An Archaeology of Medical Perception Reprint edition March 29, 1994 240 ISBN 0679753346 Language: English Product Dimensions: 8 x 5.2 x 0.7 inches Shipping Weight: 8.96 ounces Amazon.com Sales Rank: #70,883 in Books In-Print Editions: Hardcover ([1st American ed.]) book London Athlone Deleuze Gilles Tomlinson Hugh Habberjam Barbara Cinema creator: Deleuze Deleuze, Gilles Dynamic Limit mathematical Plato Platonists Stoic Cinema 1: The Movement-image 1986 250 ISBN 0485112817 <p>depending on the concept itself the limits can be conceived in two ways, mathematically or dynamically: either as preliminary to the existence of the bodies whose essence they fix, or going as far as the power of existing bodies goes. For ancient philosophy, this was one of the principal features of the opposition between the Platonists and the Stoics (13).</p> Dynamic Limit mathematical Plato Stoic book London Athlone Deleuze Gilles Tomlinson Hugh Galeta Robert creator: Deleuze Deleuze, Gilles Motion pictures Cinema 2: The Time-image 1988 344 ISBN 0485120704 journalArticle Rancière Jacques. creator: Rancière Rancière Comment and Responses 2003 http://muse.jhu.edu/journals/theory_and_event/v006/6.4ranciere.html 2008-08-14 13:09:23 Project MUSE Volume 6, Issue 4, 2003 Theory & Event 6 4 ISSN 1092-311X journalArticle SubStance 13 3/4 Deleuze Gilles Guattari Félix Stivale Charles J creator: Deleuze Deleuze, Gilles Concrete Rules and Abstract Machines 7-19 1984 interview Rancière Jacques Critique de la critique du « spectacle » - entretien avec Jérôme Game Dans cet entretien réalisé au Musée des Beaux-Arts de Saint-Étienne en décembre 2008, Jacques Rancière revient sur les principales thèses développées dans Le Spectateur émancipé, et plus particulièrement sur sa critique de la critique du spectacle (telle qu'elle est notamment théorisée dans le travail de Guy Debord) et ses conséquences sur les possibilités d'émancipation intellectuelle, politique et esthétique. 2009-07-02 La Revue Internationale des Livres et des Idées http://revuedeslivres.net/articles.php?idArt=360 2010-10-22 02:42:53 bookSection L'Exception dans tous ses états ISBN 9782863641453 Parenthèses Balibar Etienne De la souveraineté: histoire et actualité d'un problème 2007 131-141 français book London Athlone Foucault Michel Ruas Charles creator: Foucault Criticism and interpretation Foucault Roussel, Raymond Death and the Labyrinth: The World of Raymond Roussel 1987 186 ISBN 0485113368 bookSection Derrida: la déconstruction Paris Presses Universitaires de France Critchley Simon amitié Aufklärung Axel Honneth décision déconstruction démocratie démocratie délibérative Derrida éthique Habermas Levinas Lumières Marx messianisme Politiques de l'amitié promesse rationalité discursive responsabilité Schmitt Spectres de Marx utopie Déconstruction et communication. Quelques remarques sur Derrida et Habermas 2005 53-70 bookSection Derrida: la déconstruction Presses Universitaires de France Ramond Charles auteur commentaire déconstruction Derrida Glas Hegel interprétation Jean Genet littérature poésie rationalité rhétorique Sartre signature Déconstruction et littérature (Glas, un guide de lecture) Au sujet de la méthode de déconstruction en tant que commentaire de textes littéraires: Glas comme symétrique inversé de Saint Genet de Sartre, refus du recouvrement de la littérature par la philosophie, volonté de faire résonner, en creux, l'indécidabilité du texte littéraire, son reste qui échappe aux filets de l'interprétation (marxiste, psychanalytique, ou encore sartrienne - celle-ci se démarquant explicitement de celles-là). Analyse des syllables ("gl"...), des fleurs, etc. Déconstruction de l'analyse littéraire universitaire qui marque en même temps son respect. Aboutit au paradoxe de la co-signature du texte de Genet par J.D. : alors même qu'il avait voulu faire entendre Genet, que Glas est séparé entre une colonne sur Hegel et une autre sur Genet, que des extraits entiers de dictionnaire y sont recopiés, J.D. en arrive au point de Sartre: comme lui, il aura fait coïncider sa signature et celle de Genet: "Comme Sartre retrouvant en Genet une figure du "choix existentiel" [qui confond la vie et l'oeuvre], Derrida n'a pu éviter de retrouver en Genet une écriture de la "déconstruction"." Accompagné d'une bibliographie. 2005 99-142 manuscript Deleuze Gilles Stivale Charles J creator: Deleuze Deleuze, Gilles Kant, Immanuel Deleuze / Leibniz Cours Vincennes Lecture 15/04/1980 English http://www.webdeleuze.com/php/texte.php?cle=50&groupe=Leibniz&langue=2 <p>To say that philosophers contradict one another is a feeble formula, it&apos;s like saying that Velasquez did not agree with Giotto, right! It&apos;s not even true, it&apos;s nonsensical.</p> manuscript Vincennes Deleuze Gilles Murphy Timothy S. Deleuze, Gilles DELEUZE / SPINOZA : Affect and Idea Lecture 24/01/1978 http://www.webdeleuze.com/php/texte.php?cle=14&groupe=Spinoza&langue=2 manuscript Vincennes Deleuze Gilles Deleuze, Gilles DELEUZE / SPINOZA : Correspondance with Blydenburgh Lecture 13/01/1981 http://www.webdeleuze.com/php/texte.php?cle=34&groupe=Spinoza&langue=2 manuscript Vincennes Deleuze Gilles Duffy Simon Deleuze, Gilles DELEUZE / SPINOZA : Immortality and Eternity. Lecture 20/01/1981 http://www.webdeleuze.com/php/texte.php?cle=34&groupe=Spinoza&langue=2 manuscript Vincennes Deleuze Gilles Murphy Timothy S. Deleuze, Gilles DELEUZE / SPINOZA : Individuality and Infinity Lecture 17/02/1981 http://www.webdeleuze.com/php/texte.php?cle=38&groupe=Spinoza&langue=2 manuscript Vincennes Deleuze Gilles Duffy Simon Deleuze, Gilles DELEUZE / SPINOZA : Ontology / Ethics Lecture 21/12/1980 http://www.webdeleuze.com/php/texte.php?cle=190&groupe=Spinoza&langue=2 manuscript Vincennes Deleuze Gilles Murphy Timothy S. Deleuze, Gilles DELEUZE / SPINOZA : Philosophy and Theology Lecture 25/11/1980 http://www.webdeleuze.com/php/texte.php?cle=17&groupe=Spinoza&langue=2 manuscript Vincennes Deleuze Gilles Duffy Simon Deleuze, Gilles DELEUZE / SPINOZA : power (puissance), classical natural right Lecture 09/12/1980 http://www.webdeleuze.com/php/texte.php?cle=20&groupe=Spinoza&langue=2 manuscript Vincennes Deleuze Gilles Duffy Simon Deleuze, Gilles DELEUZE / SPINOZA : The actual infinite, eternity, the logic of relations Lecture 10/03/1981 http://www.webdeleuze.com/php/texte.php?cle=38&groupe=Spinoza&langue=2 manuscript Vincennes Deleuze Gilles Deleuze, Gilles DELEUZE / SPINOZA : The conatus, the reasonable man and the madman Lecture 12/12/1980 http://www.webdeleuze.com/php/texte.php?cle=17&groupe=Spinoza&langue=2 manuscript Deleuze Gilles Deleuze, Gilles DELEUZE / SPINOZA :the affections of essence, 24/03/1981 http://www.webdeleuze.com/php/texte.php?cle=38&groupe=Spinoza&langue=2 manuscript Deleuze Gilles creator: Deleuze Deleuze, Gilles Spinoza Deleuze / Spinoza Immortalité et éternité 17/03/1981 French http://www.webdeleuze.com/php/texte.php?cle=43&groupe=Spinoza&langue=1 manuscript Deleuze Gilles Rubin Jon creator: Deleuze Deleuze, Gilles Spinoza DELEUZE / SPINOZA Immortality and Eternity 17/03/1981 French http://www.webdeleuze.com/php/texte.php?cle=43&groupe=Spinoza&langue=1 journalArticle Radical Philosophy 82 Rancière Jacques creator: Rancière Rancière Democracy means equality 29-36 1997 journalArticle Historical Materialism 13 4 Blechman Max Chari Anita Hasan Rafeeq Rancière Jacques Dissensus Kant, Immanuel Rancière Democracy, dissensus and the aesthetics of class struggle: An exchange with Jacques Rancière Without Abstract 285-301 December 25, 2005 Democracy, dissensus and the aesthetics of class struggle SpringerLink journalArticle Constellations 13 3 DOI 10.1111/j.1467-8675.2006.00402.x Rancière Jacques creator: Rancière Rancière Democracy, Republic, Representation 297-307 2006 http://dx.doi.org/10.1111/j.1467-8675.2006.00402.x 2008-08-14 13:40:22 Wiley InterScience book Paris Presses universitaires de France Ramond Charles déconstruction Derrida philosophie Derrida : la déconstruction Table des matières Présentation générale 1 -- La philosophie de Jacques Derrida et la spécificité de la déconstruction au sein des philosophies du linguistic turn, par Jean-Michel Salanskis 2 -- Déconstruction et communication. Quelques remarques sur Derrida et Habermas, par Simon Critchley 3 -- OEuvre et destruction : Jacques Derrida et Antonin Artaud, par Jean-Christophe Goddard 4 -- Déconstruction et littérature (Glas, un guide de lecture), par Charles Ramond 5 -- Hegel en déconstruction, par Denis Kambouchner La « déconstruction », emblème de la philosophie de Derrida, est entrée dans le langage courant malgré (ou peut-être à cause de) son caractère ouvertement paradoxal. Le présent recueil cherche à donner une idée de la variété et de la richesse des débats contemporains autour et à partir de la déconstruction, dans les domaines de la philosophie du langage et du linguistic turn, de la théorie de la communication et de l'agir communicationnel, de la psychiatrie, de la psychanalyse et de la théorie esthétique, de la critique littéraire et de l'histoire de la philosophie. 2e éd. 2008 ISBN 9782130571506 1e ed. 2005 book Presses Universitaires de France - PUF Moati Raoul contexte déconstruction intentionnalité langage langage ordinaire philosophie analytique philosophie du langage sens Derrida/Searle : Déconstruction et langage ordinaire 2009-02-09 ISBN 2130573878 Derrida/Searle Amazon.com book London MIT Press Deleuze Gilles Lapoujade David Taornina Michael 20th century creator: Deleuze Deleuze, Gilles Philosophy Philosophy, French Psychoanalysis and philosophy Desert Islands and Other Texts, 1953-1974 2004 323 ISBN 1584350180 B2430.D452 S4413 2004 bookSection Foucault and his Interlocutors Chicago University Of Chicago Press Deleuze Gilles Smith Daniel, W. Davidson Arnold creator: Deleuze Deleuze, Gilles Desire and Pleasure 1997 183-194 book Paris Minuit Deleuze Gilles Lapoujade David creator: Deleuze Deleuze, Gilles Deux régimes de fous et autres textes, 1975-1995 2003 ISBN 2707318345 book New York Columbia University Press Deleuze Gilles Parnet Claire Tomlinson Hugh Habberjam Barbara creator: Deleuze Deleuze, Gilles Dialogues 1987 157 ISBN 0231066007 book London Athlone Press Deleuze Gilles Patton Paul creator: Deleuze Deleuze, Gilles Difference and Repetition 1994 350 ISBN 0485113600 194 <p>135-136 What is a thought which harms no one, neither thinkers nor anyone else?</p> <p>265 oceanic differences, of nomadic distributions and crowned anarchy</p> book Minneapolis University of Minnesota Press Rancière Jacques Rose Julie creator: Rancière Rancière Disagreement politics and philosophy 1999 ISBN 0816628440 book London Allen Lane Foucault Michel Sheridan Alan creator: Foucault Foucault Prison discipline Prisons Punishment Discipline and Punish: The Birth of the Prison 1977 333 ISBN 0713910402 <p>228 Is it any wonder that prisons resemble factories, schools, barracks, hospitals, which all resemble prisons?</p> journalArticle Huyssen Andreas Bhabha Homi Rancière Jacques Laclau Ernesto Rancière Discussion 78-82 Summer, 1992 http://www.jstor.org/stable/778787 2008-08-14 10:57:48 JSTOR 078 ArticleType: primary_article / Issue Title: The Identity in Question / Full publication date: Summer, 1992 / Copyright © 1992 The MIT Press October 61 ISSN 01622870 journalArticle Rancière Jacques Panagia Davide creator: Rancière Rancière Dissenting Words: A Conversation with Jacques Ranciere 113-126 Summer, 2000 Dissenting Words http://www.jstor.org/stable/1566474 2008-07-29 19:40:07 JSTOR ArticleType: primary_article / Full publication date: Summer, 2000 / Copyright © 2000 The Johns Hopkins University Press Diacritics 30 2 ISSN 03007162 <p>112 The  second  phase  of  the  linguistic  turn  constituted  itself  more  ambiguously.  For those  who  shared  intellectual  experiences  similar  to  my  own,  this  version  involved  a critique  of  the  langue/infrastructure  model;  that  is,  a  further  and  more  favorable  consideration  of  the value  of  the  political  and  the  linguistic  games  therein  that,  according  to the  Althusserian/Marxist  model  (and,  indeed,  with  structuralism  more generally),  were to  be  treated  as  ideological  artifacts.  In  a  very  real  sense,  it  all  began  with  the  May  '68 assertion  that  "we  are  all  German  Jews"-an  entirely  ideological  statement,  the  validity of  which,  if  analyzed  at  the  level  of  its  content,  one  finds  to  rest  entirely  on  the  capacity to  overturn  the  political  relationship  between  the  order  of  designations  and  that  of  events by  emphasizing  the  gap  that  separates  subject  and  predicate.  From  there,  an  entire  field of  understanding  speech  acts  as  political  gestures  opened  up:  a  field  that  reconfigured the  division  between  words  and  things  while  rearranging  the  distinction  between  legitimate  and  illegitimate  speakers  (i.e., claimants</p> <p style="margin-bottom:0cm;">123 Here the difficulty is in identifying what consensus means: it doesn’t merely refer to a taste for discussion and/or social and political peace. Consensus refers to the configuration of a field of perception-in-common, an instance of what I have called the “partition of the sensible,” even before it becomes a predisposition toward deliberation. Consensus means the sharing of a common and nonlitigious experience: its essence is the affirmation of the preconditions that determine political choice as objective and univocal.</p> <p> </p> book Paris Gallimard Foucault Michel Defert Daniel Ewald François Lagrange Jacques creator: Foucault Dits Et Écrits I, 1954-1988 1994 847 ISBN 2070738442 webcat.warwick.ac.uk Library Catalog book Paris Gallimard Foucault Michel Defert Jacques Ewald François Lagrange Jacques creator: Foucault Dits Et Écrits II, 1954-1988 1994 837 ISBN 2070739872 webcat.warwick.ac.uk Library Catalog book Paris Gallimard Foucault Michel Defert Daniel Ewald François Lagrange Jacques creator: Foucault Dits Et Écrits III, 1954-1988 1994 901 ISBN 2070739899 webcat.warwick.ac.uk Library Catalog book Paris Gallimard Foucault Michel Defert Daniel Ewald François Lagrange Jacques creator: Foucault Foucault Dits Et Écrits IV, 1954-1988 2001 2 ISBN 2070762904 book Paris Gallimard Foucault Michel Defert Daniel Ewald François Lagrange Jacques creator: Foucault Dits Et Écrits, 1954-1988 1994 835 ISBN 2070739880 webcat.warwick.ac.uk Library Catalog book Oxford Columbia University Press Deleuze Gilles Boundas Constantin creator: Deleuze Deleuze, Gilles Empiricis Epistemology Hume, David Philosophy of mind Subjectivity Treatise of human nature Empiricism and Subjectivity: An Essay on Hume’s Theory of Human Nature 1991 163 ISBN 0231068123 128 book London Verso Deleuze Gilles creator: Deleuze Deleuze, Gilles Philosophy Essays Critical and Clinical 1998 248 ISBN 0860916146 194 book New York New Press Foucault Michel Rabinow Paul Hurley Robert Ethics: Subjectivity and Truth 1 1997 ISBN 1565844343 Ethics Amazon.com book 1 London Allen Lane, The Penguin Press Foucault Michel Rabinow Paul Hurley Robert creator: Foucault Ethics Foucault Ethics: Subjectivity and Truth 1997 334 ISBN 0713991631 book New York Zone Books Deleuze Gilles Joughin Martin creator: Deleuze Deleuze, Gilles Expression Spinoza Expressionism in Philosophy: Spinoza 1990 445 ISBN 0942299507 book Los Angeles, Ca. MIT Press Foucault Michel Pearson Joseph. Ethics. Foucault, Michel, 1926-1984. Freedom of speech. Greek language -- Etymology. Lectures. Parrhēsia (The Greek word) Philosophy. Truth -- Philosophy. Truthfulness and falsehood. Fearless speech 2001 ISBN 1584350113 book Oxford Berg Rancière Jacques Battista Emiliano creator: Rancière Rancière Film fables 2006 196 p. ; 24 cm. ISBN 1845201671 book Paris Plon Foucault Michel Insanity (Law) Mental Disorders -- history. Mental illness -- history. Psychiatry -- History. Psychology -- History. Psychology, Pathological -- history. Folie et déraison : histoire de la folie à l'âge classique. 1961 book Minneapolis University of Minnesota Press Deleuze Gilles Hand Seán creator: Deleuze Deleuze, Gilles Foucault, Michel Foucault 1988 157 ISBN 0816616744 book New York Semiotext(e) Foucault Michel Lotringer Sylvère Hochroth Lysa Johnston John creator: Foucault Foucault Foucault Live: Interviews, 1961-1984 1996 478 ISBN 157027018 book Minneapolis University of Minnesota Press Deleuze Gilles Bacon Francis Smith Daniel, W. Bacon creator: Deleuze Criticism and interpretation Deleuze, Gilles Figurative expressionism Kant, Immanuel Francis Bacon: The Logic of Sensation 2003 183 ISBN 0816643415 ND497.B16 D413 2003 journalArticle Paragraph 28 1 Rancière Jacques creator: Rancière Kant, Immanuel Rancière From Politics to Aesthetics? 13-25 2005 book Northwestern University Press Ricoeur Paul Blamey Kathleen Thompson John B. From Text to Action: Essays in Hermeneutics, II 2007-09-13 ISBN 0810123991 From Text to Action Amazon.com journalArticle Ideology and Consciousness 7 Foucault M. Georges Canguilhem, philosopher of error 53-54 1980 webpage Glossary [Phenomenology Online] http://phenomenologyonline.com/glossary/glossary.html#semiotics 2010-02-01 11:14:17 bookSection Voices of the People: The Politics and Life of La Sociale at the End of the Second Empire Routledge & Kegan Paul Rifkin Adrian Thomas Roger Rancière Jacques Vauday P creator: Rancière Rancière Going to the Expo: The Worker, his Wife and Machines 1988 Voices of the People Amazon.com bookSection The Foucault Effect: Studies in Governmentality Hemel Hemptsead Harvester Wheatsheaf Foucault Michel Burchell G Gordon C Miller P creator: Foucault Governmentality 1991 87-104 book London Verso Rancière Jacques Corcoran Steve creator: Rancière Public opinion Rancière Hatred of Democracy 2006 106 ISBN 1844670988 webcat.warwick.ac.uk Library Catalog JC423 .R27913 2007 webpage Inwood Michael Hermeneutics [Routledge] 1998 http://www.rep.routledge.com/article/P023?ssid=806949556&n=1# 2009-06-19 06:46:44 webpage Ramberg Bjørn Gjesdal Kristin Hermeneutics [SEP] http://plato.stanford.edu/entries/hermeneutics/ 2009-06-17 10:16:58 book Paris Gallimard Foucault Michel creator: Foucault Foucault Histoire de la sexualité 1. La Volonté de savoir. 1976 book Bibliothèque des histoires Paris Gallimard Foucault Michel creator: Foucault Histoire de la sexualité. La volonté de savoir 1976 211 ISBN 2070273822 journalArticle Economy and Society 5 3 Rancière Jacques creator: Rancière Rancière How to use Lire le Capital 377-384 1976 book Harmondsworth Penguin Foucault Michel Case studies creator: Foucault Foucault France Medical jurisprudence Parricide Rivière, Pierre I, Pierre Rivière, Having Slaughtered My Mother, My Sister, And My Brother ... : a Case of Parricide in the 19th Century 1978 288 ISBN 0140551255 bookSection Language, Counter-memory, Practice: Selected Essays And Interviews ISBN 0801492041 Ithaca Cornell University Press Foucault Michel Deleuze G. Bouchard Donald F. Bouchard Donald, F. Sherry Simon creator: Deleuze creator: Foucault Deleuze, Gilles Foucault Language and languages Literature Philosophy Philosophy (Difference) Intellectuals and Power 1977 205-217 journalArticle Edinburgh '77 Magazine 26 Rancière Jacques Hanet Karl creator: Rancière Rancière Interview: The Image of Brotherhood 26-31 1977 journalArticle Rancière Jacques creator: Rancière Rancière Introducing disagreement 3 2004 http://www.informaworld.com/10.1080/0969725042000307583 2008-07-31 11:03:18 Informaworld Angelaki: Journal of Theoretical Humanities 9 3 DOI 10.1080/0969725042000307583 ISSN 0969-725X <blockquote> <p style="margin-bottom: 0cm;"><span style="font-family: Times New Roman,serif;">5 Mé</span>sentente – a term untranslatable into English – indicates this node in between two things. It means both “the fact of not hearing, of not understanding” and “quarrel, disagreement.” Combining both meanings yields only this: the fact of hearing and understanding language does not in itself produce any of the effects of an egalitarian community. Egalitarian effects occur only through a forcing, that is, the instituting of a quarrel that challenges the incorporated, perceptible evidence of an inegalitarian logic. This quarrel is politics.</p> </blockquote> <p> </p> creator: Rancière webpage sound archive; sound; archiv; music; audio; record; player; mp3; download; music; classical; popular; drama; literature; oral history; world; traditional; wildlife; broadcast Jacques Derrida and Geoffrey Bennington, in conversation - Archival Sound Recordings http://sounds.bl.uk/View.aspx?item=024M-C0095X0298XX-0100V0.xml 2010-03-26 18:02:35 book Minneapolis University of Minnesota Press Deleuze Gilles Guattari Félix Polan Dana creator: Deleuze Deleuze, Gilles Kafka, Franz Kafka: Toward a Minor Literature 1986 104 ISBN 0816615152 book Minneapolis University of Minnesota Press Deleuze Gilles Tomlinson Hugh Habberjam Barbara 18th century creator: Deleuze Deleuze, Gilles Epistemology History Kant, Immanuel Kant’s Critical Philosophy: The Doctrine of the Faculties 1984 ISBN 0816613419 book Paris Les Éditions de Minuit Deleuze Gilles Guattari Félix Capitalism creator: Deleuze Deleuze, Gilles Oedipus complex Psychoanalysis Schizophrenia Social psychiatry Social psychology L’anti-Oedipe 1972 494 webpage Deleuze Gilles creator: Deleuze Deleuze, Gilles Spinoza L’éternité. Récapitulation. les trois genres de connaissance. éternité, expérimentation. Immortalité et éternité http://www.webdeleuze.com/php/texte.php?cle=43&groupe=Spinoza&langue=1 2006-12-14 15:46:25 book Paris Editions de Minuit Deleuze Gilles Lapoujade D creator: Deleuze Deleuze, Gilles L’Île déserte et autres textes 2002 book Paris Galilée Rancière Jacques creator: Rancière Rancière La mésentente 1995-01-24 187 ISBN 2718604506 Amazon.com bookSection Derrida: la déconstruction Paris Presses Universitaires de France Salanskis Jean-Michel Austin clôture Derrida différance Difference (Philosophy) entendement Hegel Heidegger Husserl Kant langage Levinas Linguistic turn logique performatif philosophie analytique rationalité speech act tournant linguistique La philosophie de Jacques Derrida et la spécificité de la déconstruction au sein des philosophies du linguistic turn 1e ed. 2005 13-51 book Ithaca Cornell University Press Foucault Michel Bouchard Donald F. Bouchard Donald, F. Sherry Simon creator: Foucault Foucault Language and languages Literature Philosophy Philosophy (Difference) Language, Counter-memory, Practice: Selected Essays And Interviews 1977 240 ISBN 0801492041 journalArticle Carrefour XIX 2 Rancière Jacques creator: Rancière Rancière Le dissensus citoyen 23-24 1997 book Paris Anabet Brossat Alain Le sacre de la démocratie : tableau clinique d'une pandémie 2007 ISBN 9782352660255 journalArticle Balibar Étienne Balibar structuralisme sujet Le structuralisme : une destitution du sujet ? On emploie ici le terme « structuralisme » dans un sens large, incluant les œuvres de Lévi-Strauss et Barthes aussi bien que celles d’Althusser, de Lacan, de Foucault. J’y vois non pas un système ou une école de pensée, mais un mouvement, et j’y inclus également le « post-structuralisme » de Derrida et de Deleuze, en tant que « négation déterminée » de certains présupposés. Je soutiens que le structuralisme ne se caractérise pas par une position objectiviste, mais par la relance de la tentative pour produire une « genèse » ou une « construction » du sujet au sein de structures transindividuelles, et donc pour y voir un système d’effets au lieu d’une cause originaire. Cette conversion d’un point de vue du sujet constituant au point de vue du sujet constitué explique l’importance des modèles linguistique, psychanalytique et anthropologique, ainsi que d’une certaine interprétation du marxisme comme théorie de l’imaginaire social chez les structuralistes. Quant au post-structuralisme, il déploie un mouvement de rectification, en présentant les limites de la subjectivité, qui impliquent la dissolution de la « normalité » et la mise à jour de la violence inhérente au processus de constitution, comme des « différences » pures qui engendrent l’activité et la passivité. Ce second mouvement contribue de façon décisive à conférer au structuralisme, non seulement une portée épistémologique, mais aussi une orientation éthique. 5 2005 Le structuralisme http://www.cairn.info.gate3.inist.fr/resume.php?ID_ARTICLE=RMM_051_0005 2010-04-21 21:57:13 CrossRef Revue de métaphysique et de morale 45 1 DOI 10.3917/rmm.051.0005 ISSN 0035-1571 journalArticle Esprit8-9 Illich Ivan énergie épistémologie nature prolétariat travail L'énergie, un objet social Le changement de notre rapport à l'énergie est au centre de la crise économique actuelle. Mais comment l'énergie a-t-elle pris une place aussi importante dans notre conception du travail et de l'économie ? Cette investigation historique montre toute la force prophétique de l'approche d'Illich qui mêle l'érudition à une grande... 211-227 2010, août-septembre journalArticle Descombes Vincent collectif complexité distributif espèce Frege genre individu logique Moyen-Age nationalisme nombre personne morale philosophie analytique philosophie politique Port-Royal Relations Internationales Rousseau souveraineté théorie des systèmes Les individus collectifs 305 2001 http://www.cairn.info.gate3.inist.fr/article.php?ID_ARTICLE=RDM_018_0305&DocId=66391&Index=%2Fcairn2Idx%2Fcairn&TypeID=226&HitCount=24&hits=43f3+43f2+3e04+3e03+3a3b+3a3a+1df6+1df5+1dc2+1dc1+1db1+1db0+1bec+1beb+1aa3+1aa2+52c+52b+262+261+1a+19+3+2+0&fileext=html#hit1 2010-10-21 00:44:59 CrossRef Revue du MAUSS 18 2 DOI 10.3917/rdm.018.0305 ISSN 1247-4819 conferencePaper Université de Lausanne Bouveresse Jacques Badiou Chomsky Christofferson Enzensberger intellectuel Juppé Karl Krauss Klemperer médias nazisme objectivité Onfray Orwell philosophie propagande rationalité révisionnisme romantisme totalitarisme vérité Les intellectuels, l'objectivité, la propagande et le contrôle de l'esprit public (Karl Kraus, Georges Orwell) 2010-04 Colloque international de théorie politique http://www3.unil.ch/wpmu/ctp2010/textes-a-disposition/textes-des-auteur-e-s/ bookSection Deux régimes de fous et autres textes, 1975-1995 ISBN 2707318345 Paris Minuit Deleuze Gilles Lapoujade David creator: Deleuze Deleuze, Gilles Les plages d’immanence 2003 bookSection Negotiations, 1972-1990 ISBN 0231075804 New York Columbia University Press Deleuze Gilles Joughin Martin creator: Deleuze Deleuze, Gilles Philosophy Letter to a Harsh Critic 1995 221 journalArticle Annales. Histoire, Sciences Sociales 48 4 Rancière Jacques creator: Rancière Rancière L'histoire «des» femmes: entre subjectivation et représentation (note critique) 1011-1018 1993 journalArticle Deleuze Gilles Smith Daniel W. Greco Michael A. creator: Deleuze Deleuze, Gilles Literature and Life 225-230 Winter, 1997 http://www.jstor.org/stable/1343982 2008-06-27 11:49:43 JSTOR ArticleType: primary_article / Full publication date: Winter, 1997 / Copyright © 1997 The University of Chicago Press Critical Inquiry 23 2 ISSN 00931896 book Vintage Foucault Michel Howard Richard creator: Foucault Foucault Madness and Civilization: A History of Insanity in the Age of Reason November 28, 1988 320 ISBN 067972110X Language: English Product Dimensions: 8.1 x 5.2 x 0.6 inches Shipping Weight: 9.28 ounces Amazon.com Sales Rank: #13,625 in Books Also Available in: Paperback | Unknown Binding | All Editions book New York Zone Deleuze Gilles McNeil Jean Sacher-Masoch Leopold creator: Deleuze Deleuze, Gilles Erotic literature History and criticism Masochism Masochism in literature Medicine in literature Sadism Sadism in literature Masochism 1989 293 ISBN 094229954X 833.7 presentation Berkeley Language Center Foucault Michel creator: Foucault Michel Foucault: The Culture of the Self 12/04/1983 http://sunsite.berkeley.edu/VideoTest/foucault-cult1.ram presentation Berkeley Language Center Foucault Michel creator: Foucault Michel Foucault: The Culture of the Self 19/04/1983 http://sunsite.berkeley.edu/VideoTest/foucault-cult2.ram presentation Berkeley Language Center Foucault Michel creator: Foucault Michel Foucault: The Culture of the Self 19/04/1983 http://sunsite.berkeley.edu/VideoTest/foucault-cult2.ram book New York Columbia University Press Deleuze Gilles Joughin Martin creator: Deleuze Deleuze, Gilles Philosophy Negotiations, 1972-1990 1995 221 ISBN 0231075804 book London Athlone Press Deleuze Gilles Tomlinson Hugh creator: Deleuze Deleuze, Gilles Nietzsche, Friedrich Wilhelm Nietzsche and Philosophy 1983 221 ISBN 0485112337 B3317 webpage Rancière Jacques Bouygues mouvement social sabotage social movements Note sur la notion de sabotage 2010-06-11 http://pajol.eu.org/article1040.html 2010-10-21 18:27:52 book The Johns Hopkins University Press Derrida Jacques Of Grammatology Corrected 1998-01-08 ISBN 0801858305 Amazon.com journalArticle The Tanner Lectures on Human Values 2 Foucault Michel creator: Foucault Omnes et singulatim: towards a criticism of political reason 223–254 1981 http://www.tannerlectures.utah.edu/lectures/documents/foucault81.pdf 2.5 bookSection The Foucault Reader ISBN 0140124861 Penguin Books Ltd Foucault Michel Rabinow Paul creator: Foucault Foucault On the Genealogy of Ethics New Ed edition 1984 32-50 Shipping Weight: 9.44 ounces Amazon.com Sales Rank: #835,032 in Books Also Available in: Hardcover | Paperback | All Editions book Radical thinkers London Verso Rancière Jacques Heron Liz creator: Rancière Rancière On the Shores of Politics 2007 107 ISBN 9781844675777 webcat.warwick.ac.uk Library Catalog JC423 .R27813 2007 journalArticle Contemporary French and Francophone Studies 8 3 Rancière Jacques creator: Rancière Rancière On war as the ultimate form of advanced plutocratic consensus 253-258 2004 Google Scholar journalArticle Rancière Jacques Ross Kristin creator: Rancière Rancière Overlegitimation 252-257 1992 http://www.jstor.org/stable/466229 2009-03-25 10:50:32 JSTOR ArticleType: primary_article / Issue Title: Third World and Post-Colonial Issues / Full publication date: 1992 / Copyright © 1992 Duke University Press Social Text 31/32 DOI 10.2307/466229 ISSN 01642472 webpage Embree Lester Phenomenological movement [Routledge] 1998 http://www.rep.routledge.com/article/DD075 2009-06-19 06:50:12 webpage Phenomenological Reduction [IEP] http://www.iep.utm.edu/phen-red/print/ 2010-02-01 11:21:12 webpage Phenomenology [IEP] http://www.iep.utm.edu/phenom/print/ 2010-02-01 11:18:18 webpage Smith David Woodruff Phenomenology [SEP] http://plato.stanford.edu/entries/phenomenology/ 2009-06-17 10:18:52 webpage Phenomenology and Time-Consciousness [IEP] http://www.iep.utm.edu/phe-time/print/ 2010-02-01 11:20:18 book London Routledge & Kegan Paul Merleau-Ponty Maurice Smith Colin Phenomenology of Perception 1962 ISBN 0415278414 Amazon.com I HAVE THIS 2008 BERKELEY book Berkeley University of California Press Gadamer Hans-Georg Linge David E. Philosophical Hermeneutics 2 2004 ISBN 0520256409 Amazon.com I HAVE THIS 2009 UCD CAMPUS BOOKSHOP journalArticle Angelaki: Journal of Theoretical Humanities 8 2 DOI 10.1080/0969725032000162657 ISSN 0969-725X Hallward Peter Rancière Jacques Kant, Immanuel Rancière Politics and aesthetics an interview 191 2003 http://www.informaworld.com/10.1080/0969725032000162657 2008-07-11 17:29:36 Informaworld journalArticle October 61 ISSN 01622870 Rancière Jacques creator: Rancière Rancière Politics, Identification, and Subjectivization 58-64 Summer, 1992 http://www.jstor.org/stable/778785 2008-08-14 10:57:48 JSTOR 058 ArticleType: primary_article / Issue Title: The Identity in Question / Full publication date: Summer, 1992 / Copyright © 1992 The MIT Press book London Routledge Foucault Michel Sheridan Alan Kritzman Lawrence creator: Foucault Foucault Philosophy Politics, Philosophy, Culture: Interviews and Other Writings 1977-1984 1988 330 ISBN 0415901499 B2430.F722E5 journalArticle Angelaki: Journal of Theoretical Humanities Rancière Jacques creator: Rancière Rancière Post democracy, politics and philosophy. An interview with Jacques Rancière 1995 bookSection Negotiations, 1972-1990 ISBN 0231075804 New York Columbia University Press Deleuze Gilles Joughin Martin creator: Deleuze Deleuze, Gilles Philosophy Postscript on Control Societies 1995 177-182 journalArticle October 59 ISSN 01622870 Deleuze Gilles Deleuze, Gilles Postscript on the Societies of Control 3-7 Winter, 1992 http://www.jstor.org/stable/778828 2009-11-18 17:25:03 JSTOR ArticleType: primary_article / Full publication date: Winter, 1992 / Copyright © 1992 The MIT Press book 3 London Allen Lane Foucault Michel Faubion James D Hurley Robert creator: Foucault Foucault Political culture Power 2001 484 ISBN 0713991658 webcat.warwick.ac.uk Library Catalog 194 bookSection Politics, Philosophy, Culture: Interviews and Other Writings 1977-1984 ISBN 0415901499 London Routledge Foucault Michel Sheridan Alan Kritzman Lawrence creator: Foucault Foucault Philosophy Power and Sex 1988 110-151 B2430.F722E5 book Pantheon Foucault Michel Gordon Colin Gordon Colin creator: Foucault Foucault Power/Knowledge: Selected Interviews and Other Writings, 1972-1977 November 12, 1980 288 ISBN 039473954X Language: English Product Dimensions: 8.3 x 5.5 x 0.8 inches Shipping Weight: 11.84 ounces Amazon.com Sales Rank: #57,742 in Books Also Available in: Hardcover | Unknown Binding | All Editions book London Allen Lane Deleuze Gilles Howard Richard creator: Deleuze Deleuze, Gilles Proust, Marcel Proust and Signs 1973 6 ISBN 0713903686 PQ2631.R63Z <p>This translation originally published, New York, Braziller, 1972. - Translation of &apos;Marcel Proust et les signes&apos;. Paris, Presses universitaires de France, 1964.</p> book Basingstoke, Hampshire Palgrave Macmillan Foucault Michel Lagrange Jacques Burchill Graham creator: Foucault Foucault Psychiatry Psychiatric Power: Lectures at the Collège De France, 1973-74 2006 382 ISBN 1403969221 Psychiatric Power Library of Congress Catalog RC437.5 .F6813 2006 journalArticle Bulletin de la Société Française de Philosophie 84 2 Foucault Michel creator: Foucault Foucault Qu’est-ce que la critique? (Critique et Aufklärung) 35-63 1990 conferencePaper Festival d'Avignon, cour du Palais des papes, spectacle de Frédéric Fisbach, "Feuillets d'Hypnos" de René Char Balibar Etienne Antiquité Blanchot Camus Cavaillès citoyenneté communauté Deleuze droit guerre d'Algérie honneur immigration insoumission institution nazisme philosophie du droit philosophie politique Rancière René Char résistance révolte sans-papiers Sarkozy souveraineté Résistance, insurrection, insoumission Sur ces trois termes et la liaison entre la citoyenneté "active" (ou contestation de la loi) et les institutions : le déperissement de toute contestation implique celui des institutions elles-mêmes. Fin sur la "communauté à venir" ("peuple qui manque", Deleuze) et sur la con-citoyenneté (communauté avec l'altérité : France-Algérie, Rancière). 2007-07-17 24 journalArticle Smith Daniel W. Deleuze Gilles creator: Deleuze Deleuze, Gilles Kant, Immanuel Review: [untitled] 455-456 Oct., 1986 Review http://www.jstor.org/stable/1202745 2008-06-27 11:52:56 JSTOR ArticleType: secondary_review / Reviewed Work: Nietzsche and Philosophy by Deleuze, Gilles; Tomlinson, Hugh / Full publication date: Oct., 1986 / Copyright © 1986 The University of Chicago Press The Journal of Religion 66 4 ISSN 00224189 book Houndmills, Basingstoke, Hampshire Palgrave Macmillan Foucault Michel Senellart Michel Burchill Graham creator: Foucault Foucault Power (Social sciences) Reason of state State, The Security, Territory, Population: Lectures at the Collège De France, 1977-1978 2007 ISBN 1403986525 Security, Territory, Population Library of Congress Catalog JC131 .F68 2007 book Semiotext(e) Lotringer Sylvere Deleuze Gilles Foucault Michel Lyotard Jean-Francois Guattari Felix Artaud Antonin Donzelot Jacaues Hocquenghem Guy Dyer Robert Rajchman John creator: Deleuze Deleuze, Gilles Foucault Semiotext(e) 6: Anti-Oedipus: From Psychoanalysis to Schizopolitics 1977 192 Language: French ASIN: B000J242JO Amazon.com Sales Rank: None book Atopia : philosophy, political theory, aesthetics Stanford Stanford University Press Rancière Jacques Swenson James creator: Rancière Rancière Short voyages to the land of the people 2003 141 ISBN 0804736812 book London Allen Lane Foucault Michel Bertani Mauro Fontana Alessandro Macey David creator: Foucault Foucault Philosophy Political science Power War Society Must Be Defended: Lectures at the Collège De France, 1975-76 2003 310 ISBN 0713997079 bookSection Essays Critical and Clinical ISBN 0860916146 London Verso Deleuze Gilles creator: Deleuze Deleuze, Gilles Philosophy Spinoza Spinoza and the Three “Ethics” 1998 248 194 book Paris Ed. de Minuit Deleuze Gilles creator: Deleuze Deleuze, Gilles Spinoza Spinoza et le problème de l’expression 1968 332 French journalArticle Revue de Synthèse 89 Deleuze Gilles creator: Deleuze Deleuze, Gilles Spinoza Spinoza et nous 271-278 1978 book San Francisco City Lights Books Deleuze Gilles Hurley Robert creator: Deleuze Deleuze, Gilles Spinoza Spinoza, Practical Philosophy 1988 130 ISBN 0872862186 journalArticle Angelaki: Journal of Theoretical Humanities 8 3 Deleuze Gilles Faulkner Keith creator: Deleuze Deleuze, Gilles Statements and profiles 85-93 December 2003 bookSection Aesthetics, Method and Epistemology 2 ISBN 071399164X London Allen Lane Foucault Michel Faubion James D Hurley Robert creator: Foucault Foucault Structuralism and Post-structuralism 1998 435-458 webcat.warwick.ac.uk Library Catalog 194 book Paris Gallimard Foucault Michel creator: Foucault Foucault Prison discipline Prisons Punishment Surveiller et Punir: Naissance De La Prison 1975 318 bookSection Technologies of the Self: A Seminar with Michel Foucault ISBN 0422625701 Amherst University of Massachusetts Press Foucault Michel Gutman Huck Hutton Patrick H. Martin Luther H. creator: Foucault Foucault Philosophy (Self) Technologies of the Self 1998 16-49 http://foucault.info/documents/foucault.technologiesOfSelf.en.html 2.5 book London Tavistock Martin Luther H. Gutman Huck Hutton Patrick H. Foucault Michel creator: Foucault Foucault Technologies of the Self: A Seminar with Michel Foucault 1988 166 ISBN 0422625701 journalArticle Theory & Event 5 3 ISSN 1092-311X Rancière Jacques Panagia Davide Bowlby Rachel creator: Rancière Kant, Immanuel Rancière Ten Theses on Politics 2001 http://0-muse.jhu.edu.pugwash.lib.warwick.ac.uk:80/journals/theory_and_event/v005/5.3ranciere.html 2008-07-14 12:07:55 Project MUSE Volume 5, Issue 3, 2001 <blockquote class="western">sec 24 This is precisely why politics cannot be identified with the model of communicative action since this model presupposes the partners in communicative exchange to be pre-constituted, and that the discursive forms of exchange imply a speech community whose constraint is always explicable.</blockquote> <p> </p> creator: Rancière <p style="margin-bottom: 0cm;">Thesis 8: The principal function of politics is the configuration of its proper space. It is to disclose the world of its subjects and its operations. The essence of politics is the manifestation of dissensus, as the presence of two worlds in one.</p> <p> </p> creator: Rancière journalArticle New Left Review14 Rancière Jacques creator: Rancière Kant, Immanuel Rancière The Aesthetic Revolution and Its Outcomes 133-51 2002 book London Tavistock Foucault Michel Sheridan Alan creator: Foucault Foucault Learning and scholarship The Archaeology of Knowledge 1972 218 ISBN 0422758809 bookSection Walter Benjamin and the Demands of History London Cornell University Press Steinberg Michael P. Rancière Jacques creator: Rancière Rancière The Archaeomodern Turn 1996 24-40 Google Books book London Tavistock Foucault Michel Sheridan Alan creator: Foucault Foucault History Medicine Philosophy The Birth of the Clinic: An Archaeology of Medical Perception 1976 215 ISBN 0422761907 journalArticle Rancière Jacques creator: Rancière Rancière The Cause of the Other 25-33 1998 http://www.informaworld.com/10.1080/135346498250217 2008-08-14 13:15:46 Informaworld Parallax 4 2 DOI 10.1080/135346498250217 ISSN 1353-4645 <p>31 We do not have to look far to see what happens when we forget that difference. A consensus identifies the political subject known as the ‘people’ with a population that is broken down and then reconstituted into groups with specific interests or a specific identity, and the political citizen is identified with a legal subject who then tends to be identified with an economic subject who is a microcosm of a macro-circulation and an incessant exchange of rights and civil capacities, of consumer goods and the common Good. This is also a product of or a complement to the consensual utopia: this is the breaking point where the little economico-juridical machine takes on the appearance of the excluded, of those who have lost their ‘identity’ because they have lost their goods and because ‘the social bond’ has been broken. Petitions for identity are a negation of the citizenship that includes the other. They can take two forms: the communitarian form that asserts only the rights of the Same, and the religious form that requires only obedience to the law of the Other. Then there is the pathetic corollary of communitarianisms and fundamentalisms: the ‘universalism’ that fully identifies citizenship with a juridical status denied by the State, and rarely misses the opportunity to combine the principles of secularism with the discreet frissons of racism, or the defence of the rights of peoples with the fever of wars or reconquest. There is also the humanitarianism that is denied as the cause of a naked humanity, as the defence of human rights that are identified solely with the rights of the victim, with the rights of those who do not have the means to assert their rights or to use them to argue a politics; in a word, a ‘cause’ of the ‘other’ that retreats from politics to ethics, and is then completely absorbed into duties towards the suffering. Ultimately it plays into the hands of the geostrategic policies of the great powers.</p><p>&nbsp;</p> creator: Rancière bookSection Ideology, method and Marx essays from Economy and society ISBN 0415028620 London Routledge Rattansi Ali Rancière Jacques creator: Rancière Rancière The Concept of “Critique” and the Critique of “Political Economy” 1989 287p. ; 22cm. book Northwestern University Press Ricoeur Paul Ihde Don The Conflict of Interpretations: Essays in Hermeneutics 2007-10-16 ISBN 0810123975 The Conflict of Interpretations Amazon.com journalArticle Artforum 45 7 Rancière Jacques creator: Rancière Rancière The Emancipated Spectator 270 2007 book The Johns Hopkins University Press Vattimo Gianni The End of Modernity: Nihilism and Hermeneutics in Postmodern Culture Revised 1991-10-01 ISBN 0801843170 The End of Modernity Amazon.com journalArticle Critical Horizons 7 1 Rancière Jacques Deranty Jean-Philippe creator: Rancière Rancière The ethical turn of aesthetics and politics 1-20 2006 bookSection Foucault Live: Interviews, 1961-1984 ISBN 157027018 New York Semiotext(e) Foucault Michel Lotringer Sylvère Hochroth Lysa Johnston John creator: Foucault Foucault The Ethics of the Concern for Self as a Practice of Freedom 1996-03-04/1996-04-07 432-449 journalArticle Deleuze Gilles Uhlmann Anthony Deleuze, Gilles The Exhausted 3-28 1995 http://www.jstor.org/stable/3685005 2009-11-13 10:13:41 JSTOR ArticleType: primary_article / Issue Title: Issue 78 / Full publication date: 1995 / Copyright © 1995 University of Wisconsin Press SubStance 24 3 ISSN 00492426 book Atopia (Stanford, Calif.) Stanford Stanford University Press Rancière Jacques Mandell Charlotte creator: Rancière Rancière The flesh of words the politics of writing 2004 169 ISBN 0804740690 book London Athlone Press Deleuze Gilles Conley Tom creator: Deleuze Deleuze, Gilles Leibniz, Gottfried Wilhelm The Fold: Leibniz and the Baroque 1993 168 ISBN 0485114216 193 book Penguin Books Ltd Foucault Michel Rabinow Paul creator: Foucault Foucault The Foucault Reader New Ed edition 1984 400 ISBN 0140124861 Shipping Weight: 9.44 ounces Amazon.com Sales Rank: #835,032 in Books Also Available in: Hardcover | Paperback | All Editions <p>343 M.F. No! I am not looking for an alternative; you can’t find the solution of a problem in the solution of another problem raised at another moment by other people. You see, and what I want to do is not the history of solutions, and that’s the reason I don’t accept the word alternative. I would like to do the genealogy of problems, of problématiques. My point is not that everything is bad, but that everything is dangerous, which is not exactly the same thing as bad. If everything is dangerous, then we always have something to do. So my position leads not to apathy but to a hyper- and pessimistic activism.</p> Dangerousness Foucault book London Verso Rancière Jacques Elliott Gregory creator: Rancière Rancière The future of the image 2007 147 p. ; 21 cm. ISBN 1844671070 book Columbia University Press Zabala Santiago The Hermeneutic Nature of Analytic Philosophy: A Study of Ernst Tugendhat 2008-04-23 ISBN 0231143885 The Hermeneutic Nature of Analytic Philosophy Amazon.com book New York Palgrave-Macmillan Foucault Michel Gros Frédéric Ewald François Fontana Alessandro Burchell Graham creator: Foucault Foucault History Philosophy (Self) Philosophy, Ancient The Hermeneutics of the Subject: Lectures at the Collège De France 1981-1982 2005 566 ISBN 0312203268 B2430.F723 H4713 2005 book London Allen Lane Foucault Michel Hurley Robert creator: Foucault Foucault Sex customs The History of Sexuality volume 1: The Will to Knowledge 1979 168 ISBN 0713910941 The History of Sexuality webcat.warwick.ac.uk Library Catalog book Vintage Foucault Michel creator: Foucault Foucault The History of Sexuality volume 2: The Use of Pleasure Reissue edition April 14, 1990 304 ISBN 0394751221 Language: English Product Dimensions: 8.2 x 5.2 x 0.6 inches Shipping Weight: 8.00 ounces Amazon.com Sales Rank: #62,638 in Books book London Allen Lane Foucault Michel creator: Foucault The History of Sexuality volume 3: The Care of the Self 1988 279 ISBN 0713990023 webcat.warwick.ac.uk Library Catalog journalArticle Angelaki: Journal of Theoretical Humanities 5 3 Deleuze Gilles creator: Deleuze Deleuze, Gilles Kant, Immanuel The Idea of Genesis in Kant’s Aesthetics 57-70 December 2000 book Stanford Stanford University Press Rancière Jacques Ross Kristin creator: Rancière Rancière The ignorant schoolmaster five lessons in intellectual emancipation 1991 148 ISBN 0804718741 bookSection Foucault Live: Interviews, 1961-1984 ISBN 157027018 New York Semiotext(e) Foucault Michel Lotringer Sylvère Hochroth Lysa Johnston John creator: Foucault Foucault The Impossible Prison 1996 275-286 English <p>282 It is absolutely true that criminals stubbornly resisted the new disciplinary mechanism in the prison; it is absolutely correct that the actual functioning of the prisons, in the inherited buildings where they were established and with the governors and guards who administered them them, was a witch’s brew compared to the beautiful Benthamite machine.</p> book London Athlone Deleuze Gilles Boundas Constantin V. Lester Mark Stivale Charles J creator: Deleuze Deleuze, Gilles Meaning (Philosophy) The Logic of Sense 1990 393 ISBN 048530063X 2.3.2 book Philadelphia Temple University Press Rancière Jacques Drury John creator: Rancière Proletariat in literature Rancière Social conditions Working class writings, French The Nights of Labor: The Workers' Dream in Nineteenth-century France 1989 442 ISBN 0877226253 The Nights of Labor webcat.warwick.ac.uk Library Catalog journalArticle Critical Inquiry 30 2 DOI 10.2307/1344360 ISSN 00931896 Rancière Jacques Drury John Oster Corinne Parker Andrew creator: Rancière Rancière The Order of the City 267-291 Winter, 2004 http://www.jstor.org/stable/1344360 2009-03-25 10:52:53 JSTOR ArticleType: primary_article / Full publication date: Winter, 2004 / Copyright © 2004 The University of Chicago Press book London Routledge Foucault Michel Civilization creator: Foucault Foucault History The Order of Things: An Archaeology of the Human Sciences 1989 387 ISBN 0415040191 book Durham, NC Duke University Press Rancière Jacques Parker Andrew Drury John Oster Corinne Parker Andrew creator: Rancière Rancière The philosopher and his poor 2003 247 ISBN 0822332744 journalArticle Contemporary Political Theory 5 Connelly J. Rancière J. Rancière The Philosopher and His Poor 217-219 2006 Google Scholar journalArticle Contemporary Political Theory 5 Thompson Alex Rancière Jacques Rancière The Philosopher and His Poor 217-219 2006 Rethinking RG Collingwood Google Scholar book London Continuum Rancière Jacques Aesthetics creator: Rancière Political aspects Rancière The Politics of Aesthetics: The Distribution of the Sensible 2004 116 ISBN 082647067X The Politics of Aesthetics webcat.warwick.ac.uk Library Catalog BH39 .R3513 2004 bookSection The Foucault Reader ISBN 0140124861 Penguin Books Ltd Foucault Michel Rabinow Paul creator: Foucault Foucault Health The Politics of Health in the Eighteenth Century New Ed edition 1984 273-289 Shipping Weight: 9.44 ounces Amazon.com Sales Rank: #835,032 in Books Also Available in: Hardcover | Paperback | All Editions journalArticle SubStance 33 1 ISSN 00492426 Rancière Jacques creator: Rancière Rancière The Politics of Literature 10-24 2004 http://www.jstor.org/stable/3685460 2008-07-29 18:27:23 JSTOR ArticleType: primary_article / Issue Title: Issue 103: Contemporary Thinker Jacques Rancière / Full publication date: 2004 / Copyright © 2004 University of Wisconsin Press book Columbia University Press Zabala Santiago The Remains of Being: Hermeneutic Ontology After Metaphysics 2009-08-04 ISBN 0231148305 The Remains of Being Amazon.com journalArticle Rancière Jacques Murphy T. S. creator: Rancière Rancière The Saint and the Heiress: A propos of Godard's Histoire(s) du cinema 113-119 2002 The Saint and the Heiress http://muse.jhu.edu/journals/discourse/v024/24.1ranciere.html 2008-07-29 18:41:52 Project MUSE 24.1, Winter 2002 Discourse 24 1 ISSN 1536-1810 journalArticle Critical Inquiry 8 4 DOI http://www.jstor.org/pss/1343197 Foucault Michel creator: Foucault Foucault The Subject and Power 777-795 1982 <p>789 It is a total structure of actions brought to bear upon possible actions; it incites, it induces, it seduces, it makes easier or more difficult; in the extreme it constrains or forbids absolutely; it is nevertheless al~vaysa ivay of acting upon an acting subject or acting subjects by virtue of their acting or being capable of action. A set of actions upon other actions.</p> presentation paper de trabajo presentado en la Conferencia Fidelity to disagreement Rancière Jacques creator: Rancière Dissensus Kant, Immanuel Rancière The Thinking of Dissensus: Politics and Aesthetics paper 2003 la Conferencia Fidelity http://66.102.1.104/scholar?hl=en&lr=&safe=off&q=cache:IzeWtB_AjYMJ:homepages.gold.ac.uk/psrpsg/ranciere.doc+dissensus <p>4 Yet I do not reduce politics to a mere agonistic schema where the ‘content’ is irrelevant. I am far away from the Schmittian formalisation of antagonism. Politics, I argue, has its own universal, its own measure that is equality. The measure never applies directly. It does so only through the enactment of a wrong. However, not every wrong is necessarily political. It has been argued against my theses that there also anti-democratic forms of protest among the oppressed, shaped by religious fanaticism or ethnic identitarianism and intolerance. Ernesto Laclau put this as the blind spot of my conceptualisation of dissensus.</p><p>&nbsp;</p><p>But it is clear that in my view a wrong is political when it enacts the basis of political action, which is the mere contingency of equality, which is evidently not the case of ‘popular’ movements asking for the purity of the blood, the power of religion and so on. But I also refuse a widespread tendency to stigmatize any form of protest under the name of ‘populism’. The concept of ‘populism’ is a hotchpotch which allows old Marxists and young liberals at once to put in the same basket struggles for maintaining the welfare system and ethnic or religious riots. </p><p>&nbsp;</p> creator: Rancière bookSection Language, Counter-memory, Practice: Selected Essays And Interviews ISBN 0801492041 Ithaca Cornell University Press Foucault Michel Bouchard Donald F. Bouchard Donald, F. Sherry Simon creator: Foucault Foucault Language and languages Literature Philosophy Philosophy (Difference) Theatrum Philosophicum 1977 165-198 journalArticle Parrhesia Rancière Jacques creator: Rancière Rancière Thinking between disciplines: An aesthetics of knowledge 1-12 2006 Thinking between disciplines Google Scholar book London University of California Press Foucault Michel Magritte René Harkness James Art creator: Foucault Foucault Magritte, René Philosophy This Is Not a Pipe 1983 66 ISBN 0520042328 book Chicago University Of Chicago Press Ricoeur Paul McLaughlin Kathleen Pellauer David Time and Narrative, Volume 1 1984 ISBN 0226713326 Amazon.com Some Electronic Copy 2009 DUBLIN book University Of Chicago Press Ricoeur Paul Time and Narrative, Volume 2 1990-09-15 ISBN 0226713342 Amazon.com book Chicago University Of Chicago Press Ricoeur Paul Blamey Kathleen Pellauer David Time and Narrative, Volume 3 1988 ISBN 0226713369 Amazon.com I HAVE THIS HODGES & FIGGIS 2009 DUBLIN journalArticle Social Identities 2 Foucault Michel creator: Foucault Truth and Juridical Forms 327-342 1 October 1996 http://www.ingentaconnect.com/content/routledg/csid/1996/00000002/00000003/art00002 2008-11-27 22:01:01 IngentaConnect book London Continuum Gadamer Hans-Georg Weinsheimer Joel Marshall Donald G. Truth And Method 2, Revised 2004 ISBN 082647697X Amazon.com I HAVE THIS 2009 HODGES & FIGGIS journalArticle Balibar E. civilité cruauté extermination génocide mal philosophie politique violence Violence and Civility: On the Limits of Political Anthropology The essay offers a series of reflections on the place of violence in politics and, at the same time, on the ways in which the relation between what might be understood as mutually exclusive categories (violence ceases where politics begins and vice versa) has been theorized, especially in the twentieth century. The condition of such an inquiry is not a set of abstract concepts, but a phenomenology of extreme violence that exceeds any rational political objective. Such violence is often theorized through such negative categories as evil or extermination and thus continues in some measure to resist efforts to comprehend it. To begin to acknowledge the historical and material forms of the existence of violence is to confront the "tragic" dimension of the practice of politics. Just as this practice can never abandon itself to violence, so it can never altogether abandon violence, especially in the forms of resistance and insurrection. 9 2009 English Violence and Civility http://differences.dukejournals.org/cgi/content/short/20/2-3/9 Google Scholar 0000 Differences 20 2-3 ISSN 1040-7391 webpage Deleuze Gilles Deleuze, Gilles Web Deleuze : SOMMAIRE http://www.webdeleuze.com/php/sommaire.html 2009-11-18 16:53:17 bookSection From an aesthetic point of view ISBN 1852426683 London Serpent's Tail Osborne Peter Rancière Jacques creator: Rancière Rancière What aesthetics can mean 2000 13-34 journalArticle Rancière Jacques creator: Rancière Rancière What Does it Mean to be Un? 559 2007 http://www.informaworld.com/10.1080/10304310701629961 2008-07-31 12:11:31 Informaworld Continuum 21 4 DOI 10.1080/10304310701629961 ISSN 1030-4312 bookSection Michel Foucault: Philosopher Hemel Hemptsead Harvester Wheatsheaf Deleuze Gilles Armstrong T. J. creator: Deleuze Deleuze, Gilles What is a Dispositif? 1992 159-68 bookSection Philosophical traditions What Is Enlightenment?: Eighteenth-century Answers and Twentieth-century Questions ISBN 0520202252 Berkeley University of California Press Schmidt James Foucault Michel creator: Foucault Foucault What is Critique? 1996 382-398 bookSection The Foucault Reader ISBN 0140124861 Penguin Books Ltd Foucault Michel Rabinow Paul creator: Foucault Foucault What is Enghtenment New Ed edition 1984 32-50 Shipping Weight: 9.44 ounces Amazon.com Sales Rank: #835,032 in Books Also Available in: Hardcover | Paperback | All Editions <p>42-43 This ethos implies, first, the refusal of what I like to call the 'blackmail' of the Enlightenment. I think that the Enlightenment, as a set of political, economic, social, institutional, and cultural events on which we still depend in large part, constitutes a privileged domain for analysis. I also think that as an enterprise for linking the progress of truth and the history of liberty in a bond of direct relation, it formulated a philosophical question that remains for us to consider. I think, finally, as I have tried to show with reference to Kant's text, that it defined a certain manner of philosophizing.</p> <p>But that does not mean that one has to be 'for' or 'against' the Enlightenment. It even means precisely that one has to refuse everything that might present itself in the form of a simplistic and authoritarian alternative: you either accept the Enlightenment and remain within the tradition of its rationalism (this is considered a positive term by some and used by others, on the contrary, as a reproach); or else you criticize the Enlightenment and then try to escape from its principles of rationality (which may be seen once again as good or bad). And w e do not break free of this blackmail by introducing 'dialectical' nuances while seeking to determine what good and bad elements there may have been in the Enlightenment.</p> book London Verso Deleuze Gilles Guattari Félix Tomlinson Hugh Burchill Graham creator: Deleuze Deleuze, Gilles Philosophy What Is Philosophy? 1994 253 ISBN 0860914224 journalArticle South Atlantic Quarterly 103 2-3 Rancière Jacques creator: Rancière Rancière Who Is the Subject of the Rights of Man? 297-310 2004 Google Scholar journalArticle Critical Inquiry 34 2 DOI 10.1086/529056 Rancière Jacques creator: Rancière Rancière Why Emma Bovary Had to Be Killed 233-248 January 01, 2008 http://www.journals.uchicago.edu/doi/abs/10.1086/529056 2008-08-14 13:33:38 University of Chicago journalArticle Rancière Jacques Magun Artemy Vilensky Dmitry Skidan Alexandr creator: Rancière Kant, Immanuel Rancière You Can't Anticipate Explosions: Jacques Rancière in Conversation with Chto Delat 402 2008 You Can't Anticipate Explosions http://www.informaworld.com/10.1080/08935690802133984 2008-08-14 13:30:57 Informaworld Rethinking Marxism 20 3 DOI 10.1080/08935690802133984 ISSN 0893-5696 biblatex-biber-1.8/t/tdata/set-legacy.bcf000444000000000000 26100012230324177 17602 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm citeorder article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender sets.bib Elias1955 shorthand biblatex-biber-1.8/t/tdata/tool.bib000444000000000000 200112230324177 16456 0ustar00rootroot000000000000@UNPUBLISHED{i3Š, ABSTRACT = {Some abstract %50 of which is useless}, AUTHOR = {AAA and BBB and CCC and DDD and EEE}, AUTHOR_uniform_lang = {aaa and bbb and ccc and ddd and eee}, TITLE = {Š title}, TITLE_translated_french = {Le title}, DATE = {2003}, USERB = {test}, LOCATION = {one and two}, LOCATION_translated_french = {un and deux}, LISTA = {list test}, LISTB = {late and early}, LISTC = {late and early}, } @BOOK{xd1, AUTHOR = {Edward Ellington}, XDATA = {macmillanalias, missingxd} } @XDATA{macmillan, IDS = {macmillanalias}, YEAR = {2001}, XDATA = {macmillan:pubALIAS, macmillan:loc} } @XDATA{macmillan:pub, IDS = {macmillan:pubALIAS}, PUBLISHER = {Macmillan} } @XDATA{macmillan:loc, LOCATION = {New York and London}, NOTE = {A Note} } @BOOK{b1, TITLE = {Booktitle}, YEAR = {1999}, CROSSREF = {mvalias} } @MVBOOK{mv1, IDS = {mvalias}, TITLE = {Maintitle}, SUBTITLE = {Mainsubtitle}, TITLEADDON = {Maintitleaddon} } biblatex-biber-1.8/t/tdata/general1.bcf000444000000000000 26447512230324177 17266 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec author labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 0 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm ww year title presort sortkey sortname author editor translator sorttitle title sortyear year sorttitle title volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender examples.bib stdmodel knuth:ct angenendtsk angenendtsa stdmodel:glashow stdmodel:ps_sc murray aristotle:anima aristotle:rhetoric augustine cotton chiu moraux jaffe luzzatto hasan t1 tvonb lne1 labelstest shorthand biblatex-biber-1.8/t/tdata/endnote.xml000444000000000000 2253444412230324176 17331 0ustar00rootroot000000000000 My EndNote Library.enl EndNote 1 1 6 <style face="normal" font="default" size="100%">Federal expenditure policies for economic growth and stability : report of the subcommittee on Fiscal Policy to the Joint Economic Committee, Congress of the United States</style> My EndNote Library.enl EndNote 2 2 6 <style face="normal" font="default" size="100%">Handbook of mathematical psychology 2. Chapters 9-14</style> My EndNote Library.enl EndNote 3 3 27 <style face="normal" font="default" size="100%">The Future of Public Health</style> My EndNote Library.enl EndNote 4 4 27 <style face="normal" font="default" size="100%">A Report to the President and Congress on the Status of Health Professions Personnel in the United States</style> My EndNote Library.enl EndNote 5 5 27 <style face="normal" font="default" size="100%">Transforming State Health Agencies to Meet Current and Future Challenges</style> My EndNote Library.enl EndNote 6 6 17 <style face="normal" font="default" size="100%">Achievements in public health, 1900-1999: Changes in the public health system (Reprinted from MMWR, vol 48, pg 1141-1147, 1999)</style> My EndNote Library.enl EndNote 7 7 17 <style face="normal" font="default" size="100%">Joint resolution in support of National Public Health Performance Standards Program</style> My EndNote Library.enl EndNote 8 8 27 <style face="normal" font="default" size="100%">Issue Brief: Resources for States Considering Health Agency Reorganization</style> My EndNote Library.enl EndNote 9 9 27 <style face="normal" font="default" size="100%">Measuring Provider Efficiency, Version 1.0, A Collaborative Multi-Stakeholder Effort</style> My EndNote Library.enl EndNote 10 10 27 <style face="normal" font="default" size="100%">2005 National Profile of Local Health Departments</style> My EndNote Library.enl EndNote 11 11 27 <style face="normal" font="default" size="100%">Shortchanging America’s Health 2006: a state-by-state look at how federal public health dollars are spent</style> My EndNote Library.enl EndNote 12 12 27 <style face="normal" font="default" size="100%">America’s Health Rankings 2006</style> My EndNote Library.enl EndNote 13 13 17 <style face="normal" font="default" size="100%">Guiding principles for development of ACIP recommendations for vaccination during pregnancy and breastfeeding</style> My EndNote Library.enl EndNote 14 14 17 <style face="normal" font="default" size="100%">Impact of expanded newborn screening--United States, 2006</style> My EndNote Library.enl EndNote 15 15 17 <style face="normal" font="default" size="100%">National, state, and local area vaccination coverage among children aged 19-35 months--United States, 2007</style> My EndNote Library.enl EndNote 16 16 17 <style face="normal" font="default" size="100%">State-specific influenza vaccination coverage among adults--United States, 2006-07 influenza season</style> My EndNote Library.enl EndNote 17 17 17 <style face="normal" font="default" size="100%">State-specific prevalence of obesity among adults--United States, 2007</style> My EndNote Library.enl EndNote 18 18 17 <style face="normal" font="default" size="100%">Subpopulation estimates from the HIV incidence surveillance system--United States, 2006</style> My EndNote Library.enl EndNote 19 19 17 <style face="normal" font="default" size="100%">Use of enhanced surveillance for hepatitis C virus infection to detect a cluster among young injection-drug users--new York, November 2004-April 2007</style> My EndNote Library.enl EndNote 20 20 17 <style face="normal" font="default" size="100%">Assessment of epidemiology capacity in State Health Departments - United States, 2009</style> My EndNote Library.enl EndNote 21 21 17 <style face="normal" font="default" size="100%">Influenza vaccination coverage among children aged 6-23 months - United States, 2007-08 influenza season</style> My EndNote Library.enl EndNote 22 22 17 <style face="normal" font="default" size="100%">Influenza vaccination coverage among children aged 6 months--18 years - eight immunization information system sentinel sites, United States, 2008-09 influenza season</style> My EndNote Library.enl EndNote 23 23 17 <style face="normal" font="default" size="100%">Influenza vaccination coverage among children and adults - United States, 2008-09 influenza season</style> My EndNote Library.enl EndNote 24 24 17 <style face="normal" font="default" size="100%">Laboratory surveillance for wild and vaccine-derived polioviruses - worldwide, January 2008-June 2009</style> My EndNote Library.enl EndNote 25 25 17 <style face="normal" font="default" size="100%">National laboratory inventories for wild poliovirus containment--Western Pacific region, 2008</style> My EndNote Library.enl EndNote 26 26 17 <style face="normal" font="default" size="100%">National, state, and local area vaccination coverage among adolescents aged 13-17 years--United States, 2008</style> My EndNote Library.enl EndNote 27 27 17 <style face="normal" font="default" size="100%">National, state, and local area vaccination coverage among children aged 19-35 months - United States, 2008</style> My EndNote Library.enl EndNote 28 28 17 <style face="normal" font="default" size="100%">Reduced hospitalizations for acute myocardial infarction after implementation of a smoke-free ordinance--City of Pueblo, Colorado, 2002-2006</style> My EndNote Library.enl EndNote 29 29 17 <style face="normal" font="default" size="100%">Reduction in rotavirus after vaccine introduction--United States, 2000-2009</style> My EndNote Library.enl EndNote 30 30 17 <style face="normal" font="default" size="100%">State-specific secondhand smoke exposure and current cigarette smoking among adults - United States, 2008</style> My EndNote Library.enl EndNote 31 31 17 <style face="normal" font="default" size="100%">Status of state electronic disease surveillance systems--United States, 2007</style> My EndNote Library.enl EndNote 32 32 17 <style face="normal" font="default" size="100%">Surveillance for pediatric deaths associated with 2009 pandemic influenza A (H1N1) virus infection - United States, April-August 2009</style> My EndNote Library.enl EndNote 33 33 17 <style face="normal" font="default" size="100%">Progress in immunization information systems - United States, 2008</style> My EndNote Library.enl EndNote 34 34 17 <style face="normal" font="default" size="100%">Building and measuring infrastructure and capacity for community health assessment and health improvement planning in Florida</style> My EndNote Library.enl EndNote 35 35 17 <style face="normal" font="default" size="100%">Community health centers and emergency preparedness: an assessment of competencies and training needs</style> My EndNote Library.enl EndNote 36 36 17 <style face="normal" font="default" size="100%">Emerging issues in improving food and physical activity environments: strategies for addressing land use, transportation, and safety in 3 California-wide initiatives</style> My EndNote Library.enl EndNote 37 37 17 <style face="normal" font="default" size="100%">Assessing the legal and ethical preparedness of master of public health graduates</style> My EndNote Library.enl EndNote 38 38 17 <style face="normal" font="default" size="100%">Lack of health insurance coverage among working-age adults, evidence from the Behavioral Risk Factor Surveillance System, 1993-2006</style> My EndNote Library.enl EndNote 39 39 17 <style face="normal" font="default" size="100%">Effect of hand hygiene on infectious disease risk in the community setting: a meta-analysis</style> My EndNote Library.enl EndNote 40 40 34 <style face="normal" font="default" size="100%">Decentralization and public provision of public goods: the public health sector in Uganda</style> My EndNote Library.enl EndNote 41 41 17 <style face="normal" font="default" size="100%">Health security as a public health concept: a critical analysis</style> My EndNote Library.enl EndNote 42 42 17 <style face="normal" font="default" size="100%">The role of public policies in reducing mental health status disparities for people of color</style> My EndNote Library.enl EndNote 43 43 17 <style face="normal" font="default" size="100%">Ensuring the success of local public health workforce assessments: using a participatory-based research approach with a rural population</style> My EndNote Library.enl EndNote 44 44 17 <style face="normal" font="default" size="100%">Partnering to meet training needs: a communicable-disease continuing education course for public health nurses in North Carolina</style> My EndNote Library.enl EndNote 45 45 17 <style face="normal" font="default" size="100%">A new Helsinki Declaration--but what about public health research?</style> My EndNote Library.enl EndNote 46 46 17 <style face="normal" font="default" size="100%">Challenges in sustaining public health interventions</style> My EndNote Library.enl EndNote 47 47 17 PTA <style face="normal" font="default" size="100%">Percent total attrition: a poor metric for study rigor in hosted intervention designs</style> My EndNote Library.enl EndNote 48 48 17 <style face="normal" font="default" size="100%">Evidence-based public health policy and practice: promises and limits</style> My EndNote Library.enl EndNote 49 49 17 <style face="normal" font="default" size="100%">The public sector in health care: Evolution or dissolution</style> My EndNote Library.enl EndNote 50 50 17 <style face="normal" font="default" size="100%">Community, service, and policy strategies to improve health care access in the changing urban environment</style> My EndNote Library.enl EndNote 51 51 17 <style face="normal" font="default" size="100%">Health system outcomes and determinants amenable to public health in industrialized countries: a pooled, cross-sectional time series analysis</style> My EndNote Library.enl EndNote 52 52 17 <style face="normal" font="default" size="100%">Community effectiveness of public water fluoridation in reducing children's dental disease</style> My EndNote Library.enl EndNote 53 53 13 <style face="normal" font="default" size="100%">Building an evidence base for public health systems research</style> My EndNote Library.enl EndNote 54 54 17 <style face="normal" font="default" size="100%">A review of instruments assessing public health preparedness</style> My EndNote Library.enl EndNote 55 55 17 <style face="normal" font="default" size="100%">Regulation, financial incentives, and the production of quality</style> My EndNote Library.enl EndNote 56 56 17 <style face="normal" font="default" size="100%">Physician evaluations of care management practices in Medicaid programs</style> My EndNote Library.enl EndNote 57 57 17 <style face="normal" font="default" size="100%">Survey of city/county public health agencies to determine the development, use, and effect of program performance standards</style> My EndNote Library.enl EndNote 58 58 17 <style face="normal" font="default" size="100%">National Public Health Performance Standards assessment: first steps in strengthening North Dakota's public health system</style> My EndNote Library.enl EndNote 59 59 13 <style face="normal" font="default" size="100%">Pilot study of public health workforce competency, agency capacity and performance</style> My EndNote Library.enl EndNote 60 60 17 <style face="normal" font="default" size="100%">Address the current workforce</style> My EndNote Library.enl EndNote 61 61 17 <style face="normal" font="default" size="100%">Building the legal foundation for an effective public health system</style> My EndNote Library.enl EndNote 62 62 17 <style face="normal" font="default" size="100%">Creating the Management Academy for Public Health: relationships are primary</style> My EndNote Library.enl EndNote 63 63 17 <style face="normal" font="default" size="100%">CDC's Information Network for Public Health Officials (INPHO): a framework for integrated public health information and practice</style> My EndNote Library.enl EndNote 64 64 17 <style face="normal" font="default" size="100%">Strengthening the nation's public health infrastructure: historic challenge, unprecedented opportunity</style> My EndNote Library.enl EndNote 65 65 17 <style face="normal" font="default" size="100%">Health reform and the health of the public. Forging community health partnerships</style> My EndNote Library.enl EndNote 66 66 17 <style face="normal" font="default" size="100%">The health alert network: partnerships, politics, and preparedness</style> My EndNote Library.enl EndNote 67 67 17 <style face="normal" font="default" size="100%">Practicing management and leadership: creating the information network for public health officials</style> My EndNote Library.enl EndNote 68 68 17 <style face="normal" font="default" size="100%">The public health infrastructure and our nation's health</style> My EndNote Library.enl EndNote 69 69 17 <style face="normal" font="default" size="100%">Information and surveillance systems and community health: building the public health information infrastructure</style> My EndNote Library.enl EndNote 70 70 17 <style face="normal" font="default" size="100%">Linking agency accreditation to workforce credentialing: a few steps along a difficult path</style> My EndNote Library.enl EndNote 71 71 17 <style face="normal" font="default" size="100%">Reducing health disparities through community-based research</style> My EndNote Library.enl EndNote 72 72 17 <style face="normal" font="default" size="100%">Developing national performance standards for local public health systems</style> My EndNote Library.enl EndNote 73 73 17 <style face="normal" font="default" size="100%">Developing national performance standards for local public health systems</style> My EndNote Library.enl EndNote 74 74 17 <style face="normal" font="default" size="100%">Access to specialty health care for rural American Indians in two states</style> My EndNote Library.enl EndNote 75 75 17 <style face="normal" font="default" size="100%">Complementary competencies: public health and health sciences librarianship</style> My EndNote Library.enl EndNote 76 76 17 <style face="normal" font="default" size="100%">Integrating child health information systems in public health agencies</style> My EndNote Library.enl EndNote 77 77 17 <style face="normal" font="default" size="100%">Protecting home health care workers: a challenge to pandemic influenza preparedness planning</style> My EndNote Library.enl EndNote 78 78 17 <style face="normal" font="default" size="100%">Partnerships for environmental and occupational justice: contributions to research, capacity and public health</style> My EndNote Library.enl EndNote 79 79 17 <style face="normal" font="default" size="100%">A research protocol to evaluate the effectiveness of public - Private partnerships as a means to improve health and welfare systems worldwide</style> My EndNote Library.enl EndNote 80 80 17 <style face="normal" font="default" size="100%">The use of the National Public Health Performance Standards to evaluate change in capacity to carry out the 10 essential services</style> My EndNote Library.enl EndNote 81 81 17 <style face="normal" font="default" size="100%">How can performance standards enhance accountability for public health?</style> My EndNote Library.enl EndNote 82 82 17 <style face="normal" font="default" size="100%">Measuring public health performance: a call to action</style> My EndNote Library.enl EndNote 83 83 17 <style face="normal" font="default" size="100%">Do estimates of cost-utility based on the EQ-5D differ from those based on the mapping of utility scores?</style> My EndNote Library.enl EndNote 84 84 17 <style face="normal" font="default" size="100%">Improving influenza vaccination performance in an HMO setting: the use of computer-generated reminders and peer comparison feedback</style> My EndNote Library.enl EndNote 85 85 17 <style face="normal" font="default" size="100%">Epidemiology competency development and application to training for local and regional public health practitioners</style> My EndNote Library.enl EndNote 86 86 17 <style face="normal" font="default" size="100%">Influencing design, promoting health</style> My EndNote Library.enl EndNote 87 87 17 <style face="normal" font="default" size="100%">Assessing public health department employees' willingness to report to work during an influenza pandemic</style> My EndNote Library.enl EndNote 88 88 17 <style face="normal" font="default" size="100%">Persistent disparities in the use of health care along the US-Mexico border: an ecological perspective</style> My EndNote Library.enl EndNote 89 89 17 <style face="normal" font="default" size="100%">Health technology assessment and public health: a time for convergence</style> My EndNote Library.enl EndNote 90 90 17 <style face="normal" font="default" size="100%">Looking ahead: addressing ethical challenges in public health practice</style> My EndNote Library.enl EndNote 91 91 17 <style face="normal" font="default" size="100%">Enhancement of influenza surveillance with aggregate rapid influenza test results: New Mexico, 2003-2007</style> My EndNote Library.enl EndNote 92 92 17 <style face="normal" font="default" size="100%">Public-private collaboration in health and human service delivery: Evidence from community partnerships</style> My EndNote Library.enl EndNote 93 93 17 <style face="normal" font="default" size="100%">Setting national health goals and targets in the context of a fiscal crisis: the politics of social choice in New Zealand</style> My EndNote Library.enl EndNote 94 94 17 <style face="normal" font="default" size="100%">Dual method use in adolescents: A review and framework for research on use of STD and pregnancy protection</style> My EndNote Library.enl EndNote 95 95 17 <style face="normal" font="default" size="100%">Assessment of validity of the National Public Health Performance Standards: The local public health performance assessment instrument</style> My EndNote Library.enl EndNote 96 96 17 <style face="normal" font="default" size="100%">Content and criterion validity evaluation of National Public Health Performance Standards measurement instruments</style> My EndNote Library.enl EndNote 97 97 17 <style face="normal" font="default" size="100%">Recommendations from testing of the National Public Health Performance Standards instruments</style> My EndNote Library.enl EndNote 98 98 17 <style face="normal" font="default" size="100%">The forgotten instrument: analysis of the national public health performance standards program governance instrument</style> My EndNote Library.enl EndNote 99 99 17 <style face="normal" font="default" size="100%">Perspectives on research among Kansas County health department administrators</style> My EndNote Library.enl EndNote 100 100 17 <style face="normal" font="default" size="100%">Structure and functions of state public health agencies</style> My EndNote Library.enl EndNote 101 101 17 <style face="normal" font="default" size="100%">Public health at center stage: new roles, old props</style> My EndNote Library.enl EndNote 102 102 17 <style face="normal" font="default" size="100%">Accountability: the fast lane on the highway to change</style> My EndNote Library.enl EndNote 103 103 17 <style face="normal" font="default" size="100%">Roles of local public health agencies within the state public health system</style> My EndNote Library.enl EndNote 104 104 17 <style face="normal" font="default" size="100%">States gathering momentum: Promising strategies for accreditation and assessment activities in multistate learning collaborative applicant states</style> My EndNote Library.enl EndNote 105 105 17 <style face="normal" font="default" size="100%">The Multistate Learning Collaborative, states as laboratories: Informing the National Public Health Accreditation dialogue</style> My EndNote Library.enl EndNote 106 106 17 <style face="normal" font="default" size="100%">Credentialing for public health nurses: personally valued ... But not well recognized</style> My EndNote Library.enl EndNote 107 107 17 <style face="normal" font="default" size="100%">Nurses' utilization and perception of the community/public health nursing credential</style> My EndNote Library.enl EndNote 108 108 17 <style face="normal" font="default" size="100%">Turning point sets the stage for emergency preparedness planning</style> My EndNote Library.enl EndNote 109 109 17 <style face="normal" font="default" size="100%">Making the case: leveraging resources toward public health system improvement in Turning Point states</style> My EndNote Library.enl EndNote 110 110 17 <style face="normal" font="default" size="100%">Avian flu school: a training approach to prepare for H5N1 highly pathogenic avian influenza</style> My EndNote Library.enl EndNote 111 111 17 <style face="normal" font="default" size="100%">Legal rights during pandemics: federalism, rights and public health laws--a view from Australia</style> My EndNote Library.enl EndNote 112 112 17 <style face="normal" font="default" size="100%">The delivery of public health interventions via the Internet: actualizing their potential</style> My EndNote Library.enl EndNote 113 113 17 <style face="normal" font="default" size="100%">Social epidemiology: social determinants of health in the United States: are we losing ground?</style> My EndNote Library.enl EndNote 114 114 17 <style face="normal" font="default" size="100%">Rural public health: Policy and research opportunities</style> My EndNote Library.enl EndNote 115 115 17 <style face="normal" font="default" size="100%">Turning Point's Legacy</style> My EndNote Library.enl EndNote 116 116 17 <style face="normal" font="default" size="100%">Local public health agency funding: money begets money</style> My EndNote Library.enl EndNote 117 117 17 <style face="normal" font="default" size="100%">Principled leadership in public health: integrating ethics into practice and management</style> My EndNote Library.enl EndNote 118 118 17 <style face="normal" font="default" size="100%">Defining competition in markets: why and how?</style> My EndNote Library.enl EndNote 119 119 17 <style face="normal" font="default" size="100%">Building the science base for public health practice</style> My EndNote Library.enl EndNote 120 120 17 <style face="normal" font="default" size="100%">Health human resources planning and the production of health: development of an extended analytical framework for needs-based health human resources planning</style> My EndNote Library.enl EndNote 121 121 17 <style face="normal" font="default" size="100%">Developing competencies for applied epidemiology: from process to product</style> My EndNote Library.enl EndNote 122 122 17 <style face="normal" font="default" size="100%">Public health capacity building--not only the property of the medical profession</style> My EndNote Library.enl EndNote 123 123 17 <style face="normal" font="default" size="100%">Health services research: the gradual encroachment of ideas</style> My EndNote Library.enl EndNote 124 124 17 <style face="normal" font="default" size="100%">Disparities in health: perspectives of a multi-ethnic, multi-racial America</style> My EndNote Library.enl EndNote 125 125 17 <style face="normal" font="default" size="100%">Disparities in physician care: experiences and perceptions of a multi-ethnic America</style> My EndNote Library.enl EndNote 126 126 17 <style face="normal" font="default" size="100%">Toward a more analytic framework for public health workforce research</style> My EndNote Library.enl EndNote 127 127 17 <style face="normal" font="default" size="100%">Assessment of epidemiology capacity in state health departments, 2001-2006</style> My EndNote Library.enl EndNote 128 128 17 <style face="normal" font="default" size="100%">Pandemic influenza preparedness and response among public-housing residents, single-parent families, and low-income populations</style> My EndNote Library.enl EndNote 129 129 17 <style face="normal" font="default" size="100%">Managed care and the health of a nation</style> My EndNote Library.enl EndNote 130 130 17 <style face="normal" font="default" size="100%">The role of regulation in quality improvement</style> My EndNote Library.enl EndNote 131 131 17 <style face="normal" font="default" size="100%">Aligning public health financing with essential public health service functions and National Public Health Performance Standards</style> My EndNote Library.enl EndNote 132 132 17 <style face="normal" font="default" size="100%">A comparative cost analysis of newborn screening for classic congenital adrenal hyperplasia in Texas</style> My EndNote Library.enl EndNote 133 133 17 <style face="normal" font="default" size="100%">Adaptive designs for randomized trials in public health</style> My EndNote Library.enl EndNote 134 134 17 <style face="normal" font="default" size="100%">Understanding evidence-based public health policy</style> My EndNote Library.enl EndNote 135 135 17 <style face="normal" font="default" size="100%">Evidence-based public health: a fundamental concept for public health practice</style> My EndNote Library.enl EndNote 136 136 17 <style face="normal" font="default" size="100%">Lessons learned from Chicago's emergency response to mass evacuations caused by Hurricane Katrina</style> My EndNote Library.enl EndNote 137 137 17 <style face="normal" font="default" size="100%">The Stanford Health Assessment Questionnaire: dimensions and practical applications</style> My EndNote Library.enl EndNote 138 138 17 <style face="normal" font="default" size="100%">Impact of a household environmental intervention delivered by lay health workers on asthma symptom control in urban, disadvantaged children with asthma</style> My EndNote Library.enl EndNote 139 139 17 <style face="normal" font="default" size="100%">Challenges in defining an optimal approach to formula-based allocations of public health funds in the United States</style> My EndNote Library.enl EndNote 140 140 17 <style face="normal" font="default" size="100%">Who gets how much: funding formulas in federal public health programs</style> My EndNote Library.enl EndNote 141 141 17 <style face="normal" font="default" size="100%">Business and public health collaboration for emergency preparedness in Georgia: a case study</style> My EndNote Library.enl EndNote 142 142 17 <style face="normal" font="default" size="100%">The Quality of Life Scale (QOLS): reliability, validity, and utilization</style> My EndNote Library.enl EndNote 143 143 17 <style face="normal" font="default" size="100%">The health information technology provisions in the American Recovery and Reinvestment Act of 2009: implications for public health policy and practice</style> My EndNote Library.enl EndNote 144 144 17 <style face="normal" font="default" size="100%">Hospital purchasing alliances: utilization, services, and performance</style> My EndNote Library.enl EndNote 145 145 17 <style face="normal" font="default" size="100%">Perceptions of smoking prevalence by youth in countries with and without a tobacco advertising ban</style> My EndNote Library.enl EndNote 146 146 17 <style face="normal" font="default" size="100%">Accreditation/Performance assessment on-site reviews in Michigan, Missouri, North Carolina, and Washington: implications for States and an evolving national model</style> My EndNote Library.enl EndNote 147 147 17 <style face="normal" font="default" size="100%">The Partners in Information Access for the Public Health Workforce: a collaboration to improve and protect the public's health, 1995-2006</style> My EndNote Library.enl EndNote 148 148 17 <style face="normal" font="default" size="100%">Development of a core competency model for the master of public health degree</style> My EndNote Library.enl EndNote 149 149 17 <style face="normal" font="default" size="100%">Preparing for and responding to pandemic influenza: implications for people with disabilities</style> My EndNote Library.enl EndNote 150 150 17 <style face="normal" font="default" size="100%">Purchasing patterns and smoking behaviors after a large tobacco tax increase: a study of Chinese Americans living in New York City</style> My EndNote Library.enl EndNote 151 151 17 <style face="normal" font="default" size="100%">Public goods and externalities: a research agenda for public health economics</style> My EndNote Library.enl EndNote 152 152 17 <style face="normal" font="default" size="100%">Investigating a cluster of Legionnaires' cases: public health implications</style> My EndNote Library.enl EndNote 153 153 17 <style face="normal" font="default" size="100%">The power and the promise: working with communities to analyze data, interpret findings, and get to outcomes</style> My EndNote Library.enl EndNote 154 154 17 <style face="normal" font="default" size="100%">Is public health ready for a professional practice framework?</style> My EndNote Library.enl EndNote 155 155 17 <style face="normal" font="default" size="100%">Update: Recommendations of the Advisory Committee on Immunization Practices (ACIP) regarding use of CSL seasonal influenza vaccine (Afluria) in the United States during 2010-11</style> My EndNote Library.enl EndNote 156 156 17 <style face="normal" font="default" size="100%">Surveillance for foodborne disease outbreaks --- United States, 2007</style> My EndNote Library.enl EndNote 157 157 17 <style face="normal" font="default" size="100%">Evaluation of acute hepatitis C infection surveillance --- United States, 2008</style> My EndNote Library.enl EndNote 158 158 17 <style face="normal" font="default" size="100%">State-specific prevalence of cigarette smoking and smokeless tobacco use among adults --- United States, 2009</style> My EndNote Library.enl EndNote 159 159 17 <style face="normal" font="default" size="100%">Global routine vaccination coverage, 2009</style> My EndNote Library.enl EndNote 160 160 17 <style face="normal" font="default" size="100%">Tetanus and pertussis vaccination coverage among adults aged >/= 18 years --- United States, 1999 and 2008</style> My EndNote Library.enl EndNote 161 161 17 <style face="normal" font="default" size="100%">Influenza activity --- United States and worldwide, June 13-September 25, 2010</style> My EndNote Library.enl EndNote 162 162 17 <style face="normal" font="default" size="100%">Seasonal influenza vaccination coverage among children aged 6 months-18 years --- eight immunization information system sentinel sites, United States, 2009-10 influenza season</style> My EndNote Library.enl EndNote 163 163 17 <style face="normal" font="default" size="100%">Impact of expanded newborn screening--United States, 2006</style> My EndNote Library.enl EndNote 164 164 17 <style face="normal" font="default" size="100%">National, state, and local area vaccination coverage among children aged 19-35 months--United States, 2007</style> My EndNote Library.enl EndNote 165 165 17 <style face="normal" font="default" size="100%">State-specific influenza vaccination coverage among adults--United States, 2006-07 influenza season</style> My EndNote Library.enl EndNote 166 166 17 <style face="normal" font="default" size="100%">State-specific prevalence of obesity among adults--United States, 2007</style> My EndNote Library.enl EndNote 167 167 17 <style face="normal" font="default" size="100%">Subpopulation estimates from the HIV incidence surveillance system--United States, 2006</style> My EndNote Library.enl EndNote 168 168 17 <style face="normal" font="default" size="100%">Use of enhanced surveillance for hepatitis C virus infection to detect a cluster among young injection-drug users--new York, November 2004-April 2007</style> My EndNote Library.enl EndNote 169 169 17 <style face="normal" font="default" size="100%">2009 pandemic influenza A (H1N1) virus infections - Chicago, Illinois, April-July 2009</style> My EndNote Library.enl EndNote 170 170 17 <style face="normal" font="default" size="100%">Adult blood lead epidemiology and surveillance--United States, 2005-2007</style> My EndNote Library.enl EndNote 171 171 17 <style face="normal" font="default" size="100%">Assessment of epidemiology capacity in State Health Departments - United States, 2009</style> My EndNote Library.enl EndNote 172 172 17 <style face="normal" font="default" size="100%">Deaths related to 2009 pandemic influenza A (H1N1) among American Indian/Alaska Natives - 12 states, 2009</style> My EndNote Library.enl EndNote 173 173 17 <style face="normal" font="default" size="100%">Effectiveness of 2008-09 trivalent influenza vaccine against 2009 pandemic influenza A (H1N1) - United States, May-June 2009</style> My EndNote Library.enl EndNote 174 174 17 <style face="normal" font="default" size="100%">Impact of seasonal influenza-related school closures on families - Southeastern Kentucky, February 2008</style> My EndNote Library.enl EndNote 175 175 17 <style face="normal" font="default" size="100%">Influenza vaccination coverage among children aged 6-23 months - United States, 2007-08 influenza season</style> My EndNote Library.enl EndNote 176 176 17 <style face="normal" font="default" size="100%">Influenza vaccination coverage among children aged 6 months--18 years - eight immunization information system sentinel sites, United States, 2008-09 influenza season</style> My EndNote Library.enl EndNote 177 177 17 <style face="normal" font="default" size="100%">Influenza vaccination coverage among children and adults - United States, 2008-09 influenza season</style> My EndNote Library.enl EndNote 178 178 17 <style face="normal" font="default" size="100%">Intent to receive influenza A (H1N1) 2009 monovalent and seasonal influenza vaccines - two counties, North Carolina, August 2009</style> My EndNote Library.enl EndNote 179 179 17 <style face="normal" font="default" size="100%">Laboratory surveillance for wild and vaccine-derived polioviruses - worldwide, January 2008-June 2009</style> My EndNote Library.enl EndNote 180 180 17 <style face="normal" font="default" size="100%">National laboratory inventories for wild poliovirus containment--Western Pacific region, 2008</style> My EndNote Library.enl EndNote 181 181 17 <style face="normal" font="default" size="100%">National, state, and local area vaccination coverage among adolescents aged 13-17 years--United States, 2008</style> My EndNote Library.enl EndNote 182 182 17 <style face="normal" font="default" size="100%">National, state, and local area vaccination coverage among children aged 19-35 months - United States, 2008</style> My EndNote Library.enl EndNote 183 183 17 <style face="normal" font="default" size="100%">Norovirus outbreaks on three college campuses - California, Michigan, and Wisconsin, 2008</style> My EndNote Library.enl EndNote 184 184 17 <style face="normal" font="default" size="100%">Performance of rapid influenza diagnostic tests during two school outbreaks of 2009 pandemic influenza A (H1N1) virus infection - Connecticut, 2009</style> My EndNote Library.enl EndNote 185 185 17 <style face="normal" font="default" size="100%">Preliminary FoodNet Data on the incidence of infection with pathogens transmitted commonly through food--10 States, 2008</style> My EndNote Library.enl EndNote 186 186 17 <style face="normal" font="default" size="100%">Reduced hospitalizations for acute myocardial infarction after implementation of a smoke-free ordinance--City of Pueblo, Colorado, 2002-2006</style> My EndNote Library.enl EndNote 187 187 17 <style face="normal" font="default" size="100%">Reduction in rotavirus after vaccine introduction--United States, 2000-2009</style> My EndNote Library.enl EndNote 188 188 17 <style face="normal" font="default" size="100%">State-specific prevalence and trends in adult cigarette smoking--United States, 1998-2007</style> My EndNote Library.enl EndNote 189 189 17 <style face="normal" font="default" size="100%">State-specific secondhand smoke exposure and current cigarette smoking among adults - United States, 2008</style> My EndNote Library.enl EndNote 190 190 17 <style face="normal" font="default" size="100%">Status of state electronic disease surveillance systems--United States, 2007</style> My EndNote Library.enl EndNote 191 191 17 <style face="normal" font="default" size="100%">Surveillance for pediatric deaths associated with 2009 pandemic influenza A (H1N1) virus infection - United States, April-August 2009</style> My EndNote Library.enl EndNote 192 192 17 <style face="normal" font="default" size="100%">Update on influenza A (H1N1) 2009 monovalent vaccines</style> My EndNote Library.enl EndNote 193 193 17 <style face="normal" font="default" size="100%">Update on vaccine-derived polioviruses--worldwide, January 2008-June 2009</style> My EndNote Library.enl EndNote 194 194 17 <style face="normal" font="default" size="100%">Update: influenza activity - United States, August 30-October 31, 2009</style> My EndNote Library.enl EndNote 195 195 17 <style face="normal" font="default" size="100%">Update: influenza activity--United States, April-August 2009</style> My EndNote Library.enl EndNote 196 196 17 <style face="normal" font="default" size="100%">Update: influenza activity--United States, September 28, 2008-April 4, 2009, and composition of the 2009-10 influenza vaccine</style> My EndNote Library.enl EndNote 197 197 17 <style face="normal" font="default" size="100%">Updated recommendation from the Advisory Committee on Immunization Practices (ACIP) for revaccination of persons at prolonged increased risk for meningococcal disease</style> My EndNote Library.enl EndNote 198 198 17 <style face="normal" font="default" size="100%">Updated recommendations from the Advisory Committee on Immunization Practices (ACIP) for use of hepatitis A vaccine in close contacts of newly arriving international adoptees</style> My EndNote Library.enl EndNote 199 199 17 <style face="normal" font="default" size="100%">Tracking diabetes: New York City's A1C Registry</style> My EndNote Library.enl EndNote 200 200 17 <style face="normal" font="default" size="100%">The effects of group size and group economic factors on collaboration: a study of the financial performance of rural hospitals in consortia</style> My EndNote Library.enl EndNote 201 201 17 <style face="normal" font="default" size="100%">Teaching emergency preparedness to public health workers: use of blended learning in web-based training</style> My EndNote Library.enl EndNote 202 202 17 <style face="normal" font="default" size="100%">Performance-based contracting in Wisconsin public health: transforming state-local relations</style> My EndNote Library.enl EndNote 203 203 17 <style face="normal" font="default" size="100%">Involving Local Health Departments in Community Health Partnerships: Evaluation Results from the Partnership for the Public's Health Initiative</style> My EndNote Library.enl EndNote 204 204 17 <style face="normal" font="default" size="100%">Approaches to measuring the extent and impact of environmental change in three California community-level obesity prevention initiatives</style> My EndNote Library.enl EndNote 205 205 17 <style face="normal" font="default" size="100%">Administrator self-ratings of organization capacity and performance of healthy community development projects in Taiwan</style> My EndNote Library.enl EndNote 206 206 17 <style face="normal" font="default" size="100%">US health educators' likelihood of adopting genomic competencies into health promotion</style> My EndNote Library.enl EndNote 207 207 17 <style face="normal" font="default" size="100%">The economic cost of environmental factors among North Carolina children living in substandard housing</style> My EndNote Library.enl EndNote 208 208 17 <style face="normal" font="default" size="100%">Does funding for HIV and sexually transmitted disease prevention matter? Evidence from panel data</style> My EndNote Library.enl EndNote 209 209 17 <style face="normal" font="default" size="100%">A rights-based approach to food insecurity in the United States</style> My EndNote Library.enl EndNote 210 210 17 <style face="normal" font="default" size="100%">Assessment of a commercial searchable population directory as a means of selecting controls for case-control studies</style> My EndNote Library.enl EndNote 211 211 17 <style face="normal" font="default" size="100%">Enhancing legal preparedness for the prevention and control of infectious diseases: experience from severe acute respiratory syndrome in Hong Kong</style> My EndNote Library.enl EndNote 212 212 17 <style face="normal" font="default" size="100%">Real-time public health surveillance for emergency preparedness</style> My EndNote Library.enl EndNote 213 213 17 <style face="normal" font="default" size="100%">Credentialing the public health workforce: an idea whose time has come</style> My EndNote Library.enl EndNote 214 214 17 <style face="normal" font="default" size="100%">A research agenda for public health workforce development</style> My EndNote Library.enl EndNote 215 215 17 <style face="normal" font="default" size="100%">Health policy roundtable: Producing and adapting research syntheses for use by health-system managers and public policymakers</style> My EndNote Library.enl EndNote 216 216 17 <style face="normal" font="default" size="100%">Policy and system change and community coalitions: outcomes from allies against asthma</style> My EndNote Library.enl EndNote 217 217 17 <style face="normal" font="default" size="100%">Schools of public health: essential infrastructure of a responsible society and a 21st-century health system</style> My EndNote Library.enl EndNote 218 218 17 <style face="normal" font="default" size="100%">Practicing what they preach: health behaviors of those who provide health advice to extensive social networks</style> My EndNote Library.enl EndNote 219 219 17 <style face="normal" font="default" size="100%">Building a bridge to accreditation--the role of the National Public Health Performance Standards Program</style> My EndNote Library.enl EndNote 220 220 17 <style face="normal" font="default" size="100%">Using the essential services as a foundation for performance measurement and assessment of local public health systems</style> My EndNote Library.enl EndNote 221 221 17 <style face="normal" font="default" size="100%">The health of the Delta Region: a story of increasing disparities</style> My EndNote Library.enl EndNote 222 222 13 <style face="normal" font="default" size="100%">Assessment of training needs for public health financial managers</style> My EndNote Library.enl EndNote 223 223 17 <style face="normal" font="default" size="100%">Public health financial management needs: report of a national survey</style> My EndNote Library.enl EndNote 224 224 17 <style face="normal" font="default" size="100%">Public health preparedness and response capacity inventory validity study</style> My EndNote Library.enl EndNote 225 225 6 <style face="normal" font="default" size="100%">Complexity : metaphors, models, and reality</style> My EndNote Library.enl EndNote 226 226 17 <style face="normal" font="default" size="100%">Drinking on the dirt roads of America: NACCHO's Impaired Driving Prevention in Rural Communities demonstration site project</style> My EndNote Library.enl EndNote 227 227 17 <style face="normal" font="default" size="100%">Public health professionals as policy entrepreneurs: Arkansas's childhood obesity policy experience</style> My EndNote Library.enl EndNote 228 228 17 <style face="normal" font="default" size="100%">Perspectives on public health workforce research</style> My EndNote Library.enl EndNote 229 229 17 <style face="normal" font="default" size="100%">An assessment of training needs in a rural public health agency: barriers to local public health training</style> My EndNote Library.enl EndNote 230 230 17 <style face="normal" font="default" size="100%">Applied epidemiology competencies: perspectives of a state health officer</style> My EndNote Library.enl EndNote 231 231 17 <style face="normal" font="default" size="100%">Health burden and funding at the Centers for Disease Control and Prevention</style> My EndNote Library.enl EndNote 232 232 17 <style face="normal" font="default" size="100%">Implementing smart growth strategies in rural America: development patterns that support public health goals</style> My EndNote Library.enl EndNote 233 233 17 <style face="normal" font="default" size="100%">Measuring the performance of telephone-based disease surveillance systems in local health departments</style> My EndNote Library.enl EndNote 234 234 17 <style face="normal" font="default" size="100%">Mobilising business through "partnerships for health promotion". New challenges and new opportunities</style> My EndNote Library.enl EndNote 235 235 17 <style face="normal" font="default" size="100%">Integrating occupational health with mainstream public health in Massachusetts: an approach to intervention</style> My EndNote Library.enl EndNote 236 236 17 <style face="normal" font="default" size="100%">Incentives to encourage participation in the national public health accreditation model: a systematic investigation</style> My EndNote Library.enl EndNote 237 237 17 <style face="normal" font="default" size="100%">Evaluation of public health response to hurricanes finds North Carolina better prepared for public health emergencies</style> My EndNote Library.enl EndNote 238 238 17 <style face="normal" font="default" size="100%">Will European agricultural policy for school fruit and vegetables improve public health? A review of school fruit and vegetable programmes</style> My EndNote Library.enl EndNote 239 239 17 <style face="normal" font="default" size="100%">The changing pattern of doctoral education in public health from 1985 to 2006 and the challenge of doctoral training for practice and leadership</style> My EndNote Library.enl EndNote 240 240 17 <style face="normal" font="default" size="100%">The program implications of administrative relationships between local health departments and state and local government</style> My EndNote Library.enl EndNote 241 241 17 <style face="normal" font="default" size="100%">Public health and nutrition after the Spanish Civil War. An intervention by the Rockefeller Foundation</style> My EndNote Library.enl EndNote 242 242 17 <style face="normal" font="default" size="100%">Impact of social position on the effect of cardiovascular risk factors on self-rated health</style> My EndNote Library.enl EndNote 243 243 17 <style face="normal" font="default" size="100%">Developing quality indicators for local health departments - Experience in Los Angeles County</style> My EndNote Library.enl EndNote 244 244 17 <style face="normal" font="default" size="100%">Public health quality measurement: Concepts and challenges</style> My EndNote Library.enl EndNote 245 245 17 <style face="normal" font="default" size="100%">Motorcycle helmets and rider safety: a legislative crisis</style> My EndNote Library.enl EndNote 246 246 17 <style face="normal" font="default" size="100%">Next steps for MAPP</style> My EndNote Library.enl EndNote 247 247 17 <style face="normal" font="default" size="100%">Public health law and the prevention and control of obesity</style> My EndNote Library.enl EndNote 248 248 6 <style face="normal" font="default" size="100%">Explorations in quality assessment and monitoring</style> My EndNote Library.enl EndNote 249 249 17 <style face="normal" font="default" size="100%">The impact of Massachusetts' smoke-free workplace laws on acute myocardial infarction deaths</style> My EndNote Library.enl EndNote 250 250 17 <style face="normal" font="default" size="100%">The Use of Photovoice as a Method of Facilitating Deliberation</style> My EndNote Library.enl EndNote 251 251 17 <style face="normal" font="default" size="100%">The changing face of managed care</style> My EndNote Library.enl EndNote 252 252 17 <style face="normal" font="default" size="100%">Using participatory design to develop (public) health decision support systems through GIS</style> My EndNote Library.enl EndNote 253 253 17 <style face="normal" font="default" size="100%">An instrument for assessing public health system performance: validity in rural settings</style> My EndNote Library.enl EndNote 254 254 17 <style face="normal" font="default" size="100%">An instrument for assessing public health system performance: validity in rural settings</style> My EndNote Library.enl EndNote 255 255 17 <style face="normal" font="default" size="100%">Increasing chronic disease epidemiology capacity without increasing workforce: a success story in Ohio</style> My EndNote Library.enl EndNote 256 256 17 <style face="normal" font="default" size="100%">Reported exposure to pro-tobacco messages in the media: trends among youth in the United States, 2000-2004</style> My EndNote Library.enl EndNote 257 257 17 <style face="normal" font="default" size="100%">Screening for influenza infection in international airline travelers</style> My EndNote Library.enl EndNote 258 258 17 <style face="normal" font="default" size="100%">Use of the global test statistic as a performance measurement in a reanalysis of environmental health data</style> My EndNote Library.enl EndNote 259 259 17 <style face="normal" font="default" size="100%">Construct validity of the core competencies for public health professionals</style> My EndNote Library.enl EndNote 260 260 17 <style face="normal" font="default" size="100%">Promoting regional disaster preparedness among rural hospitals</style> My EndNote Library.enl EndNote 261 261 17 <style face="normal" font="default" size="100%">Utilization of the propensity score method: an exploratory comparison of proxy-completed to self-completed responses in the Medicare Health Outcomes Survey</style> My EndNote Library.enl EndNote 262 262 17 <style face="normal" font="default" size="100%">National Public Health Performance Standards: are they a means of evaluating the local public health system?</style> My EndNote Library.enl EndNote 263 263 17 <style face="normal" font="default" size="100%">Prevention of sexually transmitted diseases - A model for overcoming barriers between managed care and public health</style> My EndNote Library.enl EndNote 264 264 17 <style face="normal" font="default" size="100%">The Olympic and Paralympic Games 2012: literature review of the logistical planning and operational challenges for public health</style> My EndNote Library.enl EndNote 265 265 17 <style face="normal" font="default" size="100%">The performance of local health departments: a review of the literature</style> My EndNote Library.enl EndNote 266 266 17 <style face="normal" font="default" size="100%">A self-assessment process for accreditation preparedness: a practical example for local health departments</style> My EndNote Library.enl EndNote 267 267 17 <style face="normal" font="default" size="100%">Students in the community: MAPP as a framework for academic-public health practice linkages</style> My EndNote Library.enl EndNote 268 268 17 <style face="normal" font="default" size="100%">The Local Public Health System Assessment of MAPP/The National Public Health Performance Standards Local Tool: a community-based, public health practice and academic collaborative approach to implementation</style> My EndNote Library.enl EndNote 269 269 17 <style face="normal" font="default" size="100%">A shot in the rear, not a shot in the dark: application of a mass clinic framework in a public health emergency</style> My EndNote Library.enl EndNote 270 270 17 <style face="normal" font="default" size="100%">Using community-based needs assessments to strengthen nonprofit-government collaboration and service delivery</style> My EndNote Library.enl EndNote 271 271 17 <style face="normal" font="default" size="100%">Preparing for the usual, preparing for the unusual: ethics in routine and emergency public health practice</style> My EndNote Library.enl EndNote 272 272 17 <style face="normal" font="default" size="100%">Commentary: Beyond historical precedent</style> My EndNote Library.enl EndNote 273 273 17 <style face="normal" font="default" size="100%">The importance of education, training and supervision in global TB control</style> My EndNote Library.enl EndNote 274 274 17 <style face="normal" font="default" size="100%">Creating tools for healthy development: case study of San Francisco's Eastern Neighborhoods Community Health Impact Assessment</style> My EndNote Library.enl EndNote 275 275 17 <style face="normal" font="default" size="100%">Addressing adolescent immunization disparities: a retrospective analysis of school-based health center immunization delivery</style> My EndNote Library.enl EndNote 276 276 17 <style face="normal" font="default" size="100%">Commentary: Public health and health care quality assurance--strange bedfellows?</style> My EndNote Library.enl EndNote 277 277 17 <style face="normal" font="default" size="100%">Simple imputation methods were inadequate for missing not at random (MNAR) quality of life data</style> My EndNote Library.enl EndNote 278 278 17 <style face="normal" font="default" size="100%">Simple imputation methods were inadequate for missing not at random (MNAR) quality of life data</style> My EndNote Library.enl EndNote 279 279 17 <style face="normal" font="default" size="100%">Investigating the missing data mechanism in quality of life outcomes: a comparison of approaches</style> My EndNote Library.enl EndNote 280 280 17 <style face="normal" font="default" size="100%">Effectiveness of a community coalition for improving child vaccination rates in New York City</style> My EndNote Library.enl EndNote 281 281 13 <style face="normal" font="default" size="100%">Kentucky HSR Development II</style> My EndNote Library.enl EndNote 282 282 17 <style face="normal" font="default" size="100%">The structure of state health agencies: A strategic analysis</style> My EndNote Library.enl EndNote 283 283 17 <style face="normal" font="default" size="100%">Sustainable network advantages: A game theoretic approach to community-based health care coalitions</style> My EndNote Library.enl EndNote 284 284 17 <style face="normal" font="default" size="100%">Who participates and why: building a process model of citizen participation</style> My EndNote Library.enl EndNote 285 285 17 <style face="normal" font="default" size="100%">Evaluating the community health legacy of WWI chemical weapons testing</style> My EndNote Library.enl EndNote 286 286 17 <style face="normal" font="default" size="100%">The performance of urban and public hospitals and NHCs (neighborhood health centers) under Medicaid capitation programs</style> My EndNote Library.enl EndNote 287 287 17 <style face="normal" font="default" size="100%">Evaluation of the Medicaid competition demonstrations</style> My EndNote Library.enl EndNote 288 288 17 <style face="normal" font="default" size="100%">Public health informatics: how information-age technology can strengthen public health</style> My EndNote Library.enl EndNote 289 289 17 <style face="normal" font="default" size="100%">Is community health assessment worthwhile?</style> My EndNote Library.enl EndNote 290 290 17 <style face="normal" font="default" size="100%">A global assessment of the role of law in the HIV/AIDS pandemic</style> My EndNote Library.enl EndNote 291 291 17 <style face="normal" font="default" size="100%">Preterm birth as a public health initiative</style> My EndNote Library.enl EndNote 292 292 17 <style face="normal" font="default" size="100%">Developing a chart of accounts: historical perspective of the Medical Group Management Association</style> My EndNote Library.enl EndNote 293 293 17 <style face="normal" font="default" size="100%">Advancing quality improvement in public health</style> My EndNote Library.enl EndNote 294 294 17 <style face="normal" font="default" size="100%">Social science, equal justice, and public health policy: lessons from Los Angeles</style> My EndNote Library.enl EndNote 295 295 17 <style face="normal" font="default" size="100%">Public health certification</style> My EndNote Library.enl EndNote 296 296 17 <style face="normal" font="default" size="100%">Public health workforce enumeration</style> My EndNote Library.enl EndNote 297 297 6 <style face="normal" font="default" size="100%">Who will keep the public healthy? : educating public health professionals for the 21st century</style> My EndNote Library.enl EndNote 298 298 17 <style face="normal" font="default" size="100%">The public health workforce, 2006: new challenges</style> My EndNote Library.enl EndNote 299 299 17 <style face="normal" font="default" size="100%">Retirement intentions of the public health nutrition workforce</style> My EndNote Library.enl EndNote 300 300 17 <style face="normal" font="default" size="100%">Protecting health--the new research imperative</style> My EndNote Library.enl EndNote 301 301 17 <style face="normal" font="default" size="100%">Bioterrorism preparedness and response: clinicians and public health agencies as essential partners</style> My EndNote Library.enl EndNote 302 302 17 <style face="normal" font="default" size="100%">Making America fit and trim--steps big and small</style> My EndNote Library.enl EndNote 303 303 17 <style face="normal" font="default" size="100%">Foreword. Public health law, 2002-2003: year of achievement</style> My EndNote Library.enl EndNote 304 304 17 <style face="normal" font="default" size="100%">Innovation in the European Union regarding the coordination between primary and specialized</style> My EndNote Library.enl EndNote 305 305 17 <style face="normal" font="default" size="100%">Full-time employees of U.S. local health departments, 1992-1993</style> My EndNote Library.enl EndNote 306 306 17 <style face="normal" font="default" size="100%">Recent changes in local health department spending</style> My EndNote Library.enl EndNote 307 307 17 <style face="normal" font="default" size="100%">Using geographic information systems and local food store data in California's low-income neighborhoods to inform community initiatives and resources</style> My EndNote Library.enl EndNote 308 308 17 <style face="normal" font="default" size="100%">The personnel economics approach to public workforce research</style> My EndNote Library.enl EndNote 309 309 17 <style face="normal" font="default" size="100%">(De)constructing 'basic' benefits: citizens define the limits of coverage</style> My EndNote Library.enl EndNote 310 310 17 <style face="normal" font="default" size="100%">The use of assessment in promoting secondhand smoke policy in a local health jurisdiction</style> My EndNote Library.enl EndNote 311 311 17 <style face="normal" font="default" size="100%">The Delmarva Avian Influenza Joint Task Force: a local operational response to an international problem</style> My EndNote Library.enl EndNote 312 312 17 <style face="normal" font="default" size="100%">The effects of hospital-physician integration strategies on hospital financial performance</style> My EndNote Library.enl EndNote 313 313 17 <style face="normal" font="default" size="100%">Using seminar blogs to enhance student participation and learning in public health school classes</style> My EndNote Library.enl EndNote 314 314 17 <style face="normal" font="default" size="100%">Proposed changes to designations of medically underserved populations and health professional shortage areas: effects on rural areas</style> My EndNote Library.enl EndNote 315 315 17 <style face="normal" font="default" size="100%">Privatization of public services: Organizational reform efforts in public education and public health</style> My EndNote Library.enl EndNote 316 316 17 <style face="normal" font="default" size="100%">A construct for building the capacity of community-based initiatives in racial and ethnic communities: a qualitative cross-case analysis</style> My EndNote Library.enl EndNote 317 317 17 <style face="normal" font="default" size="100%">Defining rural hospital markets</style> My EndNote Library.enl EndNote 318 318 17 <style face="normal" font="default" size="100%">Allocating health care: cost-utility analysis, informed democratic decision making, or the veil of ignorance?</style> My EndNote Library.enl EndNote 319 319 17 <style face="normal" font="default" size="100%">Choosing Healthplans All Together: a deliberative exercise for allocating limited health care resources</style> My EndNote Library.enl EndNote 320 320 17 <style face="normal" font="default" size="100%">A measure of trust in insurers</style> My EndNote Library.enl EndNote 321 321 17 <style face="normal" font="default" size="100%">Managed care members talk about trust</style> My EndNote Library.enl EndNote 322 322 17 <style face="normal" font="default" size="100%">Prevention and the reforming U.S. health care system: changing roles and responsibilities for public health</style> My EndNote Library.enl EndNote 323 323 17 <style face="normal" font="default" size="100%">Determinants of US local health department expenditures, 1992 through 1993</style> My EndNote Library.enl EndNote 324 324 6 <style face="normal" font="default" size="100%">Public health law : power, duty, restraint</style> My EndNote Library.enl EndNote 325 325 17 <style face="normal" font="default" size="100%">The animal-human interface and infectious disease in industrial food animal production: rethinking biosecurity and biocontainment</style> My EndNote Library.enl EndNote 326 326 17 <style face="normal" font="default" size="100%">Diffusion theory and knowledge dissemination, utilization, and integration in public health</style> My EndNote Library.enl EndNote 327 327 17 <style face="normal" font="default" size="100%">Building and sustaining a multiuniversity and multicampus program or school of public health</style> My EndNote Library.enl EndNote 328 328 17 <style face="normal" font="default" size="100%">Variations in resource utilization among medical specialties and systems of care. Results from the medical outcomes study</style> My EndNote Library.enl EndNote 329 329 17 <style face="normal" font="default" size="100%">What should an ideal vaccine postlicensure safety system be?</style> My EndNote Library.enl EndNote 330 330 17 <style face="normal" font="default" size="100%">Impact of increasing Medicaid dental reimbursement and implementing school sealant programs on sealant prevalence</style> My EndNote Library.enl EndNote 331 331 17 <style face="normal" font="default" size="100%">One country, two systems: public health in China</style> My EndNote Library.enl EndNote 332 332 17 <style face="normal" font="default" size="100%">Pandemic influenza preparedness and vulnerable populations in tribal communities</style> My EndNote Library.enl EndNote 333 333 17 <style face="normal" font="default" size="100%">Animals as early detectors of bioevents: veterinary tools and a framework for animal-human integrated zoonotic disease surveillance</style> My EndNote Library.enl EndNote 334 334 17 <style face="normal" font="default" size="100%">School-based health centers: cost-benefit analysis and impact on health care disparities</style> My EndNote Library.enl EndNote 335 335 17 <style face="normal" font="default" size="100%">Contributions of a local health examination survey to the surveillance of chronic and infectious diseases in New York City</style> My EndNote Library.enl EndNote 336 336 44 <style face="normal" font="default" size="100%">Prevention effectiveness : a guide to decision analysis and economic evaluation</style> My EndNote Library.enl EndNote 337 337 17 <style face="normal" font="default" size="100%">Using multiple survey vendors to collect health outcomes information: how accurate are the data?</style> My EndNote Library.enl EndNote 338 338 17 <style face="normal" font="default" size="100%">Developing competencies for a graduate school curriculum in international health</style> My EndNote Library.enl EndNote 339 339 27 <style face="normal" font="default" size="100%">Local Public Health Agency Infrastructure: A Chartbook</style> My EndNote Library.enl EndNote 340 340 17 <style face="normal" font="default" size="100%">What predicts local public health agency performance improvement? A pilot study in North Carolina</style> My EndNote Library.enl EndNote 341 341 13 <style face="normal" font="default" size="100%">Promoting and protecting the public's health through partnerships in local public health systems</style> My EndNote Library.enl EndNote 342 342 17 <style face="normal" font="default" size="100%">Performance measurement and performance standards: old wine in new bottles</style> My EndNote Library.enl EndNote 343 343 17 <style face="normal" font="default" size="100%">Public health practice and the journal</style> My EndNote Library.enl EndNote 344 344 17 <style face="normal" font="default" size="100%">Embracing the strength of the public health system: why strong government public health agencies are vitally necessary but insufficient</style> My EndNote Library.enl EndNote 345 345 17 <style face="normal" font="default" size="100%">Privatizing health services: alternative models and emerging issues for public health and quality management</style> My EndNote Library.enl EndNote 346 346 17 <style face="normal" font="default" size="100%">Strategic alliances in healthcare: Opportunities for the Veterans Affairs healthcare system</style> My EndNote Library.enl EndNote 347 347 17 <style face="normal" font="default" size="100%">Developing leaders in public health: the role of executive training programs</style> My EndNote Library.enl EndNote 348 348 17 <style face="normal" font="default" size="100%">Working together? Organizational and market determinants of collaboration between public health and medical care providers</style> My EndNote Library.enl EndNote 349 349 17 <style face="normal" font="default" size="100%">Not-so-strange bedfellows: models of interaction between managed care plans and public health agencies</style> My EndNote Library.enl EndNote 350 350 17 <style face="normal" font="default" size="100%">Managed care and the public health challenge of TB</style> My EndNote Library.enl EndNote 351 351 17 <style face="normal" font="default" size="100%">Performing public health functions: the perceived contribution of public health and other community agencies</style> My EndNote Library.enl EndNote 352 352 17 <style face="normal" font="default" size="100%">Performance measurement and accreditation of public health organizations: a call to action</style> My EndNote Library.enl EndNote 353 353 17 <style face="normal" font="default" size="100%">A conceptual framework to measure performance of the public health system</style> My EndNote Library.enl EndNote 354 354 17 <style face="normal" font="default" size="100%">Local health department effectiveness in addressing the core functions of public health: essential ingredients</style> My EndNote Library.enl EndNote 355 355 17 <style face="normal" font="default" size="100%">A strategy for measuring local public health practice</style> My EndNote Library.enl EndNote 356 356 17 <style face="normal" font="default" size="100%">How discriminating are discriminative instruments?</style> My EndNote Library.enl EndNote 357 357 17 <style face="normal" font="default" size="100%">Building the backbone for organisational research in public health systems: development of measures of organisational capacity for chronic disease prevention</style> My EndNote Library.enl EndNote 358 358 17 <style face="normal" font="default" size="100%">Applying systematic review methods to studies of people's views: an example from public health research</style> My EndNote Library.enl EndNote 359 359 17 <style face="normal" font="default" size="100%">Risk factor redistribution of the national HIV/AIDS surveillance data: an alternative approach</style> My EndNote Library.enl EndNote 360 360 17 <style face="normal" font="default" size="100%">Development and implementation of a public health workforce training needs assessment survey in North Carolina</style> My EndNote Library.enl EndNote 361 361 17 <style face="normal" font="default" size="100%">Managed care and Medicaid: lessons and strategies for public health</style> My EndNote Library.enl EndNote 362 362 17 <style face="normal" font="default" size="100%">Improvement strategy for local health departments</style> My EndNote Library.enl EndNote 363 363 17 <style face="normal" font="default" size="100%">Rural public health systems and America's veterans</style> My EndNote Library.enl EndNote 364 364 13 <style face="normal" font="default" size="100%">Building sustainable advocacy capacity for improving the nation's health</style> My EndNote Library.enl EndNote 365 365 13 <style face="normal" font="default" size="100%">Building sustainable advocacy capacity for improving the nation's public health system</style> My EndNote Library.enl EndNote 366 366 17 <style face="normal" font="default" size="100%">Practice-based teaching for health policy action and advocacy</style> My EndNote Library.enl EndNote 367 367 17 <style face="normal" font="default" size="100%">Using logic models in a community-based agricultural injury prevention project</style> My EndNote Library.enl EndNote 368 368 17 <style face="normal" font="default" size="100%">ATV and bicycle deaths and associated costs in the United States, 2000-2005</style> My EndNote Library.enl EndNote 369 369 17 <style face="normal" font="default" size="100%">Exploring obesogenic food environments in Edmonton, Canada: the association between socioeconomic factors and fast-food outlet access</style> My EndNote Library.enl EndNote 370 370 17 <style face="normal" font="default" size="100%">The accuracy of a death certificate checkbox for diabetes: early results from New Jersey</style> My EndNote Library.enl EndNote 371 371 17 <style face="normal" font="default" size="100%">Point-counterpoint: the public health versus medical model of prevention</style> My EndNote Library.enl EndNote 372 372 17 <style face="normal" font="default" size="100%">Mortality in Appalachian coal mining regions: the value of statistical life lost</style> My EndNote Library.enl EndNote 373 373 17 <style face="normal" font="default" size="100%">Access to mental health services and health sector social capital</style> My EndNote Library.enl EndNote 374 374 17 <style face="normal" font="default" size="100%">Public health issues related to HPV vaccination</style> My EndNote Library.enl EndNote 375 375 17 <style face="normal" font="default" size="100%">Assessing the relationship between health information exchanges and public health agencies</style> My EndNote Library.enl EndNote 376 376 17 <style face="normal" font="default" size="100%">Utilization of research in policymaking for graduated driver licensing</style> My EndNote Library.enl EndNote 377 377 17 <style face="normal" font="default" size="100%">The open-air treatment of pandemic influenza</style> My EndNote Library.enl EndNote 378 378 17 <style face="normal" font="default" size="100%">Transforming public health law: the Turning Point Model State Public Health Act</style> My EndNote Library.enl EndNote 379 379 17 <style face="normal" font="default" size="100%">Controlling infectious disease outbreaks: Lessons from mathematical modelling</style> My EndNote Library.enl EndNote 380 380 17 <style face="normal" font="default" size="100%">Measuring the value of public health systems</style> My EndNote Library.enl EndNote 381 381 17 <style face="normal" font="default" size="100%">HIV incidence and CDC's HIV prevention budget: an exploratory correlational analysis</style> My EndNote Library.enl EndNote 382 382 13 <style face="normal" font="default" size="100%">Developing a public health financial database system to provide information for research, practice and education</style> My EndNote Library.enl EndNote 383 383 17 <style face="normal" font="default" size="100%">Public health finance: Advancing a field of study through public health systems research</style> My EndNote Library.enl EndNote 384 384 17 <style face="normal" font="default" size="100%">Public health finance: fundamental theories, concepts, and definitions</style> My EndNote Library.enl EndNote 385 385 17 <style face="normal" font="default" size="100%">Creating financial transparency in public health: examining best practices of system partners</style> My EndNote Library.enl EndNote 386 386 17 <style face="normal" font="default" size="100%">State public health agency expenditures: categorizing and comparing to performance levels</style> My EndNote Library.enl EndNote 387 387 17 <style face="normal" font="default" size="100%">Practices in public health finance: an investigation of jurisdiction funding patterns and performance</style> My EndNote Library.enl EndNote 388 388 17 <style face="normal" font="default" size="100%">Applying principles for outcomes-based contracting in a public health program</style> My EndNote Library.enl EndNote 389 389 17 <style face="normal" font="default" size="100%">Evaluating the ecological association of casino industry economic development on community health status: a natural experiment in the Mississippi delta region</style> My EndNote Library.enl EndNote 390 390 17 <style face="normal" font="default" size="100%">Epidemiology in a health services administration curriculum: what topics are important to practicing healthcare administrators?</style> My EndNote Library.enl EndNote 391 391 17 <style face="normal" font="default" size="100%">Evaluation of the Certificate in Community Preparedness and Disaster Management Program at the University of North Carolina Gillings School of Global Public Health</style> My EndNote Library.enl EndNote 392 392 17 <style face="normal" font="default" size="100%">The Health Utilities Index (HUI): concepts, measurement properties and applications</style> My EndNote Library.enl EndNote 393 393 17 <style face="normal" font="default" size="100%">Retail food availability, obesity, and cigarette smoking in rural communities</style> My EndNote Library.enl EndNote 394 394 17 <style face="normal" font="default" size="100%">Teaching research methods to graduate students in public health</style> My EndNote Library.enl EndNote 395 395 17 <style face="normal" font="default" size="100%">Formulating a model public health law for the Pacific: programme methods</style> My EndNote Library.enl EndNote 396 396 17 <style face="normal" font="default" size="100%">The state of the public health system in England</style> My EndNote Library.enl EndNote 397 397 17 <style face="normal" font="default" size="100%">The Women's Health Questionnaire (WHQ): Frequently Asked Questions (FAQ)</style> My EndNote Library.enl EndNote 398 398 13 <style face="normal" font="default" size="100%">Modeling U.S. health systems' epidemic response capacity</style> My EndNote Library.enl EndNote 399 399 17 <style face="normal" font="default" size="100%">Community health centers tackle rising demands and expectations</style> My EndNote Library.enl EndNote 400 400 17 <style face="normal" font="default" size="100%">A longitudinal perspective on health plan-provider risk contracting</style> My EndNote Library.enl EndNote 401 401 17 <style face="normal" font="default" size="100%">Qualitative research and the profound grasp of the obvious</style> My EndNote Library.enl EndNote 402 402 17 <style face="normal" font="default" size="100%">Health plan responses to managed care regulation</style> My EndNote Library.enl EndNote 403 403 17 <style face="normal" font="default" size="100%">Medicare contracting risk/Medicare risk contracting: a life-cycle view from twelve markets</style> My EndNote Library.enl EndNote 404 404 17 <style face="normal" font="default" size="100%">Organizational ecology and health services research: new answers for old and new questions</style> My EndNote Library.enl EndNote 405 405 17 <style face="normal" font="default" size="100%">Protection of racial/ethnic minority populations during an influenza pandemic</style> My EndNote Library.enl EndNote 406 406 17 <style face="normal" font="default" size="100%">Protecting vulnerable populations from pandemic influenza in the United States: a strategic imperative</style> My EndNote Library.enl EndNote 407 407 17 <style face="normal" font="default" size="100%">Comparison of national malaria surveillance system with the national notifiable diseases surveillance system in the United States</style> My EndNote Library.enl EndNote 408 408 17 <style face="normal" font="default" size="100%">The impact of smokefree legislation in Scotland: results from the Scottish ITC: Scotland/UK longitudinal surveys</style> My EndNote Library.enl EndNote 409 409 17 <style face="normal" font="default" size="100%">A brief guide to the selection of quality of life instrument</style> My EndNote Library.enl EndNote 410 410 17 <style face="normal" font="default" size="100%">The State Public Health Laboratory System</style> My EndNote Library.enl EndNote 411 411 28 <style face="normal" font="default" size="100%">The Future of Public Health</style> My EndNote Library.enl EndNote 412 412 17 <style face="normal" font="default" size="100%">Community-based participatory research: a capacity-building approach for policy advocacy aimed at eliminating health disparities</style> My EndNote Library.enl EndNote 413 413 6 <style face="normal" font="default" size="100%">Choosing the Right Formula: Initial Report </style> My EndNote Library.enl EndNote 414 414 17 <style face="normal" font="default" size="100%">The MAPP approach: using community health status assessment for performance improvement</style> My EndNote Library.enl EndNote 415 415 13 <style face="normal" font="default" size="100%">Measuring the value of public health systems</style> My EndNote Library.enl EndNote 416 416 17 <style face="normal" font="default" size="100%">A Framework to Measure the Value of Public Health Services</style> My EndNote Library.enl EndNote 417 417 17 <style face="normal" font="default" size="100%">Assessing changes in mortality inequalities in Israel using a period-specific measure of socio-economic position, 1983-92 and 1995-2004</style> My EndNote Library.enl EndNote 418 418 17 <style face="normal" font="default" size="100%">The use of Koppen climate classification system for public health research</style> My EndNote Library.enl EndNote 419 419 17 <style face="normal" font="default" size="100%">Toward health status insurance</style> My EndNote Library.enl EndNote 420 420 17 <style face="normal" font="default" size="100%">Determining accurate vaccination coverage rates for adolescents: the National Immunization Survey-Teen 2006</style> My EndNote Library.enl EndNote 421 421 17 <style face="normal" font="default" size="100%">Content and context of a research registry for community-based research</style> My EndNote Library.enl EndNote 422 422 17 <style face="normal" font="default" size="100%">"Developing good taste in evidence": facilitators of and hindrances to evidence-informed health policymaking in state government</style> My EndNote Library.enl EndNote 423 423 17 <style face="normal" font="default" size="100%">Meta-synthesis of health behavior change meta-analyses</style> My EndNote Library.enl EndNote 424 424 17 <style face="normal" font="default" size="100%">The crucible of public health practice: Major trends shaping the design of the management academy for public health</style> My EndNote Library.enl EndNote 425 425 17 <style face="normal" font="default" size="100%">American Indian/Alaska Native uninsurance disparities: a comparison of 3 surveys</style> My EndNote Library.enl EndNote 426 426 17 <style face="normal" font="default" size="100%">Mass fatality planning for pandemic influenza: a planning model from a seven-county region in Kentucky</style> My EndNote Library.enl EndNote 427 427 17 <style face="normal" font="default" size="100%">Use of National Public Health Performance Standards to assess Maine's diabetes system</style> My EndNote Library.enl EndNote 428 428 17 <style face="normal" font="default" size="100%">Assessing regional public health preparedness: a new tool for considering cross-border issues</style> My EndNote Library.enl EndNote 429 429 17 <style face="normal" font="default" size="100%">Business and public health partnerships: policy and regulatory challenges and successes</style> My EndNote Library.enl EndNote 430 430 17 <style face="normal" font="default" size="100%">Professional development for prospective epidemiology teachers in grades 6-12</style> My EndNote Library.enl EndNote 431 431 17 <style face="normal" font="default" size="100%">County lung cancer mortality: a decision tree model for control and prevention</style> My EndNote Library.enl EndNote 432 432 17 <style face="normal" font="default" size="100%">Local public health agency performance and community health status</style> My EndNote Library.enl EndNote 433 433 17 <style face="normal" font="default" size="100%">Communities and academia working together: report of the Association of Schools of Public Health Prevention Research Centers Blue Ribbon Panel</style> My EndNote Library.enl EndNote 434 434 17 <style face="normal" font="default" size="100%">Methodological complexities and the use of GIS in conducting a community needs assessment of a large U.S. municipality</style> My EndNote Library.enl EndNote 435 435 17 <style face="normal" font="default" size="100%">Services privatized in local health departments: A national survey of practices and perspectives</style> My EndNote Library.enl EndNote 436 436 17 <style face="normal" font="default" size="100%">Local health departments' mission to the uninsured</style> My EndNote Library.enl EndNote 437 437 17 <style face="normal" font="default" size="100%">Providing public health services through an integrated delivery system</style> My EndNote Library.enl EndNote 438 438 17 <style face="normal" font="default" size="100%">Public health workforce employment in US public and private sectors</style> My EndNote Library.enl EndNote 439 439 17 <style face="normal" font="default" size="100%">Is there progress toward eliminating racial/ethnic disparities in the leading causes of death?</style> My EndNote Library.enl EndNote 440 440 17 <style face="normal" font="default" size="100%">Self-assessment in the measurement of public health workforce preparedness for bioterrorism or other public health disasters</style> My EndNote Library.enl EndNote 441 441 17 <style face="normal" font="default" size="100%">Multidisciplinary research in public health: a case study of research on access to green space</style> My EndNote Library.enl EndNote 442 442 17 <style face="normal" font="default" size="100%">A pay-for-population health performance system</style> My EndNote Library.enl EndNote 443 443 17 <style face="normal" font="default" size="100%">Expenditures for public health: assessing historical and prospective trends</style> My EndNote Library.enl EndNote 444 444 17 <style face="normal" font="default" size="100%">Developing laboratory networks: a practical guide and application</style> My EndNote Library.enl EndNote 445 445 17 <style face="normal" font="default" size="100%">Wanted: an effective public health response to hepatitis C virus in the United States</style> My EndNote Library.enl EndNote 446 446 17 <style face="normal" font="default" size="100%">Implementing the National Local Public Health System Performance Assessment: evaluation of a readiness process in Kentucky</style> My EndNote Library.enl EndNote 447 447 17 <style face="normal" font="default" size="100%">Regionalization of Local Public Health Systems in the Era of Preparedness</style> My EndNote Library.enl EndNote 448 448 17 <style face="normal" font="default" size="100%">Translating research evidence into practice to reduce health disparities: a social determinants approach</style> My EndNote Library.enl EndNote 449 449 17 <style face="normal" font="default" size="100%">The use of programme planning and social marketing models by a state public health agency: a case study</style> My EndNote Library.enl EndNote 450 450 17 <style face="normal" font="default" size="100%">Is health status related to residence in medically underserved areas? Evidence and implications for policy</style> My EndNote Library.enl EndNote 451 451 17 <style face="normal" font="default" size="100%">Competency-based epidemiologic training in public health practice</style> My EndNote Library.enl EndNote 452 452 17 <style face="normal" font="default" size="100%">Place matters: variation in the black/white very preterm birth rate across U.S. metropolitan areas, 2002-2004</style> My EndNote Library.enl EndNote 453 453 17 <style face="normal" font="default" size="100%">Reframing the dissemination challenge: a marketing and distribution perspective</style> My EndNote Library.enl EndNote 454 454 17 <style face="normal" font="default" size="100%">Facilitating the development of a county health coverage plan with data from a community-based health survey</style> My EndNote Library.enl EndNote 455 455 17 <style face="normal" font="default" size="100%">Using a community-based health survey as a tool for informing local health policy</style> My EndNote Library.enl EndNote 456 456 17 <style face="normal" font="default" size="100%">Issues and opportunities in public health informatics: a panel discussion</style> My EndNote Library.enl EndNote 457 457 17 <style face="normal" font="default" size="100%">Geographic variation in medicaid claims for dental procedures in New York State: role of fluoridation under contemporary conditions</style> My EndNote Library.enl EndNote 458 458 17 <style face="normal" font="default" size="100%">Adolescent obesity in a low-income Mexican American district in South Texas</style> My EndNote Library.enl EndNote 459 459 17 <style face="normal" font="default" size="100%">Creating an online "promising practices" clearinghouse for pandemic influenza</style> My EndNote Library.enl EndNote 460 460 17 <style face="normal" font="default" size="100%">HMO provider networks in Medicare+Choice: comparing Medicare and commercial lines of business</style> My EndNote Library.enl EndNote 461 461 17 <style face="normal" font="default" size="100%">Local public health certification and accreditation in Illinois: blending the old and the new</style> My EndNote Library.enl EndNote 462 462 17 <style face="normal" font="default" size="100%">Report of the WHO commission on social determinants of health: a French perspective</style> My EndNote Library.enl EndNote 463 463 17 <style face="normal" font="default" size="100%">The epidemiology of influenza</style> My EndNote Library.enl EndNote 464 464 6 <style face="normal" font="default" size="100%">Medicine & public health : the power of collaboration</style> My EndNote Library.enl EndNote 465 465 17 <style face="normal" font="default" size="100%">Partnership synergy: A practical framework for studying and strengthening the collaborative advantage</style> My EndNote Library.enl EndNote 466 466 17 <style face="normal" font="default" size="100%">Primary care physicians and pandemic influenza: an appraisal of the 1918 experience and an assessment of contemporary planning</style> My EndNote Library.enl EndNote 467 467 17 <style face="normal" font="default" size="100%">Phthisiology at the dawn of the new century - A review of tuberculosis and the prospects for its elimination</style> My EndNote Library.enl EndNote 468 468 17 <style face="normal" font="default" size="100%">Competencies: from deconstruction to reconstruction and back again, lessons learned</style> My EndNote Library.enl EndNote 469 469 17 <style face="normal" font="default" size="100%">Does the internet displace health professionals?</style> My EndNote Library.enl EndNote 470 470 17 <style face="normal" font="default" size="100%">A review of the status of the doctor of public health degree and identification of future issues</style> My EndNote Library.enl EndNote 471 471 17 <style face="normal" font="default" size="100%">Teaching excellence in public health: a call to action</style> My EndNote Library.enl EndNote 472 472 17 <style face="normal" font="default" size="100%">Coverage of obesity treatment: a state-by-state analysis of Medicaid and state insurance laws</style> My EndNote Library.enl EndNote 473 473 17 <style face="normal" font="default" size="100%">Quality improvement in local health departments: progress, pitfalls, and potential</style> My EndNote Library.enl EndNote 474 474 17 <style face="normal" font="default" size="100%">The case for rural public health programs</style> My EndNote Library.enl EndNote 475 475 17 <style face="normal" font="default" size="100%">Development of scales measuring the capacity of community-based initiatives</style> My EndNote Library.enl EndNote 476 476 17 <style face="normal" font="default" size="100%">Public health systems research: Setting a national agenda</style> My EndNote Library.enl EndNote 477 477 17 <style face="normal" font="default" size="100%">MAPP and the evolution of planning in public health practice</style> My EndNote Library.enl EndNote 478 478 17 <style face="normal" font="default" size="100%">The public health system: An idea whose time has come</style> My EndNote Library.enl EndNote 479 479 17 <style face="normal" font="default" size="100%">The operational definition of a functional local public health agency: the next strategic step in the quest for identity and relevance</style> My EndNote Library.enl EndNote 480 480 17 <style face="normal" font="default" size="100%">Disparities in influenza treatment among disabled Medicaid patients in Georgia</style> My EndNote Library.enl EndNote 481 481 17 <style face="normal" font="default" size="100%">What do we need from surveillance? And how do we get it?</style> My EndNote Library.enl EndNote 482 482 17 <style face="normal" font="default" size="100%">Managed care and public health</style> My EndNote Library.enl EndNote 483 483 17 <style face="normal" font="default" size="100%">Financing public health: diminished funding for core needs and state-by-state variation in support</style> My EndNote Library.enl EndNote 484 484 17 <style face="normal" font="default" size="100%">Increased Black-White disparities in mortality after the introduction of lifesaving innovations: a possible consequence of US federal laws</style> My EndNote Library.enl EndNote 485 485 17 <style face="normal" font="default" size="100%">Evaluability assessment to improve public health policies, programs, and practices</style> My EndNote Library.enl EndNote 486 486 17 <style face="normal" font="default" size="100%">Obesity and the built environment: does the density of neighborhood fast-food outlets matter?</style> My EndNote Library.enl EndNote 487 487 17 <style face="normal" font="default" size="100%">Partnership for front-line success: a call for a national action agenda on workforce development</style> My EndNote Library.enl EndNote 488 488 17 <style face="normal" font="default" size="100%">Assessing the impact of federal HIV prevention spending on HIV testing and awareness</style> My EndNote Library.enl EndNote 489 489 17 <style face="normal" font="default" size="100%">Concepts of capability and overlooked applications</style> My EndNote Library.enl EndNote 490 490 17 <style face="normal" font="default" size="100%">Implementation of the Australian core public health functions in rural Western Australia</style> My EndNote Library.enl EndNote 491 491 17 <style face="normal" font="default" size="100%">Investment decisions in influenza pandemic contingency planning: cost-effectiveness of stockpiling antiviral drugs</style> My EndNote Library.enl EndNote 492 492 17 <style face="normal" font="default" size="100%">Filling the gap: providing formal training for epidemiologists through a graduate-level online certificate in field epidemiology</style> My EndNote Library.enl EndNote 493 493 17 <style face="normal" font="default" size="100%">Validated scales to assess adult self-efficacy to eat fruits and vegetables</style> My EndNote Library.enl EndNote 494 494 17 <style face="normal" font="default" size="100%">Pandemic influenza and community preparedness</style> My EndNote Library.enl EndNote 495 495 17 <style face="normal" font="default" size="100%">Leadership principles for developing a statewide public health and clinical laboratory system</style> My EndNote Library.enl EndNote 496 496 17 <style face="normal" font="default" size="100%">Fact, fiction, and fairness: resource allocation under the Ryan White CARE Act</style> My EndNote Library.enl EndNote 497 497 17 <style face="normal" font="default" size="100%">Examining the impact of public health assessments</style> My EndNote Library.enl EndNote 498 498 17 <style face="normal" font="default" size="100%">The role of law in pandemic influenza preparedness in Europe</style> My EndNote Library.enl EndNote 499 499 17 <style face="normal" font="default" size="100%">Pandemic influenza and jail facilities and populations</style> My EndNote Library.enl EndNote 500 500 17 <style face="normal" font="default" size="100%">States gathering momentum: promising strategies for accreditation and assessment activities in multistate learning collaborative applicant States</style> My EndNote Library.enl EndNote 501 501 47 <style face="normal" font="default" size="100%">Local Public Health Practice: Trends and Models</style> My EndNote Library.enl EndNote 502 502 47 <style face="normal" font="default" size="100%">Causes and consequences of change in local public health spending</style> My EndNote Library.enl EndNote 503 503 17 <style face="normal" font="default" size="100%">Managed care rebound? Recent changes in health plans' cost containment strategies</style> My EndNote Library.enl EndNote 504 504 17 <style face="normal" font="default" size="100%">Assessing the performance of local public health systems: a survey of state health agency efforts</style> My EndNote Library.enl EndNote 505 505 17 <style face="normal" font="default" size="100%">Conceptual and methodological issues in public health performance measurement: results from a computer-assisted expert panel process</style> My EndNote Library.enl EndNote 506 506 17 <style face="normal" font="default" size="100%">Availability and perceived effectiveness of public health activities in the nation's most populous communities</style> My EndNote Library.enl EndNote 507 507 17 <style face="normal" font="default" size="100%">Collaboration to improve community health: trends and alternative models</style> My EndNote Library.enl EndNote 508 508 17 <style face="normal" font="default" size="100%">How managed care plans contribute to public health practice</style> My EndNote Library.enl EndNote 509 509 17 <style face="normal" font="default" size="100%">Behind the curve? What we know and need to learn from public health systems research</style> My EndNote Library.enl EndNote 510 510 17 <style face="normal" font="default" size="100%">Making public health improvement real: the vital role of systems research</style> My EndNote Library.enl EndNote 511 511 17 <style face="normal" font="default" size="100%">The contributions of managed care plans to public health practice: Evidence from the nation's largest local health departments</style> My EndNote Library.enl EndNote 512 512 17 <style face="normal" font="default" size="100%">Integrating preventive health services within community health centers: Lessons from WISEWOMAN</style> My EndNote Library.enl EndNote 513 513 17 <style face="normal" font="default" size="100%">An empty toolbox? Changes in health plans' approaches for managing costs and care</style> My EndNote Library.enl EndNote 514 514 17 <style face="normal" font="default" size="100%">Getting what you pay for: public health spending and the performance of essential public health services</style> My EndNote Library.enl EndNote 515 515 17 <style face="normal" font="default" size="100%">Identifying dimensions of performance in local public health systems: results from the National Public Health Performance Standards Program</style> My EndNote Library.enl EndNote 516 516 17 <style face="normal" font="default" size="100%">Institutional and economic determinants of public health system performance</style> My EndNote Library.enl EndNote 517 517 17 <style face="normal" font="default" size="100%">Understanding the organization of public health delivery systems: an empirical typology</style> My EndNote Library.enl EndNote 518 518 17 <style face="normal" font="default" size="100%">Geographic Variation in Public Health Spending: Correlates and Consequences</style> My EndNote Library.enl EndNote 519 519 17 <style face="normal" font="default" size="100%">Agency Discretion and Public Health Service Delivery</style> My EndNote Library.enl EndNote 520 520 17 <style face="normal" font="default" size="100%">Density of tobacco retailers near schools: effects on tobacco use among students</style> My EndNote Library.enl EndNote 521 521 17 <style face="normal" font="default" size="100%">Epidemiology for high school students: improving the public health pipeline</style> My EndNote Library.enl EndNote 522 522 17 <style face="normal" font="default" size="100%">Utilizing a national performance standards local public health assessment instrument in a community assessment process: the Clarendon County Turning Point Initiative</style> My EndNote Library.enl EndNote 523 523 17 <style face="normal" font="default" size="100%">Pandemic influenza preparedness: bridging public health academia and practice</style> My EndNote Library.enl EndNote 524 524 17 <style face="normal" font="default" size="100%">Financial performance and participation in Medicaid and Medi-Cal managed care</style> My EndNote Library.enl EndNote 525 525 17 <style face="normal" font="default" size="100%">Comparison of FIMR programs with other perinatal systems initiatives</style> My EndNote Library.enl EndNote 526 526 17 <style face="normal" font="default" size="100%">Selecting common measures of quality and system performance</style> My EndNote Library.enl EndNote 527 527 17 <style face="normal" font="default" size="100%">The limits of collaboration: a qualitative study of community ethical review of environmental health research</style> My EndNote Library.enl EndNote 528 528 17 <style face="normal" font="default" size="100%">Medical issues in historical demography</style> My EndNote Library.enl EndNote 529 529 17 <style face="normal" font="default" size="100%">Interorganizational exchanges as performance markers in a community cancer network</style> My EndNote Library.enl EndNote 530 530 17 <style face="normal" font="default" size="100%">The impact of school-based health centers on the health outcomes of middle school and high school students</style> My EndNote Library.enl EndNote 531 531 17 <style face="normal" font="default" size="100%">Applied epidemiology competencies for governmental public health agencies: mapping current curriculum and the development of new curriculum</style> My EndNote Library.enl EndNote 532 532 17 <style face="normal" font="default" size="100%">Rethinking medical professionalism: the role of information technology and practice innovations</style> My EndNote Library.enl EndNote 533 533 17 <style face="normal" font="default" size="100%">The emergence of local governmental public health: practice standards and workforce implications</style> My EndNote Library.enl EndNote 534 534 17 <style face="normal" font="default" size="100%">Rural public health financing: implications for community health promotion initiatives</style> My EndNote Library.enl EndNote 535 535 17 <style face="normal" font="default" size="100%">Why is rural public health important? A look to the future</style> My EndNote Library.enl EndNote 536 536 17 <style face="normal" font="default" size="100%">Commentary: A legal perspective on diabetes surveillance--privacy and the police power</style> My EndNote Library.enl EndNote 537 537 17 <style face="normal" font="default" size="100%">Social science insights into improving workforce effectiveness: examples from the developing field of hospital medicine</style> My EndNote Library.enl EndNote 538 538 17 <style face="normal" font="default" size="100%">Training Early Achievers for Careers in Health Research (TEACH): can we do it for public health</style> My EndNote Library.enl EndNote 539 539 17 <style face="normal" font="default" size="100%">A legal primer for the obesity prevention movement</style> My EndNote Library.enl EndNote 540 540 13 <style face="normal" font="default" size="100%">Examining how intra-organizational public health networks are linked to process and outcomes</style> My EndNote Library.enl EndNote 541 541 17 <style face="normal" font="default" size="100%">Toward Standardized, Comparable Public Health Systems Data: A Taxonomic Description of Essential Public Health Work</style> My EndNote Library.enl EndNote 542 542 17 <style face="normal" font="default" size="100%">Examination of the relationship between public health statute modernization and local public health system performance</style> My EndNote Library.enl EndNote 543 543 17 <style face="normal" font="default" size="100%">Healthy public policy--is health impact assessment the cornerstone?</style> My EndNote Library.enl EndNote 544 544 17 <style face="normal" font="default" size="100%">Surveillance for rare infectious diseases: is one passive data source enough for Haemophilus influenzae?</style> My EndNote Library.enl EndNote 545 545 17 <style face="normal" font="default" size="100%">Flexibility in measurement of public health performance</style> My EndNote Library.enl EndNote 546 546 17 <style face="normal" font="default" size="100%">The impact of critical events of the 1980s on core functions for a selected group of local health departments</style> My EndNote Library.enl EndNote 547 547 17 <style face="normal" font="default" size="100%">Longitudinal observations on a selected group of local health departments: a preliminary report</style> My EndNote Library.enl EndNote 548 548 17 <style face="normal" font="default" size="100%">A screening survey to assess local public health performance</style> My EndNote Library.enl EndNote 549 549 17 <style face="normal" font="default" size="100%">A proposed method for assessing the performance of local public health functions and practices</style> My EndNote Library.enl EndNote 550 550 17 <style face="normal" font="default" size="100%">A separate department of health in Washington State: four years before the mast</style> My EndNote Library.enl EndNote 551 551 17 <style face="normal" font="default" size="100%">A review of health impact assessment frameworks</style> My EndNote Library.enl EndNote 552 552 17 <style face="normal" font="default" size="100%">Economic benefits of hepatitis B vaccination at sexually transmitted disease clinics in the U.S</style> My EndNote Library.enl EndNote 553 553 17 <style face="normal" font="default" size="100%">The nationwide evaluation of fetal and infant mortality review (FIMR) programs: Development and implementation of recommendations and conduct of essential maternal and child health services by FIMR programs</style> My EndNote Library.enl EndNote 554 554 17 <style face="normal" font="default" size="100%">Who conducts epidemiology activities in local public health departments?</style> My EndNote Library.enl EndNote 555 555 17 <style face="normal" font="default" size="100%">The Behavioral Risk Factors Surveillance System: past, present, and future</style> My EndNote Library.enl EndNote 556 556 17 <style face="normal" font="default" size="100%">Hospital board effectiveness: relationships between governing board composition and hospital financial viability</style> My EndNote Library.enl EndNote 557 557 17 <style face="normal" font="default" size="100%">Public health preparedness in Alberta: a systems-level study</style> My EndNote Library.enl EndNote 558 558 17 <style face="normal" font="default" size="100%">Studying an ill-defined workforce: public health workforce research</style> My EndNote Library.enl EndNote 559 559 17 <style face="normal" font="default" size="100%">The Centers for Disease Control and Prevention's Healthy Days Measures - population tracking of perceived physical and mental health over time</style> My EndNote Library.enl EndNote 560 560 17 <style face="normal" font="default" size="100%">Service system performance and integration: a baseline profile of the ACCESS demonstration sites. Access to Community Care and Effective Services and Supports</style> My EndNote Library.enl EndNote 561 561 17 <style face="normal" font="default" size="100%">The role of local public health agencies in pesticide exposure</style> My EndNote Library.enl EndNote 562 562 17 <style face="normal" font="default" size="100%">Core academic competencies for master of public health students: one health department practitioner's perspective</style> My EndNote Library.enl EndNote 563 563 17 <style face="normal" font="default" size="100%">Public health legal preparedness for the 21st century</style> My EndNote Library.enl EndNote 564 564 17 <style face="normal" font="default" size="100%">Public health finance: a conceptual framework</style> My EndNote Library.enl EndNote 565 565 17 <style face="normal" font="default" size="100%">The relative health burden of selected social and behavioral risk factors in the United States: implications for policy</style> My EndNote Library.enl EndNote 566 566 17 <style face="normal" font="default" size="100%">The effect of the Irish smoke-free workplace legislation on smoking among bar workers</style> My EndNote Library.enl EndNote 567 567 17 <style face="normal" font="default" size="100%">Commentary: macrosocial determinants, epidemiology, and health policy: should politics and economics be banned from social determinants of health research?</style> My EndNote Library.enl EndNote 568 568 17 <style face="normal" font="default" size="100%">Utility of a waterborne disease outbreak (WBDO) surveillance system for public health research</style> My EndNote Library.enl EndNote 569 569 17 <style face="normal" font="default" size="100%">Emerging disease syndromic surveillance for Hurricane Katrina evacuees seeking shelter in Houston's Astrodome and Reliant Park Complex</style> My EndNote Library.enl EndNote 570 570 17 <style face="normal" font="default" size="100%">Screening experiments and the use of fractional factorial designs in behavioral intervention research</style> My EndNote Library.enl EndNote 571 571 17 <style face="normal" font="default" size="100%">The association between community water fluoridation and adult tooth loss</style> My EndNote Library.enl EndNote 572 572 17 <style face="normal" font="default" size="100%">Compliance with multiple-dose vaccine schedules among older children, adolescents, and adults: results from a vaccine safety datalink study</style> My EndNote Library.enl EndNote 573 573 17 <style face="normal" font="default" size="100%">Public/private partners. Key factors in creating a strategic alliance for community health</style> My EndNote Library.enl EndNote 574 574 17 <style face="normal" font="default" size="100%">Measuring the value of public health systems: the disconnect between health economists and public health practitioners</style> My EndNote Library.enl EndNote 575 575 17 <style face="normal" font="default" size="100%">Message design strategies to raise public awareness of social determinants of health and population health disparities</style> My EndNote Library.enl EndNote 576 576 17 <style face="normal" font="default" size="100%">Community-wide implementation of targeted testing for and treatment of latent tuberculosis infection</style> My EndNote Library.enl EndNote 577 577 17 <style face="normal" font="default" size="100%">Comparing the content of participation instruments using the international classification of functioning, disability and health</style> My EndNote Library.enl EndNote 578 578 17 <style face="normal" font="default" size="100%">State health department accreditation: North Carolina</style> My EndNote Library.enl EndNote 579 579 17 <style face="normal" font="default" size="100%">The quality of mixed methods studies in health services research</style> My EndNote Library.enl EndNote 580 580 17 <style face="normal" font="default" size="100%">A review of the strengths and weaknesses of quantitative methods used in health impact assessment</style> My EndNote Library.enl EndNote 581 581 17 <style face="normal" font="default" size="100%">Public health development in the Baltic countries (1992-2005): from problems to policy</style> My EndNote Library.enl EndNote 582 582 17 <style face="normal" font="default" size="100%">The effects of failing to include hard-to-reach respondents in longitudinal surveys</style> My EndNote Library.enl EndNote 583 583 17 <style face="normal" font="default" size="100%">Measuring food environments: a guide to available instruments</style> My EndNote Library.enl EndNote 584 584 17 <style face="normal" font="default" size="100%">Well-being revisited: Improving the health of a population</style> My EndNote Library.enl EndNote 585 585 17 <style face="normal" font="default" size="100%">The prevalence of hospital health promotion and disease prevention services: Good news, bad news, and policy implications</style> My EndNote Library.enl EndNote 586 586 17 <style face="normal" font="default" size="100%">Evaluating a program to build data capacity for core public health functions in local maternal child and adolescent health programs in California</style> My EndNote Library.enl EndNote 587 587 17 <style face="normal" font="default" size="100%">Strengthening the capacity of local health agencies through community-based assessment and planning</style> My EndNote Library.enl EndNote 588 588 17 <style face="normal" font="default" size="100%">Collaborative partnerships at the state level: promoting systems changes in public health infrastructure</style> My EndNote Library.enl EndNote 589 589 17 <style face="normal" font="default" size="100%">Building sustainable public health systems change at the state level</style> My EndNote Library.enl EndNote 590 590 17 <style face="normal" font="default" size="100%">Federal funding for reporting cases of HIV infection in the United States, 2006</style> My EndNote Library.enl EndNote 591 591 17 <style face="normal" font="default" size="100%">Individually randomized group treatment trials: a critical appraisal of frequently used design and analytic approaches</style> My EndNote Library.enl EndNote 592 592 17 <style face="normal" font="default" size="100%">Assessment of applied epidemiology competencies among the Virginia Department of Health workforce</style> My EndNote Library.enl EndNote 593 593 17 <style face="normal" font="default" size="100%">Immigrant children's reliance on public health insurance in the wake of immigration reform</style> My EndNote Library.enl EndNote 594 594 17 <style face="normal" font="default" size="100%">External validity reporting in prevention research</style> My EndNote Library.enl EndNote 595 595 17 <style face="normal" font="default" size="100%">Health impact assessment of global climate change: expanding on comparative risk assessment approaches for policy making</style> My EndNote Library.enl EndNote 596 596 17 <style face="normal" font="default" size="100%">Monitoring change in health disparity</style> My EndNote Library.enl EndNote 597 597 17 <style face="normal" font="default" size="100%">Evaluation of the immediate impact of the Washington, D.C., smoke-free indoor air policy on bar employee environmental tobacco smoke exposure</style> My EndNote Library.enl EndNote 598 598 17 <style face="normal" font="default" size="100%">Measuring patient expectations: does the instrument affect satisfaction or expectations?</style> My EndNote Library.enl EndNote 599 599 17 <style face="normal" font="default" size="100%">Commentary: Partnership for the Future of Public Health Services and Systems Research</style> My EndNote Library.enl EndNote 600 600 17 <style face="normal" font="default" size="100%">Strengthening health systems in poor countries: a code of conduct for nongovernmental organizations</style> My EndNote Library.enl EndNote 601 601 17 <style face="normal" font="default" size="100%">Improving access to and provision of public health education and training in the UK</style> My EndNote Library.enl EndNote 602 602 17 <style face="normal" font="default" size="100%">Promoting integration of the health and built environment agendas through a workforce development initiative</style> My EndNote Library.enl EndNote 603 603 17 <style face="normal" font="default" size="100%">The skills gap in hospital management in the South African public health sector</style> My EndNote Library.enl EndNote 604 604 17 <style face="normal" font="default" size="100%">Community perspectives on factors that influence collaboration in public health research</style> My EndNote Library.enl EndNote 605 605 17 <style face="normal" font="default" size="100%">Using principles of community participatory research - Groundwork for a collaboration in Brazil</style> My EndNote Library.enl EndNote 606 606 17 <style face="normal" font="default" size="100%">Legal and public health considerations affecting the success, reach, and impact of menu-labeling laws</style> My EndNote Library.enl EndNote 607 607 17 <style face="normal" font="default" size="100%">Innovative legal approaches to address obesity</style> My EndNote Library.enl EndNote 608 608 17 <style face="normal" font="default" size="100%">Workforce science: a critical component to ensuring future of health</style> My EndNote Library.enl EndNote 609 609 17 <style face="normal" font="default" size="100%">Partnering essentials</style> My EndNote Library.enl EndNote 610 610 17 <style face="normal" font="default" size="100%">A model for public health workforce development using the National Public Health Performance Standards Program</style> My EndNote Library.enl EndNote 611 611 17 <style face="normal" font="default" size="100%">Demonstrating excellence in the scholarship of practice-based service for public health</style> My EndNote Library.enl EndNote 612 612 17 <style face="normal" font="default" size="100%">State funding for local public health: observations from six case studies</style> My EndNote Library.enl EndNote 613 613 17 <style face="normal" font="default" size="100%">Food prices and obesity: evidence and policy implications for taxes and subsidies</style> My EndNote Library.enl EndNote 614 614 13 <style face="normal" font="default" size="100%">The Pacific Coast Research Center of the NIDA CJ-DATS</style> My EndNote Library.enl EndNote 615 615 17 <style face="normal" font="default" size="100%">The women's health initiative: lessons learned</style> My EndNote Library.enl EndNote 616 616 17 <style face="normal" font="default" size="100%">Perinatal hepatitis B prevention: adapting Public Health Services to meet the changing needs of a diverse community</style> My EndNote Library.enl EndNote 617 617 17 <style face="normal" font="default" size="100%">Walking and cycling to health: a comparative analysis of city, state, and international data</style> My EndNote Library.enl EndNote 618 618 17 <style face="normal" font="default" size="100%">Recruiting the future public health workforce: an analysis of prospect communication among accredited Schools of Public Health</style> My EndNote Library.enl EndNote 619 619 17 <style face="normal" font="default" size="100%">Epidemiology and the macrosocial determinants of health</style> My EndNote Library.enl EndNote 620 620 17 <style face="normal" font="default" size="100%">Large-scale epidemiological data on cardiovascular diseases and diabetes in migrant and ethnic minority groups in Europe</style> My EndNote Library.enl EndNote 621 621 17 <style face="normal" font="default" size="100%">Ethics, public health, and immunization mandates</style> My EndNote Library.enl EndNote 622 622 17 <style face="normal" font="default" size="100%">Community capacity for cancer prevention</style> My EndNote Library.enl EndNote 623 623 17 <style face="normal" font="default" size="100%">Pandemic influenza and pregnant women: summary of a meeting of experts</style> My EndNote Library.enl EndNote 624 624 17 <style face="normal" font="default" size="100%">Chronic disease: a risk we need to score</style> My EndNote Library.enl EndNote 625 625 17 <style face="normal" font="default" size="100%">Health in the 21st century--immunizations and progress</style> My EndNote Library.enl EndNote 626 626 17 <style face="normal" font="default" size="100%">Piloting a state health department accreditation model: the North Carolina experience</style> My EndNote Library.enl EndNote 627 627 17 <style face="normal" font="default" size="100%">The important interface between public health and veterinary medicine for improving human health, animal health, and food safety</style> My EndNote Library.enl EndNote 628 628 17 <style face="normal" font="default" size="100%">National Public Health Performance Standards: workforce development and agency effectiveness in Florida</style> My EndNote Library.enl EndNote 629 629 17 <style face="normal" font="default" size="100%">FIRST things first: a practice-academic collaboration to develop and deliver a competency-based series of applied epidemiology trainings</style> My EndNote Library.enl EndNote 630 630 17 <style face="normal" font="default" size="100%">Assurance opportunities for local health departments</style> My EndNote Library.enl EndNote 631 631 17 <style face="normal" font="default" size="100%">Protecting and promoting the nation's health: the environmental public health workforce as a critical component</style> My EndNote Library.enl EndNote 632 632 17 <style face="normal" font="default" size="100%">An examination of environmental public health organizational and workforce configurations in the Northeast/Mid-Atlantic United States: how do we determine if these configurations impact performance?</style> My EndNote Library.enl EndNote 633 633 17 <style face="normal" font="default" size="100%">Embracing chaos and complexity: a quantum change for public health</style> My EndNote Library.enl EndNote 634 634 17 <style face="normal" font="default" size="100%">Management of measles in a traveller community: public health issues of trust, choice and communication</style> My EndNote Library.enl EndNote 635 635 17 <style face="normal" font="default" size="100%">Evaluating local public health performance at a community level on a statewide basis</style> My EndNote Library.enl EndNote 636 636 17 <style face="normal" font="default" size="100%">Organizational restructuring in European health systems: The role of primay care</style> My EndNote Library.enl EndNote 637 637 13 <style face="normal" font="default" size="100%">Evaluate the effects of Massachusetts Reporting System</style> My EndNote Library.enl EndNote 638 638 17 <style face="normal" font="default" size="100%">Review and analysis of quality improvement techniques in police departments: application for public health</style> My EndNote Library.enl EndNote 639 639 17 <style face="normal" font="default" size="100%">Introducing Quality Improvement Methods into Local Public Health Departments: Structured Evaluation of a Statewide Pilot Project</style> My EndNote Library.enl EndNote 640 640 17 <style face="normal" font="default" size="100%">Hurricanes Katrina and Rita: professionally fulfilling, personally painful</style> My EndNote Library.enl EndNote 641 641 17 <style face="normal" font="default" size="100%">The World Cities Project: Rationale, organization, and design for comparison of megacity health systems</style> My EndNote Library.enl EndNote 642 642 17 <style face="normal" font="default" size="100%">Translating the cost benefits of the formal and systematic integration of public health in community design</style> My EndNote Library.enl EndNote 643 643 17 <style face="normal" font="default" size="100%">Using the Wisconsin County Health Rankings to catalyze community health improvement</style> My EndNote Library.enl EndNote 644 644 17 <style face="normal" font="default" size="100%">Use of published self-rated health-impact studies in community health needs assessment</style> My EndNote Library.enl EndNote 645 645 17 <style face="normal" font="default" size="100%">Enhancing policymakers' understanding of disparities: relevant data from an information-rich environment</style> My EndNote Library.enl EndNote 646 646 17 <style face="normal" font="default" size="100%">Strengthening the public health system</style> My EndNote Library.enl EndNote 647 647 17 <style face="normal" font="default" size="100%">The changing managed care - Public health interface</style> My EndNote Library.enl EndNote 648 648 17 <style face="normal" font="default" size="100%">GIS and public health policy: a new frontier for improving community health</style> My EndNote Library.enl EndNote 649 649 17 <style face="normal" font="default" size="100%">Performance measurement in public health: conceptual and methodological issues in building the science base</style> My EndNote Library.enl EndNote 650 650 17 <style face="normal" font="default" size="100%">Use of computer modeling for emergency preparedness functions by local and state health officials: a needs assessment</style> My EndNote Library.enl EndNote 651 651 17 <style face="normal" font="default" size="100%">Service delivery and community: social capital, service systems integration, and outcomes among homeless persons with severe mental illness</style> My EndNote Library.enl EndNote 652 652 17 <style face="normal" font="default" size="100%">Confronting the public health workforce crisis: ASPH statement on the public health workforce</style> My EndNote Library.enl EndNote 653 653 17 <style face="normal" font="default" size="100%">Traditions, transitions, and transfats: new directions for public health</style> My EndNote Library.enl EndNote 654 654 17 <style face="normal" font="default" size="100%">A review of collaborative partnerships as a strategy for improving community health</style> My EndNote Library.enl EndNote 655 655 17 <style face="normal" font="default" size="100%">Toward a healthy high schools movement: strategies for mobilizing public health for educational reform</style> My EndNote Library.enl EndNote 656 656 17 <style face="normal" font="default" size="100%">Public health and social work: training dual professionals for the contemporary workplace</style> My EndNote Library.enl EndNote 657 657 17 <style face="normal" font="default" size="100%">A primer on strategies for prevention and control of seasonal and pandemic influenza</style> My EndNote Library.enl EndNote 658 658 17 <style face="normal" font="default" size="100%">The importance of diversity to public health</style> My EndNote Library.enl EndNote 659 659 17 <style face="normal" font="default" size="100%">Using the Essential Public Health Services as strategic leverage to strengthen the public health response to diabetes</style> My EndNote Library.enl EndNote 660 660 17 <style face="normal" font="default" size="100%">Toward a transdisciplinary model of evidence-based practice</style> My EndNote Library.enl EndNote 661 661 17 <style face="normal" font="default" size="100%">Public Health Emergency Preparedness at the Local Level: Results of a National Survey</style> My EndNote Library.enl EndNote 662 662 17 <style face="normal" font="default" size="100%">Assessing public health capabilities during emergency preparedness tabletop exercises: reliability and validity of a measurement tool</style> My EndNote Library.enl EndNote 663 663 17 <style face="normal" font="default" size="100%">Competition in health insurance markets: Limitations of current measures for policy analysis</style> My EndNote Library.enl EndNote 664 664 17 <style face="normal" font="default" size="100%">Policy tools for building health education and preventive counseling into managed care</style> My EndNote Library.enl EndNote 665 665 17 <style face="normal" font="default" size="100%">Health promotion and managed care: Surveys of California's health plans and population</style> My EndNote Library.enl EndNote 666 666 17 <style face="normal" font="default" size="100%">Paradigms lost: The persisting search for community in US health policy</style> My EndNote Library.enl EndNote 667 667 17 <style face="normal" font="default" size="100%">How nonprofits matter in American medicine, and what to do about it</style> My EndNote Library.enl EndNote 668 668 17 <style face="normal" font="default" size="100%">A broader vision for managed care, part 3: The scope and determinants of community benefits</style> My EndNote Library.enl EndNote 669 669 17 <style face="normal" font="default" size="100%">Measuring community benefits provided by nonprofit and for-profit HMOs</style> My EndNote Library.enl EndNote 670 670 17 <style face="normal" font="default" size="100%">Current status of state policies that support school-based health centers</style> My EndNote Library.enl EndNote 671 671 17 <style face="normal" font="default" size="100%">Evaluating interventions to reduce health care disparities: an RWJF program</style> My EndNote Library.enl EndNote 672 672 17 <style face="normal" font="default" size="100%">Health services in day-care centers: a public health nursing design</style> My EndNote Library.enl EndNote 673 673 17 <style face="normal" font="default" size="100%">Influenza vaccine: delivering the goods</style> My EndNote Library.enl EndNote 674 674 17 <style face="normal" font="default" size="100%">Influenza vaccine--unacceptable or unaccepted</style> My EndNote Library.enl EndNote 675 675 17 <style face="normal" font="default" size="100%">Pertussis in Florida, 2000-2006: trends in a historically low-incidence state</style> My EndNote Library.enl EndNote 676 676 17 <style face="normal" font="default" size="100%">The Central California Regional Obesity Prevention Program: changing nutrition and physical activity environments in California's heartland</style> My EndNote Library.enl EndNote 677 677 17 <style face="normal" font="default" size="100%">A third public health revolution: an editorial</style> My EndNote Library.enl EndNote 678 678 17 <style face="normal" font="default" size="100%">Current reflections on the state of the public health workforce</style> My EndNote Library.enl EndNote 679 679 17 <style face="normal" font="default" size="100%">Foreword</style> My EndNote Library.enl EndNote 680 680 17 <style face="normal" font="default" size="100%">Public health competencies required by managed care organizations</style> My EndNote Library.enl EndNote 681 681 17 <style face="normal" font="default" size="100%">A survey of state health department compliance with the recommendations of the Institute of Medicine report, The Future of Public Health</style> My EndNote Library.enl EndNote 682 682 17 <style face="normal" font="default" size="100%">Public Health Performance</style> My EndNote Library.enl EndNote 683 683 17 <style face="normal" font="default" size="100%">The public and public health organizations: issues for community engagement in public health</style> My EndNote Library.enl EndNote 684 684 17 <style face="normal" font="default" size="100%">Managed care and public health</style> My EndNote Library.enl EndNote 685 685 17 <style face="normal" font="default" size="100%">Compliance with the recommendations of the Institute of medicine report, The Future of Public Health: a survey of local health departments</style> My EndNote Library.enl EndNote 686 686 17 <style face="normal" font="default" size="100%">The voice of the public in public health policy and planning: the role of public judgment</style> My EndNote Library.enl EndNote 687 687 17 <style face="normal" font="default" size="100%">Local public health agency capacity and its relationship to public health system performance</style> My EndNote Library.enl EndNote 688 688 17 <style face="normal" font="default" size="100%">Public health systems and services research: bridging the practice-research gap</style> My EndNote Library.enl EndNote 689 689 17 <style face="normal" font="default" size="100%">Managed care in the United States</style> My EndNote Library.enl EndNote 690 690 17 <style face="normal" font="default" size="100%">Public health services and systems research</style> My EndNote Library.enl EndNote 691 691 17 <style face="normal" font="default" size="100%">Applying Health Services Research to Public Health Practice: An Emerging Priority (vol 44, pg 1775, 2009)</style> My EndNote Library.enl EndNote 692 692 17 <style face="normal" font="default" size="100%">Public health systems research - The new kid on the block</style> My EndNote Library.enl EndNote 693 693 17 <style face="normal" font="default" size="100%">Public health systems research: the new kid on the block</style> My EndNote Library.enl EndNote 694 694 17 <style face="normal" font="default" size="100%">The demand for doctorally prepared public health personnel in institutions of higher education</style> My EndNote Library.enl EndNote 695 695 17 <style face="normal" font="default" size="100%">The public health leadership institute: leadership training for state and local health officers</style> My EndNote Library.enl EndNote 696 696 17 <style face="normal" font="default" size="100%">The presence of total quality management and continuous quality improvement processes in California public health clinics</style> My EndNote Library.enl EndNote 697 697 17 <style face="normal" font="default" size="100%">An assessment of the walkability of two school neighborhoods in Greenville, North Carolina</style> My EndNote Library.enl EndNote 698 698 17 <style face="normal" font="default" size="100%">A network strategy to advance public health in Europe</style> My EndNote Library.enl EndNote 699 699 17 <style face="normal" font="default" size="100%">Refining estimates of public health spending as measured in national health expenditures accounts: the United States experience</style> My EndNote Library.enl EndNote 700 700 13 <style face="normal" font="default" size="100%">Health information exchange: a frontier model</style> My EndNote Library.enl EndNote 701 701 17 <style face="normal" font="default" size="100%">Measuring health behaviors and landline telephones: potential coverage bias in a low-income, rural population</style> My EndNote Library.enl EndNote 702 702 17 <style face="normal" font="default" size="100%">The relationship between built park environments and physical activity in four park locations</style> My EndNote Library.enl EndNote 703 703 17 <style face="normal" font="default" size="100%">Physicians as double agents - Maintaining trust in an era of multiple accountabilities</style> My EndNote Library.enl EndNote 704 704 17 <style face="normal" font="default" size="100%">Performance measures and their benchmarks for assessing organizational cultural competency in behavioral health care service delivery</style> My EndNote Library.enl EndNote 705 705 17 <style face="normal" font="default" size="100%">Public health surveillance for methicillin-resistant Staphylococcus aureus: comparison of methods for classifying health care- and community-associated infections</style> My EndNote Library.enl EndNote 706 706 17 <style face="normal" font="default" size="100%">The intelligent reader's guide to health intelligence</style> My EndNote Library.enl EndNote 707 707 17 <style face="normal" font="default" size="100%">Scaling up training and education for the Health Workforce--international collaboration</style> My EndNote Library.enl EndNote 708 708 17 <style face="normal" font="default" size="100%">Public health and business: a partnership that makes cents</style> My EndNote Library.enl EndNote 709 709 17 <style face="normal" font="default" size="100%">The impact of school building conditions on student absenteeism in Upstate New York</style> My EndNote Library.enl EndNote 710 710 17 <style face="normal" font="default" size="100%">Effects of green buildings on employee health and productivity</style> My EndNote Library.enl EndNote 711 711 17 <style face="normal" font="default" size="100%">When the cat is out of the bag: a case study in public health rationing in Oregon during the 2004-2005 influenza vaccine shortage</style> My EndNote Library.enl EndNote 712 712 17 <style face="normal" font="default" size="100%">A Rasch and confirmatory factor analysis of the general health questionnaire (GHQ)--12</style> My EndNote Library.enl EndNote 713 713 13 <style face="normal" font="default" size="100%">Advancing the field of public health finance through public health systems research</style> My EndNote Library.enl EndNote 714 714 17 <style face="normal" font="default" size="100%">Vaccination coverage estimates for selected counties: achievement of Healthy People 2010 goals and association with indices of access to care, economic conditions, and demographic composition</style> My EndNote Library.enl EndNote 715 715 17 <style face="normal" font="default" size="100%">The role of school health centers in health care access and client outcomes</style> My EndNote Library.enl EndNote 716 716 17 <style face="normal" font="default" size="100%">Effective community health assessments in King County, Washington</style> My EndNote Library.enl EndNote 717 717 17 <style face="normal" font="default" size="100%">Reviewing self-reported impacts of community health assessment in local health jurisdictions</style> My EndNote Library.enl EndNote 718 718 17 <style face="normal" font="default" size="100%">Using a Web-based simulation as a problem-based learning experience: perceived and actual performance of undergraduate public health students</style> My EndNote Library.enl EndNote 719 719 17 <style face="normal" font="default" size="100%">Challenges and opportunities for surveillance data to inform public health policy on chronic non-communicable diseases: Canadian perspectives</style> My EndNote Library.enl EndNote 720 720 17 <style face="normal" font="default" size="100%">Stretching the safety net to serve undocumented immigrants: community responses to health needs</style> My EndNote Library.enl EndNote 721 721 17 <style face="normal" font="default" size="100%">Use of bureau of labor statistics data for characterizing the public health workforce</style> My EndNote Library.enl EndNote 722 722 17 <style face="normal" font="default" size="100%">Professionalization and public health: historical legacies, continuing dilemmas</style> My EndNote Library.enl EndNote 723 723 17 <style face="normal" font="default" size="100%">Pandemic influenza and farmworkers: the effects of employment, social, and economic factors</style> My EndNote Library.enl EndNote 724 724 17 <style face="normal" font="default" size="100%">Pandemic influenza planning: addressing the needs of children</style> My EndNote Library.enl EndNote 725 725 17 <style face="normal" font="default" size="100%">Vaccinating the health-care workforce: state law vs. institutional requirements</style> My EndNote Library.enl EndNote 726 726 47 <style face="normal" font="default" size="100%">Regionalization in local public health systems: variation in rationale, implementation, and impact on public health preparedness</style> My EndNote Library.enl EndNote 727 727 13 <style face="normal" font="default" size="100%">Regionalization in local public health systems: variation in rationale, implementation and impact on public health preparedness</style> My EndNote Library.enl EndNote 728 728 17 <style face="normal" font="default" size="100%">Regionalization in local public health systems: variation in rationale, implementation, and impact on public health preparedness</style> My EndNote Library.enl EndNote 729 729 17 <style face="normal" font="default" size="100%">A Web-based tool for assessing and improving the usefulness of community health assessments</style> My EndNote Library.enl EndNote 730 730 17 <style face="normal" font="default" size="100%">The relation of FIMR programs and other perinatal systems initiatives with maternal and child health activities in the community</style> My EndNote Library.enl EndNote 731 731 17 <style face="normal" font="default" size="100%">The FIMR evaluation: Objectives, concepts, frameworks, and methods</style> My EndNote Library.enl EndNote 732 732 17 <style face="normal" font="default" size="100%">Special healthcare taxing districts: association with population health status</style> My EndNote Library.enl EndNote 733 733 17 <style face="normal" font="default" size="100%">Using automated pharmacy records to assess the management of tuberculosis</style> My EndNote Library.enl EndNote 734 734 17 <style face="normal" font="default" size="100%">Analysis of the current status of public health practice in local health departments</style> My EndNote Library.enl EndNote 735 735 17 <style face="normal" font="default" size="100%">No more business as usual: enticing companies to sharply lower the public health costs of the products they sell</style> My EndNote Library.enl EndNote 736 736 17 <style face="normal" font="default" size="100%">Associations between recreational walking and attractiveness, size, and proximity of neighborhood open spaces</style> My EndNote Library.enl EndNote 737 737 17 <style face="normal" font="default" size="100%">OpenEpi: a web-based epidemiologic and statistical calculator for public health</style> My EndNote Library.enl EndNote 738 738 17 <style face="normal" font="default" size="100%">Health policy: if you don't know where you're going, any road will take you</style> My EndNote Library.enl EndNote 739 739 17 <style face="normal" font="default" size="100%">Moving forward with workforce development research in public health</style> My EndNote Library.enl EndNote 740 740 17 <style face="normal" font="default" size="100%">Pedagogical promise and problems: teaching public health law</style> My EndNote Library.enl EndNote 741 741 17 <style face="normal" font="default" size="100%">Corporate philanthropy, lobbying, and public health policy</style> My EndNote Library.enl EndNote 742 742 17 <style face="normal" font="default" size="100%">Guide for applied public health workforce research: an evidence-based approach to workforce development</style> My EndNote Library.enl EndNote 743 743 17 <style face="normal" font="default" size="100%">Practicing epidemiology: how competent are we?</style> My EndNote Library.enl EndNote 744 744 17 <style face="normal" font="default" size="100%">Measuring the public's health</style> My EndNote Library.enl EndNote 745 745 17 <style face="normal" font="default" size="100%">Ethical decision making in a crisis: a case study of ethics in public health emergencies</style> My EndNote Library.enl EndNote 746 746 17 <style face="normal" font="default" size="100%">Estimating influenza-associated deaths in the United States</style> My EndNote Library.enl EndNote 747 747 17 <style face="normal" font="default" size="100%">Applied epidemiology competencies: experience in the field</style> My EndNote Library.enl EndNote 748 748 17 <style face="normal" font="default" size="100%">The public health workforce</style> My EndNote Library.enl EndNote 749 749 17 <style face="normal" font="default" size="100%">Public health accreditation: progress on national accountability</style> My EndNote Library.enl EndNote 750 750 17 <style face="normal" font="default" size="100%">Wanted: the workforce to work on the workforce agenda</style> My EndNote Library.enl EndNote 751 751 17 <style face="normal" font="default" size="100%">Cost effectiveness of hepatitis B vaccination strategies in Ireland: an economic evaluation</style> My EndNote Library.enl EndNote 752 752 17 <style face="normal" font="default" size="100%">Serving the family from birth to the medical home - Newborn screening: A blueprint for the future - A call for a national agenda on state newborn screening programs</style> My EndNote Library.enl EndNote 753 753 17 <style face="normal" font="default" size="100%">Do cigarette prices vary by brand, neighborhood, and store characteristics?</style> My EndNote Library.enl EndNote 754 754 17 <style face="normal" font="default" size="100%">Replicating success: developing a standard FETP curriculum</style> My EndNote Library.enl EndNote 755 755 17 <style face="normal" font="default" size="100%">Evaluation as a critical factor of success in local public health accreditation programs</style> My EndNote Library.enl EndNote 756 756 17 <style face="normal" font="default" size="100%">A pilot asthma incidence surveillance system and case definition: lessons learned</style> My EndNote Library.enl EndNote 757 757 17 <style face="normal" font="default" size="100%">Pandemic influenza preparedness and response among immigrants and refugees</style> My EndNote Library.enl EndNote 758 758 17 <style face="normal" font="default" size="100%">Comparison of the self-administered and interviewer-administered modes of the child-OIDP</style> My EndNote Library.enl EndNote 759 759 17 <style face="normal" font="default" size="100%">Can public health performance standards improve the quality of public health practice?</style> My EndNote Library.enl EndNote 760 760 17 <style face="normal" font="default" size="100%">Competency-based credentialing of public health administrators in Illinois</style> My EndNote Library.enl EndNote 761 761 17 <style face="normal" font="default" size="100%">Public health workforce trends since 1980: myth or reality?</style> My EndNote Library.enl EndNote 762 762 17 <style face="normal" font="default" size="100%">Evaluating the performance of local health agencies. 2. The 10 public health practices vs the 10 public health services: a clarification</style> My EndNote Library.enl EndNote 763 763 17 <style face="normal" font="default" size="100%">Local health department effectiveness in addressing the core functions of public health</style> My EndNote Library.enl EndNote 764 764 17 <style face="normal" font="default" size="100%">From measuring to improving public health practice</style> My EndNote Library.enl EndNote 765 765 17 <style face="normal" font="default" size="100%">Core function-related local public health practice effectiveness</style> My EndNote Library.enl EndNote 766 766 17 <style face="normal" font="default" size="100%">Pesticide exposure surveillance and prevention skills of staff in eastern North Carolina health departments</style> My EndNote Library.enl EndNote 767 767 17 <style face="normal" font="default" size="100%">The National Public Health Performance Standards Program: will it strengthen governance of local public health?</style> My EndNote Library.enl EndNote 768 768 17 <style face="normal" font="default" size="100%">A survey of usage protocols of syndromic surveillance systems by state public health departments in the United States</style> My EndNote Library.enl EndNote 769 769 13 <style face="normal" font="default" size="100%">Building the field of public health systems research</style> My EndNote Library.enl EndNote 770 770 17 <style face="normal" font="default" size="100%">Television exposure is related to fear of avian flu, an Ecological Study across 23 member states of the European Union</style> My EndNote Library.enl EndNote 771 771 17 <style face="normal" font="default" size="100%">Assessing and forecasting population health: integrating knowledge and beliefs in a comprehensive framework</style> My EndNote Library.enl EndNote 772 772 17 <style face="normal" font="default" size="100%">Recent advances in public health systems research in the United States</style> My EndNote Library.enl EndNote 773 773 17 <style face="normal" font="default" size="100%">Prisons' preparedness for pandemic flu and the ethical issues</style> My EndNote Library.enl EndNote 774 774 17 <style face="normal" font="default" size="100%">Effective health risk communication about pandemic influenza for vulnerable populations</style> My EndNote Library.enl EndNote 775 775 17 <style face="normal" font="default" size="100%">The European data protection legislation and its consequences for public health monitoring: a plea for action</style> My EndNote Library.enl EndNote 776 776 17 <style face="normal" font="default" size="100%">Diabetes mellitus and asthma: "Twin" challenges for public health and managed care systems</style> My EndNote Library.enl EndNote 777 777 13 <style face="normal" font="default" size="100%">Study on and development of a tool to measure connectivity among public health partnerships</style> My EndNote Library.enl EndNote 778 778 17 <style face="normal" font="default" size="100%">Linking improvements in health-related quality of life to reductions in Medicaid costs among students who use school-based health centers</style> My EndNote Library.enl EndNote 779 779 17 <style face="normal" font="default" size="100%">Health care in the United States. Lesson four: Changing patterns of morbidity and mortality: their implications for health care</style> My EndNote Library.enl EndNote 780 780 17 <style face="normal" font="default" size="100%">Ecologic studies revisited</style> My EndNote Library.enl EndNote 781 781 17 <style face="normal" font="default" size="100%">Transformations in public health systems</style> My EndNote Library.enl EndNote 782 782 17 <style face="normal" font="default" size="100%">Bringing health professionals into preventive medicine and public health: a federal experience</style> My EndNote Library.enl EndNote 783 783 17 <style face="normal" font="default" size="100%">Ancillary benefits for climate change mitigation and air pollution control in the world's motor vehicle fleets</style> My EndNote Library.enl EndNote 784 784 17 <style face="normal" font="default" size="100%">Cross-diagnostic validity of the Nottingham Health Profile Index of Distress (NHPD)</style> My EndNote Library.enl EndNote 785 785 17 <style face="normal" font="default" size="100%">Privacy versus public health: the impact of current confidentiality rules</style> My EndNote Library.enl EndNote 786 786 17 <style face="normal" font="default" size="100%">Evidence synthesis, upstream determinants and health inequalities: the role of a proposed new Cochrane Public Health Review Group</style> My EndNote Library.enl EndNote 787 787 17 <style face="normal" font="default" size="100%">The economic impact of exposure to secondhand smoke in Minnesota</style> My EndNote Library.enl EndNote 788 788 17 <style face="normal" font="default" size="100%">The implementation of model standards in local health departments</style> My EndNote Library.enl EndNote 789 789 17 <style face="normal" font="default" size="100%">Promoting clinical involvement in hospital quality improvement efforts: the effects of top management, board, and physician leadership</style> My EndNote Library.enl EndNote 790 790 17 <style face="normal" font="default" size="100%">Population health and the health system: a comparative analysis of avoidable mortality in three nations and their world cities</style> My EndNote Library.enl EndNote 791 791 17 <style face="normal" font="default" size="100%">Factors associated with interorganizational relationships among outpatient drug treatment organizations 1990-2000</style> My EndNote Library.enl EndNote 792 792 17 <style face="normal" font="default" size="100%">Alternatives to the randomized controlled trial</style> My EndNote Library.enl EndNote 793 793 17 <style face="normal" font="default" size="100%">The harmonization of the medical speciality in public health in the EU countries--a challenge for the profession</style> My EndNote Library.enl EndNote 794 794 17 <style face="normal" font="default" size="100%">Impact of a smoke-free hospital campus policy on employee and consumer behavior</style> My EndNote Library.enl EndNote 795 795 17 <style face="normal" font="default" size="100%">Health services research tools for public health professionals</style> My EndNote Library.enl EndNote 796 796 17 <style face="normal" font="default" size="100%">Experimental pretesting of public health campaigns: a case study</style> My EndNote Library.enl EndNote 797 797 13 <style face="normal" font="default" size="100%">Examining public health system organization and public health performance in rural communities</style> My EndNote Library.enl EndNote 798 798 17 <style face="normal" font="default" size="100%">Public Health Systems: A Social Networks Perspective</style> My EndNote Library.enl EndNote 799 799 17 <style face="normal" font="default" size="100%">Optimal search strategies for detecting health services research studies in MEDLINE</style> My EndNote Library.enl EndNote 800 800 17 <style face="normal" font="default" size="100%">The data for decision making project: assessment of surveillance systems in developing countries to improve access to public health information</style> My EndNote Library.enl EndNote 801 801 17 <style face="normal" font="default" size="100%">Health indicators in the European regions--ISARE II</style> My EndNote Library.enl EndNote 802 802 17 <style face="normal" font="default" size="100%">Health indicators in the European regions--ISARE II</style> My EndNote Library.enl EndNote 803 803 17 <style face="normal" font="default" size="100%">State of emergency preparedness of Kentucky's rural public health workforce: assessing its ability to identify community health problems</style> My EndNote Library.enl EndNote 804 804 17 <style face="normal" font="default" size="100%">Effects of written informed consent requirements on HIV testing rates: evidence from a natural experiment</style> My EndNote Library.enl EndNote 805 805 17 <style face="normal" font="default" size="100%">Integrating epidemiology, education, and organizing for environmental justice: community health effects of industrial hog operations</style> My EndNote Library.enl EndNote 806 806 17 <style face="normal" font="default" size="100%">Health disparities among Mexican American women aged 15-44 years: National Health and Nutrition Examination Survey, 1999-2004</style> My EndNote Library.enl EndNote 807 807 17 <style face="normal" font="default" size="100%">Gun shows and gun violence: fatally flawed study yields misleading results</style> My EndNote Library.enl EndNote 808 808 17 <style face="normal" font="default" size="100%">(New) public management of mentally disordered offenders Part II: A vision with promise</style> My EndNote Library.enl EndNote 809 809 17 <style face="normal" font="default" size="100%">Lessons learned from evaluations of California's statewide school nutrition standards</style> My EndNote Library.enl EndNote 810 810 17 <style face="normal" font="default" size="100%">Communicating with the public about emerging health threats: lessons from the Pre-Event Message Development Project</style> My EndNote Library.enl EndNote 811 811 17 <style face="normal" font="default" size="100%">The UK Public Health Skills and Career Framework--could it help to make public health the business of every workforce?</style> My EndNote Library.enl EndNote 812 812 17 <style face="normal" font="default" size="100%">Competency development in public health leadership</style> My EndNote Library.enl EndNote 813 813 17 <style face="normal" font="default" size="100%">World Cup 2010 planning: an integration of public health and medical systems</style> My EndNote Library.enl EndNote 814 814 17 <style face="normal" font="default" size="100%">Using the ecology model to describe the impact of asthma on patterns of health care</style> My EndNote Library.enl EndNote 815 815 17 <style face="normal" font="default" size="100%">Ambulatory care visits and physician satisfaction: From medical directors' perspectives</style> My EndNote Library.enl EndNote 816 816 17 <style face="normal" font="default" size="100%">Effects of an ongoing epidemic on the annual influenza vaccination rate and vaccination timing among the Medicare elderly: 2000-2005</style> My EndNote Library.enl EndNote 817 817 17 <style face="normal" font="default" size="100%">Governing board structure, business strategy, and performance of acute care hospitals: a contingency perspective</style> My EndNote Library.enl EndNote 818 818 17 <style face="normal" font="default" size="100%">State-level health care access and use among children in US immigrant families</style> My EndNote Library.enl EndNote 819 819 17 <style face="normal" font="default" size="100%">Public health nursing and immunization surveillance</style> My EndNote Library.enl EndNote 820 820 17 <style face="normal" font="default" size="100%">Memoranda of understanding between Medicaid MCOs and public health departments</style> My EndNote Library.enl EndNote 821 821 17 <style face="normal" font="default" size="100%">Evaluation of mandated memoranda of understanding between local health departments and Medicaid managed care plans</style> My EndNote Library.enl EndNote 822 822 17 <style face="normal" font="default" size="100%">Local public health system partnerships</style> My EndNote Library.enl EndNote 823 823 17 <style face="normal" font="default" size="100%">Partnerships for learning population-based public health nursing: Web-delivered continuing education for public health nurse preceptors</style> My EndNote Library.enl EndNote 824 824 13 <style face="normal" font="default" size="100%">Research on the structural capacities, processes, and performance of essential public health services by small local public health systems</style> My EndNote Library.enl EndNote 825 825 17 <style face="normal" font="default" size="100%">The road to population health: using Healthy People 2010 in nursing education</style> My EndNote Library.enl EndNote 826 826 17 <style face="normal" font="default" size="100%">Local health department partnerships with faith-based organizations</style> My EndNote Library.enl EndNote 827 827 17 <style face="normal" font="default" size="100%">Improving public health nursing education: recommendations of local public health nurses</style> My EndNote Library.enl EndNote 828 828 17 <style face="normal" font="default" size="100%">Public health nursing practice change and recommendations for improvement</style> My EndNote Library.enl EndNote 829 829 17 <style face="normal" font="default" size="100%">Local partnerships for community assessment and planning</style> My EndNote Library.enl EndNote 830 830 17 <style face="normal" font="default" size="100%">Local health department performance: compliance with state statutes and rules</style> My EndNote Library.enl EndNote 831 831 17 <style face="normal" font="default" size="100%">Community-driven standards-based electronic laboratory data-sharing networks</style> My EndNote Library.enl EndNote 832 832 17 <style face="normal" font="default" size="100%">Optimal investment in a portfolio of HIV prevention programs</style> My EndNote Library.enl EndNote 833 833 17 <style face="normal" font="default" size="100%">A comparative analysis of health-related quality of life for residents of U.S. counties with and without coal mining</style> My EndNote Library.enl EndNote 834 834 17 <style face="normal" font="default" size="100%">Multi-criteria assessment of county public health capability disparities</style> biblatex-biber-1.8/t/tdata/bibtex-aliases.bib000444000000000000 253212230324177 20406 0ustar00rootroot000000000000@PHDTHESIS{alias1, AUTHOR = {Sammy Student}, TITLE = {Four Years Later}, INSTITUTION = {University of Life}, ADDRESS = {Ivory Towers}, DATE = {2003-10-01}, } % driver-defined default map to MISC @THING{alias2, AUTHOR = {Samuel Strange}, TITLE = {Entitled}, ADDRESS = {Ivory Towers}, SCHOOL = {University of West Grantham}, INSTITUTION = {University of East Grantham}, DATE = {2004-03-03}, } % User-defined map to CUSTOMB @CHAT{alias3, AUTHOR = {Samuel Strange}, TITLE = {Hello}, } % User-defined map to CUSTOMA plus some alsosets (see tests) @CONVERSATION{alias4, AUTHOR = {Samuel Strange}, TITLE = {Hello}, PARTICIPANT = {Sam Smith}, VERBC = {sometext}, PUBMEDID = {anid}, } % User-defined map of string replacements and null maps @UNPUBLISHED{alias5, ABSTRACT = {Some abstract %50 of which is useless}, AUTHOR = {AAA and BBB and CCC and DDD and EEE}, TITLE = {A title}, DATE = {2003}, USERB = {test}, LISTA = {list test}, LISTB = {late and early}, LISTC = {late and early}, } % No target, just field additions @MISC{alias6, AUTHOR = {Brian Broom}, TITLE = {Bristles} } % No regexp match % Also testing append mode @REPORT{alias7, LISTA = {listaval}, VERBA = {val1}, VERBB = {val2}, VERBC = {val3}, } biblatex-biber-1.8/t/tdata/encoding3.bib000444000000000000 44112230324176 17337 0ustar00rootroot000000000000% -*- coding: latin-1-unix -*- % This is a latin1 encoded file (Notice the "LATIN SMALL LETTER O WITH DIAERESIS"). % The top line is a hint to Emacs to open in the right encoding @BOOK{test1, YEAR = {1999}, AUTHOR = {Edward Encalcer}, TITLE = {Sme title}, PUBLISHER = {A press} } biblatex-biber-1.8/t/tdata/encoding4.bib000444000000000000 44312230324176 17342 0ustar00rootroot000000000000% -*- coding: latin-2-unix -*- % This is a latin2 encoded file (Notice the "LATIN CAPITAL LETTER Z WITH DOT ABOVE"). % The top line is a hint to Emacs to open in the right encoding @BOOK{test1, YEAR = {1999}, AUTHOR = {Edward Encalcer}, TITLE = {ome title}, PUBLISHER = {A press} } biblatex-biber-1.8/t/tdata/extrayear.bcf000444000000000000 26556412230324176 17573 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date nodate maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey labelalpha sortname author editor translator sorttitle title sortyear year volume 0000 sorttitle title article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender extrayear.bib L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 LY1 LY2 companion1 companion2 companion3 vangennep gennep nodate1 nodate2 shorthand biblatex-biber-1.8/t/tdata/extratitleyear.bib000444000000000000 62512230324177 20541 0ustar00rootroot000000000000@BOOK{L1, TITLE = {Title 1}, YEAR = {1995}, PUBLISHER = {puba} } @BOOK{L2, TITLE = {Title 1}, YEAR = {1995}, PUBLISHER = {pubb} } @BOOK{L3, AUTHOR = {Jim Smith}, YEAR = {1995}, } @BOOK{L4, TITLE = {Title 1}, YEAR = {1996}, } @BOOK{L5, SHORTTITLE = {Title A}, TITLE = {Title 1}, YEAR = {1995}, } biblatex-biber-1.8/t/tdata/endnotexml.bcf000444000000000000 26146012230324177 17734 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 1 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey labelalpha sortname author editor translator sorttitle title sortyear year volume 0000 sorttitle title article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender endnote.xml fpvfswdz9sw5e0edvxix5z26vxadptrzxfwa:42 fpvfswdz9sw5e0edvxix5z26vxadptrzxfwa:47 shorthand biblatex-biber-1.8/t/tdata/sort-order.bcf000444000000000000 26167212230324176 17663 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm citeorder article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender sort-order.bib L2 L3 L1B L1 L4 L5 L1A L7 L8 L6 L9 shorthand biblatex-biber-1.8/t/tdata/biber-test.conf000444000000000000 15557412230324176 20021 0ustar00rootroot000000000000 testlocale 5 doesnotexist.bib examples.bib doesnotexist.bib ARTICLE UNPUBLISHED examples.bib MISC examples.bib examples.bib REPORT UNPUBLISHED ONLINE endnote.xml endnote.xml Report endnote.xml ris1.ris ris1.ris ris1.ris RPRT journalArticle zotero.rdf journalArticle book bookSection article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids entryset date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender biblatex-biber-1.8/t/tdata/sort-uc.bib000444000000000000 236312230324176 17107 0ustar00rootroot000000000000% Test of U::C tailoring - Swedish - in UCA, å is sorted after ä but should be before @BOOK{LS1, AUTHOR = {Slippery, Zänny}, TITLE = {Silent Slippers}, PUBLISHER = {Footwear Folios}, LOCATION = {London}, YEAR = {1932}, SHORTHAND = {SZä} } @BOOK{LS2, AUTHOR = {Slippery, Zånny}, TITLE = {People Prefer Packages to Post}, PUBLISHER = {Terrible Typists}, LOCATION = {Grimsby}, YEAR = {1945}, SHORTHAND = {SZå} } @BOOK{LS3, AUTHOR = {Slippery, Zönny}, TITLE = {Last Lingering Lemons}, PUBLISHER = {Fruit Folios}, LOCATION = {Catterick}, YEAR = {1966}, SHORTHAND = {SZo} } % Upper before lower false @BOOK{LS4, AUTHOR = {Slippery, Zönny}, TITLE = {last lingering lemons}, PUBLISHER = {Fruit Folios}, LOCATION = {Catterick}, YEAR = {1966}, SHORTHAND = {SZo} } @BOOK{LS5, AUTHOR = {Slippery, Zanny}, YEAR = {1989}, } % Surname is substring so should be first @BOOK{LS6, AUTHOR = {Slippery, Zan}, YEAR = {1988}, } biblatex-biber-1.8/t/tdata/related.bcf000444000000000000 26113012230324177 17171 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm citeorder article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender related.bib key1 key2 c1 shorthand biblatex-biber-1.8/t/tdata/skips.bib000444000000000000 303712230324176 16643 0ustar00rootroot000000000000@ARTICLE{skip1, OPTIONS = {skipbib}, AUTHOR = {John Doe}, SHORTHAND = {AFS}, TITLE = {Algorithms For Sorting}, PUBLISHER = {A press}, LOCATION = {Cambridge}, YEAR = {1994}, } @ARTICLE{skip2, OPTIONS = {skiplos}, SHORTHAND = {SA}, AUTHOR = {John Doe}, TITLE = {Sorting Algorithms}, PUBLISHER = {A press}, LOCATION = {Cambridge}, YEAR = {1995}, } @ARTICLE{skip3, OPTIONS = {skiplos,skiplab}, SHORTHAND = {SWA}, AUTHOR = {John Doe}, TITLE = {Sorting With Algorithms}, PUBLISHER = {A press}, LOCATION = {Cambridge}, YEAR = {1934}, } @ARTICLE{skip4, OPTIONS = {dataonly}, SHORTHAND = {AWS}, AUTHOR = {John Doe}, TITLE = {Algorithms Which Sort}, PUBLISHER = {A press}, LOCATION = {Cambridge}, YEAR = {1932}, } @SET{seta, ENTRYSET = {set:membera,set:memberb,set:memberc} } @BOOK{set:membera, KEYWORDS = {key1, key2}, AUTHOR = {Doe, John}, TITLE = {Set Member A}, DATE = {2010}, } @BOOK{set:memberb, AUTHOR = {Doe, John}, TITLE = {Set Member B}, DATE = {2010}, } @BOOK{set:memberc, AUTHOR = {Doe, John}, TITLE = {Set Member C}, DATE = {2010}, } @BOOK{noseta, AUTHOR = {Doe, John}, TITLE = {Stand-Alone A}, DATE = {2010}, } @BOOK{nosetb, AUTHOR = {Doe, John}, TITLE = {Stand-Alone B}, DATE = {2010}, } @BOOK{nosetc, AUTHOR = {Doe, John}, TITLE = {Stand-Alone C}, DATE = {2010}, } biblatex-biber-1.8/t/tdata/xdata.bib000444000000000000 146012230324176 16611 0ustar00rootroot000000000000@XDATA{macmillan:pub, IDS = {macmillan:pubALIAS}, PUBLISHER = {Macmillan} } @XDATA{macmillan:loc, LOCATION = {New York and London}, NOTE = {A Note} } @XDATA{macmillan, IDS = {macmillanalias}, XDATA = {macmillan:pubALIAS, macmillan:loc} } @BOOK{xd1, AUTHOR = {Edward Ellington}, DATE = {2007}, XDATA = {macmillanalias, missingxd} } @BOOK{xd2, AUTHOR = {Peter Pillington}, DATE = {2003}, PUBLISHER = {Routledge}, XDATA = {macmillan:loc, bltxxd1} } % Loop detection test @XDATA{loop:1, NOTE = {Note} } @XDATA{loop:2, XDATA = {loop:3} } @XDATA{loop:3, XDATA = {loop} } @XDATA{loop, XDATA = {loop:1, loop:2} } @BOOK{xd3, AUTHOR = {Edward Ellington}, DATE = {1923}, XDATA = {loop} } biblatex-biber-1.8/t/tdata/general2.bcf000444000000000000 26454312230324176 17262 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 0 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 1 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids entryset date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender examples.bib examples.bib murray t1 t2 kant:ku kant:kpv shore missing1 missing2 anon1 anon2 u1 u2 alias1 alias2 alias6 us1 list1 shorthand biblatex-biber-1.8/t/tdata/biblatexml.bcf000444000000000000 26375512230324175 17711 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 1 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 1 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey labelalpha sortname author editor translator sorttitle title sortyear year volume 0000 sorttitle title article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender biblatexml.bltxml * shorthand biblatex-biber-1.8/t/tdata/uniqueness3.bcf000444000000000000 26312012230324176 20033 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 1 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 1 uniquename 2 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender uniqueness3.bib ey1 ey2 ey3 ey4 ey5 ey6 shorthand biblatex-biber-1.8/t/tdata/sortlists.bcf000444000000000000 26556512230324177 17637 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm citeorder article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender sortlists.bib K1 K2 K3 K4 author publisher verba author key2 author thesis key1 author verba rubbish author author verba rubbish author year title publisher biblatex-biber-1.8/t/tdata/set-static.bcf000444000000000000 26207112230324176 17635 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm citeorder article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender sets.bib Static2 Static1 sets.bib Static2 Static3 Static4 shorthand shorthand biblatex-biber-1.8/t/tdata/options.bib000444000000000000 72612230324176 17167 0ustar00rootroot000000000000@BOOK{L1, AUTHOR = {John Doe}, TITLE = {Title 1}, PUBLISHER = {Oxford}, ORIGDATE = {1985-10-30}, DATE = {1998-04-05}, } @BOOK{L2, OPTIONS = {maxnames=3,maxitems=2,maxalphanames=10}, AUTHOR = {Ellison Edwards}, TITLE = {Title 2}, PUBLISHER = {Oxford}, DATE = {1998-04-05}, } @BOOK{L3, OPTIONS = {blah=10}, AUTHOR = {Bunty Bluntford}, TITLE = {Title 3}, PUBLISHER = {Oxford}, DATE = {1999-04-05}, } biblatex-biber-1.8/t/tdata/uniqueness4.bcf000444000000000000 26542212230324176 20043 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 1 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 1 uniquename 2 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender uniqueness4.bib us1 us2 us3 us4 us5 us6 us7 us8 us9 us10 us11 us12 us13 us14 us15 us16 us17 us18 us19 us20 us21 us22 us23 us24 us25 us26 us27 us27a us28 us29 us29a us30 shorthand biblatex-biber-1.8/t/tdata/dm-constraints.bcf000444000000000000 15713112230324175 20521 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec author labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 0 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort mm sortkey sortname author editor translator sorttitle title sortyear year sorttitle title volume 0000 eta etb etc etd misc day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedtype relatedstring reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file url verba verbb verbc keywords related options pages execute fielda fieldb field1 field2 field3 field4 field5 field6 field7 field8 field9 field10 field11 field12 field13 field14 abstract isbn issn gender eta author title day endday endmonth endyear month year etb etc etd author title day endday endmonth endyear month year month journaltitle fielda fieldb field1 field2 field3 field4 field5 field6 field7 field8 field9 field10 field11 field12 field13 field14 misc author title day endday endmonth endyear month year month journaltitle month eta author title etb author title journaltitle field1 field2 field3 field4 field5 field6 field1 field2 field7 field8 field5 field6 field9 field10 etc author title journaltitle field2 field3 field4 field5 field6 field7 field2 field3 field8 field9 field10 field11 field5 etd etc fielda fieldb etd author title journaltitle field2 field3 field4 field7 field5 field8 field9 field10 field11 field6 field12 field13 isbn issn date eventdate origdate urldate gender dm-constraints.bib c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 shorthand biblatex-biber-1.8/t/tdata/sort-complex.bcf000444000000000000 26415012230324176 20211 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey labelalpha sortname author editor translator sorttitle title sortyear year sorttitle title volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender sort.bib L1 L2 L3 L4 L5 shorthand biblatex-biber-1.8/t/tdata/labelalpha.bcf000444000000000000 27545712230324177 17657 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 1 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 1 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year origday shorthand label labelname labelname year origday & labelname title year label labelname - title title labelname labelname labelname title mm presort sortkey labelalpha sortname author editor translator sorttitle title sortyear year sorttitle title volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender labelalpha.bib L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12 L13 L14 L15 L16 L16a L17 L17a L18 L19 L20 L21 L22 L23 L24 L25 L26 knuth:ct knuth:ct:a knuth:ct:b knuth:ct:c Schmidt2007 Schmidt2007a Schnee2007 Schnee2007a LDN1 LDN2 title1 labelstest padtest shorthand biblatex-biber-1.8/t/tdata/xdata.bltxml000444000000000000 116612230324176 17362 0ustar00rootroot000000000000 Москва bltxxd2 bltxxd3 An abstract venue biblatex-biber-1.8/t/tdata/bibtex-aliases.bcf000444000000000000 27117112230324176 20452 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec author labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 0 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical doesnotexist.bib bibtex-aliases.bib bibtex-aliases2.bib bibtex-aliases.bib bibtex-aliases.bib MISC REPORT REPORT UNPUBLISHED shorthand label labelname labelname year mm presort mm sortkey sortname author editor translator sorttitle title sortyear year sorttitle title volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender bibtex-aliases.bib alias1 alias2 alias3 alias4 alias5 alias6 alias7 shorthand biblatex-biber-1.8/t/tdata/encoding3.bcf000444000000000000 26255312230324176 17433 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 1 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender encoding3.bib * shorthand biblatex-biber-1.8/t/tdata/sections1.bib000444000000000000 154312230324176 17422 0ustar00rootroot000000000000@PREAMBLE{"Štring for Preamble 1"} @STRING{STRING1 = {value1}} @ARTICLE{sect1, SHORTHAND = {AA}, AUTHOR = {Aaron Adamson}, TITLE = {Artificial Advice}, PUBLISHER = {Aardvark Press}, LOCATION = {Arlington}, VOLUME = {4}, YEAR = {1995}, NOTE = STRING1 } @ARTICLE{sect2, SHORTHAND = {BB}, AUTHOR = {Brian Britherthwaite}, TITLE = {Best Barnacled Boat Bottoms}, PUBLISHER = {British Bulldog Press}, LOCATION = {Bridlington}, YEAR = {2004}, } @ARTICLE{sectall1, AUTHOR = {Alan All}, TITLE = {Alternative Alternations}, PUBLISHER = {Average Aunt Press}, LOCATION = {Allertron}, YEAR = {2004}, } @PREAMBLE{"String for Preamble 2"}biblatex-biber-1.8/t/tdata/encoding4.bcf000444000000000000 26255312230324176 17434 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 1 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender encoding4.bib * shorthand biblatex-biber-1.8/t/tdata/extrayear.bib000444000000000000 375612230324176 17526 0ustar00rootroot000000000000@BOOK{L1, AUTHOR = {John Doe}, TITLE = {Title 1}, PUBLISHER = {Oxford}, YEAR = {1995}, } @BOOK{L2, AUTHOR = {John Doe}, TITLE = {Title 2}, PUBLISHER = {Oxford}, YEAR = {1995}, } @BOOK{L3, AUTHOR = {John Doe}, TITLE = {Title 3}, PUBLISHER = {Oxford}, YEAR = {1995}, } @BOOK{L4, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 1}, PUBLISHER = {Oxford}, YEAR = {1995}, } @BOOK{L5, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, YEAR = {1995}, } @BOOK{L6, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 1}, PUBLISHER = {Oxford}, YEAR = {1996}, } @BOOK{L7, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, YEAR = {1996}, } @BOOK{L8, AUTHOR = {Bill Shakespeare}, TITLE = {Works}, PUBLISHER = {Oxford}, DATE = {1985}, } @BOOK{L9, TITLE = {Title with no author}, DATE = {1985}, } @BOOK{L10, TITLE = {Another title with no author}, DATE = {1985}, } @BOOK{companion1, AUTHOR = {Goossens, M. and Mittelbach, F. and Samarin, A.}, DATE = {1994}, TITLE = {Some title} } @BOOK{companion2, AUTHOR = {Goossens, M. and Mittelbach, F.}, YEAR = {1994}, TITLE = {Some title} } @BOOK{companion3, AUTHOR = {Goossens, M.}, DATE = {1994}, TITLE = {Some title} } @BOOK{vangennep, OPTIONS = {useprefix}, AUTHOR = {van Gennep, Arnold}, DATE = {1909}, TITLE = {Some title} } @BOOK{gennep, AUTHOR = {van Gennep, Arnold}, DATE = {1909}, TITLE = {Some title} } @BOOK{LY1, AUTHOR = {Arthur Example}, DATE = {2006/2009}, TITLE = {Some title} } @BOOK{LY2, AUTHOR = {Arthur Example}, DATE = {2006}, TITLE = {Some title} } % Testing no date @BOOK{nodate1, AUTHOR = {Neil Nodate}, TITLE = {Testing}, } @BOOK{nodate2, AUTHOR = {Neil Nodate}, TITLE = {Testing 2}, } biblatex-biber-1.8/t/tdata/tool-test.conf000444000000000000 16230012230324176 17674 0ustar00rootroot000000000000 testlocale 5 doesnotexist.bib examples.bib doesnotexist.bib ARTICLE UNPUBLISHED examples.bib MISC examples.bib examples.bib REPORT UNPUBLISHED ONLINE endnote.xml endnote.xml Report endnote.xml ris1.ris ris1.ris ris1.ris RPRT journalArticle zotero.rdf journalArticle book bookSection mm year article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids entryset date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender biblatex-biber-1.8/t/tdata/extratitleyear.bcf000444000000000000 26417712230324177 20635 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 1 labeltitlespec shorttitle title labeltitleyear 1 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey labelalpha sortname author editor translator sorttitle title sortyear year volume 0000 sorttitle title article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender extratitleyear.bib L1 L2 L3 L4 L5 shorthand biblatex-biber-1.8/t/tdata/encoding1.bib000444000000000000 43712230324177 17343 0ustar00rootroot000000000000% -*- coding: latin-9-unix -*- % This is a latin9 encoded file (Notice the "LATIN CAPITAL LETTER S WITH CARON"). % The top line is a hint to Emacs to open in the right encoding @BOOK{test, YEAR = {1999}, AUTHOR = {Edward Encalcer}, TITLE = {ome title}, PUBLISHER = {A press} } biblatex-biber-1.8/t/tdata/encoding6.bib000444000000000000 21612230324177 17343 0ustar00rootroot000000000000% This is a UTF-8 encoded file @BOOK{test, AUTHOR = {Edward Encalcer}, YEAR = {1999}, TITLE = {↑à titlé}, PUBLISHER = {A press} } biblatex-biber-1.8/t/tdata/extratitle.bcf000444000000000000 26466512230324177 17756 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 1 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 1 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey labelalpha sortname author editor translator sorttitle title sortyear year volume 0000 sorttitle title article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender extratitle.bib L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12 shorthand biblatex-biber-1.8/t/tdata/sort-case.bcf000444000000000000 26276712230324176 17471 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 0 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sortyear year sorttitle title volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender sort-case.bib CS1 CS2 CS3 shorthand biblatex-biber-1.8/t/tdata/dm-dateformats.bib000444000000000000 662012230324175 20421 0ustar00rootroot000000000000% WRONG - ORIGDATE is mistyped, URLDATE is just wrong % YEAR is messy and should be done by DATE but isn't wrong as such % MONTH is out of range @ARTICLE{L1, AUTHOR = {John Doe}, JOURNALTITLE = {Journal}, TITLE = {Title 1}, YEAR = {1995--1996}, MONTH = {14}, ORIGDATE = {1985-1030}, URLDATE = {1.5.1998}, } % WRONG - missing dash between month and day @BOOK{L2, AUTHOR = {John Doe}, TITLE = {Title 2}, PUBLISHER = {Oxford}, ORIGDATE = {1995-1230}, YEAR = {1991} } % WRONG - completely wrong date range format @BOOK{L3, AUTHOR = {John Doe}, TITLE = {Title 3}, PUBLISHER = {Oxford}, URL = {http://a/b/c}, URLDATE = {1.5.1988}, YEAR = {1854} } % WRONG - 1 digit month @BOOK{L4, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 1}, PUBLISHER = {Oxford}, DATE = {1995-1-04}, } % WRONG - 1 digit day @BOOK{L5, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, DATE = {1995-10-4}, } % WRONG - month out of bounds @BOOK{L6, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 1}, PUBLISHER = {Oxford}, DATE = {1996-13-03}, } % WRONG - day out of bounds @PROCEEDINGS{L7, EDITOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, EVENTDATE = {1996-10-35}, YEAR = {1934} } % WRONG - MONTH not integer @ARTICLE{L8, AUTHOR = {Bill Shakespeare}, JOURNALTITLE = {Journal}, TITLE = {Works}, YEAR = {1985a}, MONTH = {january} } % OK @PROCEEDINGS{L9, EDITOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, EVENTDATE = {1996-12-31}, YEAR = {1234} } % OK @PROCEEDINGS{L10, EDITOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, EVENTDATE = {1996-01-01}, YEAR = {1239} } % WRONG - DATE and YEAR specified @BOOK{L11, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, DATE = {1996-01-01}, YEAR = {1998}, } % WRONG - DATE and MONTH specified @ARTICLE{L12, AUTHOR = {John Doe and Albert Abrahams}, JOURNALTITLE = {Journal}, TITLE = {Title 2}, DATE = {1996-01-01}, MONTH = {02}, } % OK - open-ended date @BOOK{L13, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, DATE = {1996-01-01/}, } % OK - ENDYEAR same as YEAR, labelyear should only have YEAR @BOOK{L14, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, DATE = {1996-12-10/1996-12-12}, } % OK - labelyear should be undef, no DATE or YEAR @BOOK{L15, AUTHOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, } % MISSING YEAR/DATE @PROCEEDINGS{L16, EDITOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, EVENTDATE = {1996-01-01}, } % OK - YEAR same as ENDYEAR, labelyear should only have YEAR @PROCEEDINGS{L17, PUBSTATE = {inpress}, EDITOR = {John Doe and Albert Abrahams}, TITLE = {Title 2}, PUBLISHER = {Oxford}, DATE = {1996-12-10/1996-12-12}, ORIGDATE = {1998-12-10/1998-12-12}, EVENTDATE = {1998-12-10/2004-12-12}, } biblatex-biber-1.8/t/tdata/remote-files.bcf000444000000000000 26407612230324176 20157 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 88 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers + labelalpha 0 labelnamespec author labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 labelnamespec author editor useprefix 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender http://www.citeulike.org/bibtex/group/8082 http://people.cs.uu.nl/hansb/graphs-bib/definitions.bib http://people.cs.uu.nl/hansb/graphs-bib/papers.bib https://api.zotero.org/groups/9097/items/II22KQ7D?format=bibtex&limit=1 citeulike:8283461 AbdelbarH98 merleau-ponty_philosophe_2010 shorthand biblatex-biber-1.8/t/tdata/uniqueness1.bib000444000000000000 631712230324176 17776 0ustar00rootroot000000000000@ARTICLE{un1, AUTHOR = {John AAA}, YEAR = {1994}, } % Always good to have a repeated labelname entry as this is often an edge case @ARTICLE{un1a, AUTHOR = {John AAA}, YEAR = {1999}, } @ARTICLE{un2, AUTHOR = {J. AAA}, YEAR = {1999}, } @ARTICLE{un3, AUTHOR = {K. AAA}, YEAR = {1939}, } @ARTICLE{un4, AUTHOR = {Edward AAA}, YEAR = {1934}, } @ARTICLE{un4a, OPTIONS = {uniquename=false}, AUTHOR = {Edward AAA}, YEAR = {1934}, } @ARTICLE{un5, AUTHOR = {Jane AAA}, YEAR = {1983}, } % uniquelist not set because it's not ambiguous with un1 with max/minnames=1 because % un1 is "AAA" and un6 is "AAA et al". @ARTICLE{un6, AUTHOR = {John AAA and Mike BBB}, YEAR = {1921}, } @ARTICLE{un7, SHORTAUTHOR = {Chaps}, AUTHOR = {John AAA and Mike BBB}, YEAR = {1921}, } % test2 should have un=0 because minnames makes Brian Jones invisible @BOOK{test1, AUTHOR = {Paul Smith and Brian Jones and Peter Brown}, YEAR = {1900} } @BOOK{test2, AUTHOR = {Henry Jones}, YEAR = {1903} } @MISC{test3, AUTHOR = {John Blether and John Doe}, DATE = {2011} } @MISC{test4, AUTHOR = {John Blether and Jane Doe}, DATE = {2011} } @MISC{test5, AUTHOR = {John Blether and Edward Doe}, DATE = {2011} } % Testing repeated entries for un=1 @MISC{unt1, AUTHOR = {Jeremy Alton and Alan Rattle}, TITLE = {Title}, DATE = {2011} } @MISC{unt2, AUTHOR = {Jeremy Alton and Andrew Rattle}, TITLE = {Title}, DATE = {2011} } @MISC{unt3, AUTHOR = {Jeremy Alton and Edward Rattle}, TITLE = {Title}, DATE = {2011} } @MISC{unt4, AUTHOR = {Meredith Williams}, TITLE = {Title}, DATE = {2011} } @MISC{unt5, AUTHOR = {Michael Williams}, TITLE = {Title}, DATE = {2011} } % Testing repeated entries for un=2 @MISC{untf1, AUTHOR = {Simon Monocle and Walter Ripple}, TITLE = {Title}, DATE = {2011} } @MISC{untf2, AUTHOR = {Simon Monocle and Walter Ripple}, TITLE = {Title}, DATE = {2011} } @MISC{untf3, AUTHOR = {Simon Monocle and William Ripple}, TITLE = {Title}, DATE = {2011} } % Testing prefices/suffices @MISC{sp1, AUTHOR = {Greaves, Jr., Percy L.}, TITLE = {Title}, DATE = {2011} } @MISC{sp2, AUTHOR = {Greaves, Jr., Percy L.}, TITLE = {Title2}, DATE = {2012} } @MISC{sp3, AUTHOR = {von Greaves, Jr., Percy L.}, TITLE = {Title1}, DATE = {2012} } @MISC{sp4, AUTHOR = {von Greaves, Jr., Percy L.}, TITLE = {Title2}, DATE = {2012} } % This counts as the same as sp1 and sp2 because of the useprefix=false @MISC{sp5, OPTIONS = {useprefix=false}, AUTHOR = {von Greaves, Jr., Percy L.}, TITLE = {Title2}, DATE = {2012} } @MISC{sp6, AUTHOR = {von Mises, Jr., Percy L.}, TITLE = {Title1}, DATE = {2010} } @MISC{sp7, AUTHOR = {von Mises, Jr., Paul L.}, TITLE = {Title1}, DATE = {2010} } @MISC{sp8, AUTHOR = {Ralley, Percy L.}, TITLE = {Title1}, DATE = {2010} } @MISC{sp9, AUTHOR = {Ralley, Jr., Percy L.}, TITLE = {Title1}, DATE = {2010} } biblatex-biber-1.8/t/tdata/full.bcf000444000000000000 26277512230324177 16533 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 0 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 1 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort shorthand sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender full.bib F1 C1 shorthand biblatex-biber-1.8/t/tdata/bibtex-output.bcf000444000000000000 26353712230324177 20401 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 0 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 1 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids entryset date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender examples.bib murray kant:ku tool.bib b1 xd1 shorthand biblatex-biber-1.8/t/tdata/crossrefs.bib000444000000000000 1305712230324176 17546 0ustar00rootroot000000000000% Testing mincrossrefs. cr1 and cr2 crossrefs should trigger inclusion of cr_m and also % the crossref fields in both of them % Also a test of some aliases @INBOOK{cr1, AUTHOR = {Graham Gullam}, TITLE = {Great and Good Graphs}, ORIGDATE = {1955}, ARCHIVEPREFIX = {SomEPrFiX}, PRIMARYCLASS = {SOMECLASS}, CROSSREF = {cr_m} } @INBOOK{cr2, AUTHOR = {Frederick Fumble}, TITLE = {Fabulous Fourier Forms}, SCHOOL = {School}, INSTITUTION = {Institution}, ORIGDATE = {1943}, CROSSREF = {cr_m} } @BOOK{cr_m, EDITOR = {Edgar Erbriss}, TITLE = {Graphs of the Continent}, PUBLISHER = {Grimble}, YEAR = {1974} } % Testing explicit cite of crossref parent. Should trigger inclusion of child crossref field @INBOOK{cr3, AUTHOR = {Arthur Aptitude}, TITLE = {Arrangements of All Articles}, ORIGDATE = {1934}, ARCHIVEPREFIX = {SomEPrFiX}, EPRINTTYPE = {sometype}, CROSSREF = {crt} } @BOOK{crt, EDITOR = {Mark Monkley}, TITLE = {Beasts of the Burbling Burns}, PUBLISHER = {Rancour}, YEAR = {1996} } % Testing mincrossrefs not reached. cr4 is cited, cr5 isn't, therefore mincrossrefs (2) for % crn not reached @INBOOK{cr4, AUTHOR = {Morris Mumble}, TITLE = {Enterprising Entities}, ORIGDATE = {1911}, CROSSREF = {crn} } @INBOOK{cr5, AUTHOR = {Oliver Ordinary}, TITLE = {Questionable Quidities}, ORIGDATE = {1919}, CROSSREF = {crn} } @BOOK{crn, EDITOR = {Jeremy Jermain}, TITLE = {Vanquished, Victor, Vandal}, PUBLISHER = {Pillsbury}, YEAR = {1945} } % Testing inheritance of event information @PROCEEDINGS{cr6i, AUTHOR = {Spurious Author}, ADDRESS = {Address}, TITLE = {Title of proceeding}, EDITOR = {Editor}, PUBLISHER = {Publisher of proceeding}, EVENTDATE = {2009-08-21/2009-08-24}, EVENTTITLE = {Title of the event}, VENUE = {Location of event}, YEAR = {2009} } @INPROCEEDINGS{cr6, AUTHOR = {Author, Firstname}, CROSSREF = {cr6i}, PAGES = {123--}, TITLE = {Title of inproceeding}, BOOKTITLE = {Manual booktitle}, YEAR = {2009}, } % Testing inheritance of special fields (booktitle, bookauthor etc.) @BOOK{cr7i, AUTHOR = {Brian Bookauthor}, TITLE = {Book Title}, SUBTITLE = {Book Subtitle}, TITLEADDON = {Book Titleaddon}, PUBLISHER = {Publisher of proceeding}, YEAR = {2009}, VERBA = {String}, } @INBOOK{cr7, AUTHOR = {Author, Firstname}, CROSSREF = {cr7i}, PAGES = {123--126}, TITLE = {Title of Book bit}, YEAR = {2010} } % Testing supression of default inheritance @COLLECTION{cr8i, EDITOR = {Brian Editor}, TITLE = {Book Title}, SUBTITLE = {Book Subtitle}, TITLEADDON = {Book Titleaddon}, PUBLISHER = {Publisher of Collection}, YEAR = {2009} } @INCOLLECTION{cr8, AUTHOR = {Smith, Firstname}, CROSSREF = {cr8i}, PAGES = {1--12}, TITLE = {Title of Collection bit}, YEAR = {2010} } % Testing mincrossrefs. xr1 and xr2 xrefs should trigger inclusion of xrm and also % the xreffields in both of them @INBOOK{xr1, AUTHOR = {Zoe Zentrum}, TITLE = {Moods Mildly Modified}, ORIGDATE = {1921}, XREF = {xrm} } @INBOOK{xr2, AUTHOR = {Ian Instant}, TITLE = {Migraines Multiplying Madly}, ORIGDATE = {1926}, XREF = {xrm} } @BOOK{xrm, EDITOR = {Peter Prendergast}, TITLE = {Calligraphy, Calisthenics, Culture}, PUBLISHER = {Mainstream}, YEAR = {1970} } % Testing explicit cite of xref parent. Should trigger inclusion of child xref field @INBOOK{xr3, AUTHOR = {Norman Normal}, TITLE = {Russian Regalia Revisited}, ORIGDATE = {1923}, XREF = {xrt} } @BOOK{xrt, EDITOR = {Lucy Lunders}, TITLE = {Kings, Cork and Calculation}, PUBLISHER = {Middling}, YEAR = {1977} } % Testing mincrossrefs not reached. cr4 is cited, cr5 isn't, therefore mincrossrefs (2) for % crn not reached @INBOOK{xr4, AUTHOR = {Megan Mistrel}, TITLE = {Lumbering Lunatics}, ORIGDATE = {1933}, XREF = {xrn} } @INBOOK{xr5, AUTHOR = {Kenneth Kunrath}, TITLE = {Dreadful Dreary Days}, ORIGDATE = {1900}, XREF = {xrn} } @BOOK{xrn, EDITOR = {Victor Vivacious}, TITLE = {Examples of Excellent Exaggerations}, PUBLISHER = {Oxford}, YEAR = {1935} } % Testing missing xref @INBOOK{mxr, AUTHOR = {Megan Mistrel}, TITLE = {Lumbering Lunatics}, ORIGDATE = {1933}, XREF = {missing1} } % Testing missing crossref @INBOOK{mcr, AUTHOR = {Megan Mistrel}, TITLE = {Lumbering Lunatics}, ORIGDATE = {1933}, CROSSREF = {missing1} } % Testing cascading crossrefs @MVBOOK{ccr1, IDS = {ccr1alias}, AUTHOR = {Vince Various}, EDITOR = {Edward Editor}, TITLE = {Stuff Concerning Varia}, DATE = {1934} } % using alias @BOOK{ccr2, TITLE = {Misc etc.}, DATE = {1923}, CROSSREF = {ccr1alias} } @INBOOK{ccr3, TITLE = {Perhaps, Perchance, Possibilities?}, DATE = {1911}, CROSSREF = {ccr2} } % Testing circular refs detection @BOOK{circ1, DATE = {1911}, CROSSREF = {circ3} } @BOOK{circ2, DATE = {1911}, CROSSREF = {circ1} } @BOOK{circ3, DATE = {1911}, CROSSREF = {circ2} } % Test of dependency calculations for non-cited entries @BOOK{r1, DATE = {1911}, CROSSREF = {r2} } @BOOK{r2, DATE = {1911}, CROSSREF = {r3} } @BOOK{r3, DATE = {1911}, CROSSREF = {r4} } @BOOK{r4, DATE = {1911}, } biblatex-biber-1.8/t/tdata/sections-complex.bcf000444000000000000 26520312230324177 21052 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 0 uniquename 0 useauthor 1 useeditor 0 useprefix 0 usetranslator 0 labelnamespec shorteditor editor translator useeditor 0 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey labelalpha sortname author editor translator sorttitle title sortyear year volume 0000 sorttitle title article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender labelalpha.bib L1 L2 L3 L4 labelalpha.bib L5 L6 L7 L8 shorthand shorthand biblatex-biber-1.8/t/tdata/bibtex-forms.bcf000444000000000000 26376212230324176 20166 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 0 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 1 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 labelnamespec translator labeltitlespec title Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender bibtex-forms.bib forms1 forms2 forms3 forms4 forms5 forms6 shorthand biblatex-biber-1.8/t/tdata/names.bib000444000000000000 464412230324177 16623 0ustar00rootroot000000000000@BOOK{L1, AUTHOR = {Alfred Adler}, } @BOOK{L2, AUTHOR = {Bertie B. Bull}, } @BOOK{L3, AUTHOR = {C. Z. Crop}, } @BOOK{L4, AUTHOR = {Derek D Decket}, } @BOOK{L5, AUTHOR = {Egbert von Eel}, } @BOOK{L6, AUTHOR = {Francis van der valt Frome}, } @BOOK{L7, AUTHOR = {Gregory R. van Gloom}, } @BOOK{L8, AUTHOR = {Henry F. van Henkel}, } @BOOK{L9, AUTHOR = {Ian {Iliad Ipswich}}, } @BOOK{L10, AUTHOR = {Jolly, III, James}, } @BOOK{L10a, AUTHOR = {Pimentel, Jr. ,Joseph J.}, } @BOOK{L11, AUTHOR = {van Kluster, Jr., Kevin}, } @BOOK{L12, AUTHOR = {Charles Louis Xavier Joseph de la Vall{\'e}e Poussin} } @BOOK{L13, AUTHOR = {Van de Graaff, R. J.} } @BOOK{L14, AUTHOR = {St John-Mollusc, Oliver} } @BOOK{L15, AUTHOR = {Roger P.{\,}G. van Gompel} } @BOOK{L16, AUTHOR = {Roger {P.\,G.} van Gompel} } @BOOK{L17, AUTHOR = {Lovecraft, Bill H.{\,}P.}, } @BOOK{L18, AUTHOR = {Lovecraft, Bill {H.\,P.}}, } @BOOK{L19, AUTHOR = {Mustermann, Klaus-Peter}, } @BOOK{L19a, AUTHOR = {Lam, Ho-Pun}, } @BOOK{L20, AUTHOR = {{John Henry} Ford}, } @BOOK{L21, AUTHOR = {{\v S}omeone Smith}, } @BOOK{L22, AUTHOR = {Someone {\v S}mith}, } @BOOK{L23, AUTHOR = {Šomeone Smith}, } @BOOK{L24, AUTHOR = {Someone Šmith}, } @BOOK{L25, AUTHOR = {{American Psychological Association, Task Force on the Sexualization of Girls}}, } @BOOK{L26, AUTHOR = {{Sci-Art Publishers}} } % Should skip the first name as it has too many commas @BOOK{L27, AUTHOR = {Smith, Jr., Bill, Lee und James Smith} } % This causes Text::BibTeX <=0.4 to segfault @BOOK{L28, AUTHOR = {Deux et al.,, O.} } % Should be ok as escaped. Text::BibTeX < 0.41 has a bug however and replaces % the third comma with a space. @BOOK{L29, AUTHOR = {{U.S. Department of Health and Human Services, National Institute of Mental Health, National Heart, Lung and Blood Institute}} } % The protected {M} causes problems for the btparse library so we strip this in biber @BOOK{L30, AUTHOR = {E. S. El-{M}allah} } % Make sure when we replace ties, we don't accidentally strip this ... @BOOK{L31, AUTHOR = {{\~ Z}elly, Arthur}, EDITOR = {{\~Z}elly, Arthur}, TRANSLATOR = {{\~{Z}}elly, Arthur} } % Checking visibility of "and others" (with custom "and" and "others") @BOOK{V1, AUTHOR = {Alan Author und Steven Secondauthor und andere}, } @BOOK{V2, AUTHOR = {Alan Author und andere}, } biblatex-biber-1.8/t/tdata/encoding5.bcf000444000000000000 26255312230324176 17435 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 1 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender encoding5.bib * shorthand biblatex-biber-1.8/t/tdata/encoding2.bcf000444000000000000 26255312230324177 17433 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 3 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 1 sortalphaothers + sortscheme nty uniquelist 0 uniquename 1 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender encoding2.bib * shorthand biblatex-biber-1.8/t/tdata/uniqueness5.bcf000444000000000000 26255512230324176 20050 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 1 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 1 uniquename 2 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender uniqueness5.bib * shorthand biblatex-biber-1.8/t/tdata/examples.bib000444000000000000 16320312230324176 17372 0ustar00rootroot000000000000@STRING{anch-ie = {Angew.~Chem. Int.~Ed.} } @STRING{cup = {Cambridge University Press} } @STRING{dtv = {Deutscher Taschenbuch-Verlag} } @STRING{hup = {Harvard University Press} } @STRING{jams = {J.~Amer. Math. Soc.} } @STRING{jchph = {J.~Chem. Phys.} } @STRING{jomch = {J.~Organomet. Chem.} } @STRING{pup = {Princeton University Press} } @InCollection{westfahl:space, crossref = {westfahl:frontier}, hyphenation = {american}, author = {Westfahl, Gary}, indextitle = {True Frontier, The}, title = {The True Frontier}, subtitle = {Confronting and Avoiding the Realities of Space in American Science Fiction Films}, pages = {55--65}, annotation = {A cross-referenced article from a \texttt{collection}. This is an \texttt{incollection} entry with a \texttt{crossref} field. Note the \texttt{subtitle} and \texttt{indextitle} fields} } @Set{set, crossref = {set:herrmann}, entryset = {set:herrmann,set:aksin,set:yoon}, annotation = {A \texttt{set} entry with three members. Note the \texttt{entryset} and \texttt{crossref} fields. The cross-reference must point to the first member of the set} } @Set{stdmodel, crossref = {stdmodel:glashow}, entryset = {stdmodel:glashow,stdmodel:weinberg,stdmodel:salam}, annotation = {A \texttt{set} entry with three members discussing the standard model of particle physics.} } @Set{stdmodel:ps_sc, presort = {zs}, crossref = {stdmodel:glashow}, entryset = {stdmodel:glashow,stdmodel:weinberg,stdmodel:salam}, annotation = {A \texttt{set} entry with three members discussing the standard model of particle physics. Note the \texttt{entryset} and \texttt{crossref} fields. The cross-reference must point to the first member of the set} } @Article{angenendt, hyphenation = {german}, author = {Angenendt, Arnold}, indextitle = {In Honore Salvatoris}, title = {In Honore Salvatoris~-- Vom Sinn und Unsinn der Patrozinienkunde}, shorttitle = {In Honore Salvatoris}, journaltitle = {Revue d'Histoire Eccl{\'e}siastique}, volume = {97}, year = {2002}, pages = {431--456, 791--823}, annotation = {A German article in a French journal. Apart from that, a typical \texttt{article} entry. Note the \texttt{indextitle} field} } @Article{angenendtsk, sortkey = {AATESTKEY}, hyphenation = {german}, author = {Angenendt, Arnold}, indextitle = {In Honore Salvatoris}, title = {In Honore Salvatoris~-- Vom Sinn und Unsinn der Patrozinienkunde}, shorttitle = {In Honore Salvatoris}, journaltitle = {Revue d'Histoire Eccl{\'e}siastique}, volume = {97}, year = {2002}, pages = {431--456, 791--823}, annotation = {A German article in a French journal. Apart from that, a typical \texttt{article} entry. Note the \texttt{indextitle} field} } @Article{angenendtsa, hyphenation = {german}, shortauthor = {AA}, author = {Angenendt, Arnold}, indextitle = {In Honore Salvatoris}, title = {In Honore Salvatoris~-- Vom Sinn und Unsinn der Patrozinienkunde}, shorttitle = {In Honore Salvatoris}, journaltitle = {Revue d'Histoire Eccl{\'e}siastique}, volume = {97}, year = {2002}, pages = {431--456, 791--823}, annotation = {A German article in a French journal. Apart from that, a typical \texttt{article} entry. Note the \texttt{indextitle} field} } @Article{baez/article, hyphenation = {american}, author = {Baez, John C. and Lauda, Aaron D.}, title = {Higher-Dimensional Algebra V: 2-Groups}, journaltitle = {Theory and Applications of Categories}, volume = {12}, version = {3}, date = {2004}, pages = {423--491}, eprint = {math/0307200v3}, eprinttype = {arxiv}, annotation = {An \texttt{article} with \texttt{eprint} and \texttt{eprinttype} fields. Note that the arXiv reference is transformed into a clickable link if \texttt{hyperref} support has been enabled. Compare \texttt{baez\slash online} which is the same item given as an \texttt{online} entry} } @Article{bertram, hyphenation = {american}, author = {Bertram, Aaron and Wentworth, Richard}, title = {Gromov invariants for holomorphic maps on Riemann surfaces}, shorttitle = {Gromov invariants}, journaltitle = jams, volume = {9}, number = {2}, year = {1996}, pages = {529--571}, annotation = {An \texttt{article} entry with a \texttt{volume} and a \texttt{number} field} } @Article{gillies, hyphenation = {british}, author = {Gillies, Alexander}, title = {Herder and the Preparation of Goethe's Idea of World Literature}, journaltitle = {Publications of the English Goethe Society}, volume = {9}, series = {newseries}, year = {1933}, pages = {46--67}, annotation = {An \texttt{article} entry with a \texttt{series} and a \texttt{volume} field. Note that format of the \texttt{series} field in the database file} } @Article{kastenholz, hyphenation = {american}, author = {Kastenholz, M. A. and H{\"u}nenberger, Philippe H.}, indextitle = {Computation of ionic solvation free energies}, title = {Computation of methodology\hyphen independent ionic solvation free energies from molecular simulations}, subtitle = {I. The electrostatic potential in molecular liquids}, journaltitle = jchph, volume = {124}, eid = {124106}, year = {2006}, doi = {10.1063/1.2172593}, annotation = {An \texttt{article} entry with an \texttt{eid} and a \texttt{doi} field. Note that the \textsc{doi} is transformed into a clickable link if \texttt{hyperref} support has been enabled}, abstract = {The computation of ionic solvation free energies from atomistic simulations is a surprisingly difficult problem that has found no satisfactory solution for more than 15 years. The reason is that the charging free energies evaluated from such simulations are affected by very large errors. One of these is related to the choice of a specific convention for summing up the contributions of solvent charges to the electrostatic potential in the ionic cavity, namely, on the basis of point charges within entire solvent molecules (M scheme) or on the basis of individual point charges (P scheme). The use of an inappropriate convention may lead to a charge-independent offset in the calculated potential, which depends on the details of the summation scheme, on the quadrupole-moment trace of the solvent molecule, and on the approximate form used to represent electrostatic interactions in the system. However, whether the M or P scheme (if any) represents the appropriate convention is still a matter of on-going debate. The goal of the present article is to settle this long-standing controversy by carefully analyzing (both analytically and numerically) the properties of the electrostatic potential in molecular liquids (and inside cavities within them).} } @Article{murray, hyphenation = {american}, author = {Hostetler, Michael J. and Wingate, Julia E. and Zhong, Chuan-Jian and Harris, Jay E. and Vachet, Richard W. and Clark, Michael R. and Londono, J. David and Green, Stephen J. and Stokes, Jennifer J. and Wignall, George D. and Glish, Gary L. and Porter, Marc D. and Evans, Neal D. and Murray, Royce W.}, indextitle = {Alkanethiolate gold cluster molecules}, title = {Alkanethiolate gold cluster molecules with core diameters from 1.5 to 5.2~nm}, subtitle = {Core and monolayer properties as a function of core size}, shorttitle = {Alkanethiolate gold cluster molecules}, journaltitle = {Langmuir}, volume = {14}, number = {1}, year = {1998}, pages = {17--30}, annotation = {An \texttt{article} entry with \arabic{author} authors. By default, long author and editor lists are automatically truncated. This is configurable} } @Article{reese, hyphenation = {american}, author = {Reese, Trevor R.}, title = {Georgia in Anglo-Spanish Diplomacy, 1736-1739}, journaltitle = {William and Mary Quarterly}, volume = {15}, series = {3}, year = {1958}, pages = {168--190}, annotation = {An \texttt{article} entry with a \texttt{series} and a \texttt{volume} field. Note the format of the series. If the value of the \texttt{series} field is an integer, this number is printed as an ordinal and the string \enquote*{series} is appended automatically} } @Article{set:aksin, entryset = {set}, author = {Aks{\i}n, {\"O}zge and T{\"u}rkmen, Hayati and Artok, Levent and {\k{C}}etinkaya, Bekir and Ni, Chaoying and B{\"u}y{\"u}kg{\"u}ng{\"o}r, Orhan and {\"O}zkal, Erhan}, indextitle = {Effect of immobilization on catalytic characteristics}, title = {Effect of immobilization on catalytic characteristics of saturated Pd-N-heterocyclic carbenes in Mizoroki-Heck reactions}, journaltitle = jomch, volume = {691}, number = {13}, year = {2006}, month = {02}, pages = {3027--3036} } @Article{set:herrmann, entryset = {set}, author = {Herrmann, Wolfgang A. and {\"O}fele, Karl and Schneider, Sabine K. and Herdtweck, Eberhardt and Hoffmann, Stephan D.}, indextitle = {Carbocyclic carbene as an efficient catalyst, A}, title = {A carbocyclic carbene as an efficient catalyst ligand for C--C coupling reactions}, journaltitle = anch-ie, volume = {45}, number = {23}, year = {2006}, pages = {3859--3862} } @Article{set:yoon, entryset = {set}, author = {Yoon, Myeong S. and Ryu, Dowook and Kim, Jeongryul and Ahn, Kyo Han}, indextitle = {Palladium pincer complexes}, title = {Palladium pincer complexes with reduced bond angle strain: efficient catalysts for the Heck reaction}, journaltitle = {Organometallics}, volume = {25}, number = {10}, year = {2006}, pages = {2409--2411} } @Article{shore, author = {Shore, Bradd}, title = {Twice-Born, Once Conceived}, subtitle = {Meaning Construction and Cultural Cognition}, journaltitle = {American Anthropologist}, volume = {93}, series = {newseries}, number = {1}, month = mar, year = {1991}, pages = {9--27}, annotation = {An \texttt{article} entry with \texttt{series}, \texttt{volume}, and \texttt{number} fields. Note the format of the \texttt{series} which is a localization key} } @Article{sigfridsson, hyphenation = {american}, author = {Sigfridsson, Emma and Ryde, Ulf}, indextitle = {Methods for deriving atomic charges}, title = {Comparison of methods for deriving atomic charges from the electrostatic potential and moments}, journaltitle = {Journal of Computational Chemistry}, volume = {19}, number = {4}, year = {1998}, doi = {10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P}, pages = {377--395}, annotation = {An \texttt{article} entry with \texttt{volume}, \texttt{number}, and \texttt{doi} fields. Note that the \textsc{doi} is transformed into a clickable link if \texttt{hyperref} support has been enabled}, abstract = { Four methods for deriving partial atomic charges from the quantum chemical electrostatic potential (CHELP, CHELPG, Merz-Kollman, and RESP) have been compared and critically evaluated. It is shown that charges strongly depend on how and where the potential points are selected. Two alternative methods are suggested to avoid the arbitrariness in the point-selection schemes and van der Waals exclusion radii: CHELP-BOW, which also estimates the charges from the electrostatic potential, but with potential points that are Boltzmann-weighted after their occurrence in actual simulations using the energy function of the program in which the charges will be used, and CHELMO, which estimates the charges directly from the electrostatic multipole moments. Different criteria for the quality of the charges are discussed.} } @Article{spiegelberg, hyphenation = {german}, sorttitle = {Intention und Intentionalitat in der Scholastik, bei Brentano und Husserl}, indexsorttitle = {Intention und Intentionalitat in der Scholastik, bei Brentano und Husserl}, author = {Spiegelberg, Herbert}, title = {\mkbibquote{Intention} und \mkbibquote{Intentionalit{\"a}t} in der Scholastik, bei Brentano und Husserl}, shorttitle = {Intention und Intentionalit{\"a}t}, journaltitle = {Studia Philosophica}, volume = {29}, year = {1969}, pages = {189--216}, annotation = {An \texttt{article} entry. Note the \texttt{sorttitle} and \texttt{indexsorttitle} fields and the markup of the quotes in the database file} } @Article{springer, hyphenation = {british}, author = {Springer, Otto}, title = {Mediaeval Pilgrim Routes from Scandinavia to Rome}, shorttitle = {Mediaeval Pilgrim Routes}, journaltitle = {Mediaeval Studies}, volume = {12}, year = {1950}, pages = {92--122}, annotation = {A plain \texttt{article} entry} } @Article{stdmodel:glashow, entryset = {stdmodel}, author = {Glashow, Sheldon}, title = {Partial Symmetries of Weak Interactions}, journaltitle = {Nucl.~Phys.}, volume = {22}, year = {1961}, pages = {579\psqq} } @Article{stdmodel:weinberg, entryset = {stdmodel}, author = {Weinberg, Steven}, title = {A Model of Leptons}, journaltitle = {Phys.~Rev.~Lett.}, volume = {19}, year = {1967}, pages = {1264\psqq} } @Book{aristotle:anima, keywords = {primary}, hyphenation = {british}, author = {Aristotle}, editor = {Hicks, Robert Drew}, title = {De Anima}, publisher = cup, location = {Cambridge}, year = {1907}, annotation = {A \texttt{book} entry with an \texttt{author} and an \texttt{editor}} } @Book{aristotle:physics, keywords = {primary}, hyphenation = {american}, author = {Aristotle}, translator = {Wicksteed, P. H. and Cornford, F. M.}, title = {Physics}, shorttitle = {Physics}, publisher = {G. P. Putnam}, location = {New York}, year = {1929}, annotation = {A \texttt{book} entry with a \texttt{translator} field} } @Book{aristotle:poetics, keywords = {primary}, hyphenation = {british}, author = {Aristotle}, editor = {Lucas, D. W.}, title = {Poetics}, shorttitle = {Poetics}, series = {Clarendon Aristotle}, publisher = {Clarendon Press}, location = {Oxford}, year = {1968}, annotation = {A \texttt{book} entry with an \texttt{author} and an \texttt{editor} as well as a \texttt{series} field} } @Book{aristotle:rhetoric, keywords = {primary}, hyphenation = {british}, sorttitle = {Rhetoric of Aristotle}, author = {Aristotle}, editor = {Cope, Edward Meredith}, commentator = {Cope, Edward Meredith}, indextitle = {Rhetoric of Aristotle, The}, title = {The Rhetoric of Aristotle with a commentary by the late Edward Meredith Cope}, shorttitle = {Rhetoric}, volumes = {3}, publisher = cup, year = {1877}, annotation = {A commented edition. Note the concatenation of the \texttt{editor} and \texttt{commentator} fields as well as the \texttt{volumes}, \texttt{sorttitle}, and \texttt{indextitle} fields} } @Book{augustine, hyphenation = {american}, author = {Augustine, Robert L.}, title = {Heterogeneous catalysis for the synthetic chemist}, shorttitle = {Heterogeneous catalysis}, publisher = {Marcel Dekker}, location = {New York}, year = {1995}, annotation = {A plain \texttt{book} entry} } @Book{averroes/bland, keywords = {primary}, hyphenation = {american}, author = {Averroes}, editor = {Bland, Kalman P.}, translator = {Bland, Kalman P.}, indextitle = {Epistle on the Possibility of Conjunction, The}, title = {The Epistle on the Possibility of Conjunction with the Active Intellect by Ibn Rushd with the Commentary of Moses Narboni}, shorttitle = {Possibility of Conjunction}, series = {Moreshet: Studies in Jewish History, Literature and Thought}, number = {7}, publisher = {Jewish Theological Seminary of America}, location = {New York}, year = {1982}, annotation = {A \texttt{book} entry with a \texttt{series} and a \texttt{number}. Note the concatenation of the \texttt{editor} and \texttt{translator} fields as well as the \texttt{indextitle} field} } @Book{averroes/hannes, keywords = {primary}, hyphenation = {german}, sorttitle = {Uber die Moglichkeit der Conjunktion}, indexsorttitle = {Uber die Moglichkeit der Conjunktion}, author = {Averroes}, editor = {Hannes, Ludwig}, translator = {Hannes, Ludwig}, annotator = {Hannes, Ludwig}, indextitle = {{\"U}ber die M{\"o}glichkeit der Conjunktion}, title = {Des Averro{\"e}s Abhandlung: \mkbibquote{{\"U}ber die M{\"o}glichkeit der Conjunktion} oder \mkbibquote{{\"U}ber den materiellen Intellekt}}, shorttitle = {M{\"o}glichkeit der Conjunktion}, publisher = {C.~A. Kaemmerer}, location = {Halle an der Saale}, year = {1892}, annotation = {An annotated edition. Note the concatenation of the \texttt{editor}, \texttt{translator}, and \texttt{annotator} fields. Also note the \texttt{shorttitle}, \texttt{indextitle}, \texttt{sorttitle}, and \texttt{indexsorttitle} fields} } @Book{averroes/hercz, keywords = {primary}, hyphenation = {german}, indexsorttitle = {Drei Abhandlungen uber die Conjunction}, author = {Averroes}, editor = {Hercz, J.}, translator = {Hercz, J.}, indextitle = {Drei Abhandlungen {\"u}ber die Conjunction}, title = {Drei Abhandlungen {\"u}ber die Conjunction des separaten Intellects mit dem Menschen}, subtitle = {Von Averroes (Vater und Sohn), aus dem Arabischen {\"u}bersetzt von Samuel Ibn Tibbon}, shorttitle = {Drei Abhandlungen}, publisher = {S.~Hermann}, location = {Berlin}, year = {1869}, annotation = {A \texttt{book} entry. Note the concatenation of the \texttt{editor} and \texttt{translator} fields as well as the \texttt{indextitle} and \texttt{indexsorttitle} fields} } @Book{cicero, hyphenation = {german}, author = {Cicero, Marcus Tullius}, editor = {Blank-Sangmeister, Ursula}, translator = {Blank-Sangmeister, Ursula}, afterword = {Thraede, Klaus}, indextitle = {De natura deorum}, title = {De natura deorum. {\"U}ber das Wesen der G{\"o}tter}, shorttitle = {De natura deorum}, language = {langlatin and langgerman}, publisher = {Reclam}, location = {Stuttgart}, year = {1995}, annotation = {A bilingual edition of Cicero's \emph{De natura deorum}, with a German translation. Note the format of the \texttt{language} field in the database file, the concatenation of the \texttt{editor} and \texttt{translator} fields, and the \texttt{afterword} field} } @Book{coleridge, hyphenation = {british}, author = {Coleridge, Samuel Taylor}, editor = {Coburn, Kathleen and Engell, James and Bate, W. Jackson}, indextitle = {Biographia literaria}, title = {Biographia literaria, or Biographical sketches of my literary life and opinions}, shorttitle = {Biographia literaria}, maintitle = {The collected works of Samuel Taylor Coleridge}, part = {2}, volume = {7}, series = {Bollingen Series}, number = {75}, publisher = {Routledge and Kegan Paul}, location = {London}, year = {1983}, annotation = {One (partial) volume of a multivolume book. This is a \texttt{book} entry with a \texttt{volume} and a \texttt{part} field which explicitly refers to the second (physical) part of the seventh (logical) volume. Also note the \texttt{series} and \texttt{number} fields} } @Book{companion, hyphenation = {american}, sorttitle = {LaTeX Companion}, author = {Goossens, Michel and Mittelbach, Frank and Samarin, Alexander}, indextitle = {LaTeX Companion, The}, title = {The LaTeX Companion}, shorttitle = {LaTeX Companion}, edition = {1}, publisher = {Addison-Wesley}, location = {Reading, Mass.}, year = {1994}, annotation = {A book with three authors. Note the formatting of the author list. By default, only the first name is reversed in the bibliography} } @Book{cotton, hyphenation = {british}, author = {Cotton, Frank Albert and Wilkinson, Geoffrey and Murillio, Carlos A. and Bochmann, Manfred}, title = {Advanced inorganic chemistry}, edition = {6}, publisher = {Wiley}, location = {Chichester}, year = {1999}, annotation = {A \texttt{book} entry with \arabic{author} authors and an \texttt{edition} field. By default, long \texttt{author} and \texttt{editor} lists are automatically truncated. This is configurable} } @Book{gerhardt, hyphenation = {american}, sorttitle = {Federal Appointments Process}, author = {Gerhardt, Michael J.}, indextitle = {Federal Appointments Process, The}, title = {The Federal Appointments Process}, subtitle = {A Constitutional and Historical Analysis}, shorttitle = {Federal Appointments Process}, publisher = {Duke University Press}, location = {Durham and London}, year = {2000}, annotation = {This is a \texttt{book} entry. Note the format of the \texttt{location} field as well as the \texttt{sorttitle} and \texttt{indextitle} fields} } @Book{gonzalez, hyphenation = {american}, sorttitle = {Ghost of John Wayne and Other Stories}, author = {Gonzalez, Ray}, indextitle = {Ghost of John Wayne and Other Stories, The}, title = {The Ghost of John Wayne and Other Stories}, shorttitle = {Ghost of John Wayne}, publisher = {The University of Arizona Press}, location = {Tucson}, year = {2001}, isbn = {0-816-52066-6}, annotation = {A collection of short stories. This is a \texttt{book} entry. Note the \texttt{sorttitle} and \texttt{indextitle} fields in the database file. There's also an \texttt{isbn} field} } @Book{hammond, hyphenation = {british}, sorttitle = {Basics of crystallography and diffraction}, author = {Hammond, Christopher}, indextitle = {Basics of crystallography and diffraction, The}, title = {The basics of crystallography and diffraction}, shorttitle = {Crystallography and diffraction}, publisher = {International Union of Crystallography and Oxford University Press}, location = {Oxford}, year = {1997}, annotation = {A \texttt{book} entry. Note the \texttt{sorttitle} and \texttt{indextitle} fields as well as the format of the \texttt{publisher} field} } @Book{iliad, hyphenation = {german}, sorttitle = {Ilias}, author = {Homer}, translator = {Schadewaldt, Wolfgang}, introduction = {Latacz, Joachim}, indextitle = {Ilias, Die}, title = {Die Ilias}, shorttitle = {Ilias}, edition = {3}, publisher = {Artemis \& Winkler}, location = {D{\"u}sseldorf and Z{\"u}rich}, year = {2004}, annotation = {A German translation of the \emph{Iliad}. Note the \texttt{translator} and \texttt{introduction} fields and the format of the \texttt{location} field in the database file. Also note the \texttt{sorttitle} and \texttt{indextitle} fields} } @Book{knuth:ct, hyphenation = {american}, sortyear = {1984-0}, sorttitle = {Computers & Typesetting}, indexsorttitle = {Computers & Typesetting}, author = {Knuth, Donald E.}, title = {Computers \& Typesetting}, volumes = {5}, publisher = {Addison-Wesley}, location = {Reading, Mass.}, date = {1984/1986}, annotation = {A five-volume book cited as a whole. This is a \texttt{book} entry, note the \texttt{volumes} field} } @Book{knuth:ct:a, hyphenation = {american}, sortyear = {1984-1}, sorttitle = {Computers & Typesetting A}, indexsorttitle = {The TeXbook}, author = {Knuth, Donald E.}, indextitle = {\TeX book, The}, title = {The \TeX book}, shorttitle = {\TeX book}, maintitle = {Computers \& Typesetting}, volume = {A}, publisher = {Addison-Wesley}, location = {Reading, Mass.}, year = {1984}, annotation = {The first volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields. We want this volume to be listed after the entry referring to the entire five-volume set. Also note the \texttt{indextitle} and \texttt{indexsorttitle} fields} } @Book{knuth:ct:b, hyphenation = {american}, sortyear = {1984-2}, sorttitle = {Computers & Typesetting B}, indexsorttitle = {TeX: The Program}, author = {Knuth, Donald E.}, title = {\TeX: The Program}, shorttitle = {\TeX}, maintitle = {Computers \& Typesetting}, volume = {B}, publisher = {Addison-Wesley}, location = {Reading, Mass.}, year = {1986}, annotation = {The second volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields. Also note the \texttt{indexsorttitle} field} } @Book{knuth:ct:c, hyphenation = {american}, sortyear = {1984-3}, sorttitle = {Computers & Typesetting C}, author = {Knuth, Donald E.}, indextitle = {METAFONTbook, The}, title = {The METAFONTbook}, shorttitle = {METAFONTbook}, maintitle = {Computers \& Typesetting}, volume = {C}, publisher = {Addison-Wesley}, location = {Reading, Mass.}, year = {1986}, annotation = {The third volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields as well as the \texttt{indextitle} field} } @Book{knuth:ct:d, hyphenation = {american}, sortyear = {1984-4}, sorttitle = {Computers & Typesetting D}, author = {Knuth, Donald E.}, title = {METAFONT: The Program}, shorttitle = {METAFONT}, maintitle = {Computers \& Typesetting}, volume = {D}, publisher = {Addison-Wesley}, location = {Reading, Mass.}, year = {1986}, annotation = {The fourth volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields} } @Book{knuth:ct:e, hyphenation = {american}, sortyear = {1984-5}, sorttitle = {Computers & Typesetting E}, author = {Knuth, Donald E.}, title = {Computer Modern Typefaces}, maintitle = {Computers \& Typesetting}, volume = {E}, publisher = {Addison-Wesley}, location = {Reading, Mass.}, year = {1986}, annotation = {The fifth volume of a five-volume book. Note the \texttt{sorttitle} and \texttt{sortyear} fields} } @Book{malinowski, hyphenation = {british}, author = {Malinowski, Bronis{\l}aw}, title = {Argonauts of the Western Pacific}, subtitle = {An account of native enterprise and adventure in the Archipelagoes of Melanesian New Guinea}, shorttitle = {Argonauts}, edition = {8}, publisher = {Routledge and Kegan Paul}, location = {London}, year = {1972}, annotation = {This is a \texttt{book} entry. Note the format of the \texttt{publisher} and \texttt{edition} fields as well as the \texttt{subtitle} field} } @Book{maron, hyphenation = {american}, author = {Maron, Monika}, translator = {Brigitte Goldstein}, title = {Animal Triste}, shorttitle = {Animal Triste}, publisher = {University of Nebraska Press}, location = {Lincoln}, year = {2000}, origlanguage = {german}, annotation = {An English translation of a German novel with a French title. In other words: a \texttt{book} entry with a \texttt{translator} field. Note the \texttt{origlanguage} field which is concatenated with the \texttt{translator}} } @Book{massa, hyphenation = {british}, author = {Werner Massa}, title = {Crystal structure determination}, edition = {2}, publisher = {Spinger}, location = {Berlin}, year = {2004}, annotation = {A \texttt{book} entry with an \texttt{edition} field} } @Book{nietzsche:ksa, hyphenation = {german}, sortyear = {1988-00-000}, sorttitle = {Werke-00-000}, indexsorttitle = {Samtliche Werke}, author = {Nietzsche, Friedrich}, editor = {Colli, Giorgio and Montinari, Mazzino}, title = {S{\"a}mtliche Werke}, subtitle = {Kritische Studienausgabe}, volumes = {15}, edition = {2}, publisher = dtv # { and Walter de Gruyter}, location = {M{\"u}nchen and Berlin and New York}, year = {1988}, annotation = {The critical edition of Nietzsche's works. This is a \texttt{book} entry referring to a 15-volume work as a whole. Note the \texttt{volumes} field and the format of the \texttt{publisher} and \texttt{location} fields in the database file. Also note the \texttt{sorttitle} and \texttt{sortyear} fields which are used to fine-tune the sorting order of the bibliography. We want this item listed first in the bibliography} } @Book{nietzsche:ksa1, hyphenation = {german}, sortyear = {1988-01-000}, sorttitle = {Werke-01-000}, indexsorttitle = {Samtliche Werke I}, author = {Nietzsche, Friedrich}, bookauthor = {Nietzsche, Friedrich}, editor = {Colli, Giorgio and Montinari, Mazzino}, indextitle = {S{\"a}mtliche Werke I}, title = {Die Geburt der Trag{\"o}die. Unzeitgem{\"a}{\ss}e Betrachtungen I--IV. Nachgelassene Schriften 1870--1973}, shorttitle = {S{\"a}mtliche Werke I}, maintitle = {S{\"a}mtliche Werke}, mainsubtitle = {Kritische Studienausgabe}, volume = {1}, edition = {2}, publisher = dtv # { and Walter de Gruyter}, location = {M{\"u}nchen and Berlin and New York}, year = {1988}, annotation = {A single volume from the critical edition of Nietzsche's works. This \texttt{book} entry explicitly refers to the first volume only. Note the \texttt{title} and \texttt{maintitle} fields. Also note the \texttt{sorttitle} and \texttt{sortyear} fields. We want this entry to be listed after the entry referring to the entire edition} } @Book{nussbaum, keywords = {secondary}, hyphenation = {american}, sorttitle = {Aristotle's De Motu Animalium}, indexsorttitle = {Aristotle's De Motu Animalium}, author = {Nussbaum, Martha}, title = {Aristotle's \mkbibquote{De Motu Animalium}}, publisher = pup, location = {Princeton}, year = {1978}, annotation = {A \texttt{book} entry. Note the \texttt{sorttitle} and \texttt{indexsorttitle} fields and the markup of the quotes in the database file} } @Book{piccato, hyphenation = {american}, author = {Piccato, Pablo}, title = {City of Suspects}, subtitle = {Crime in Mexico City, 1900--1931}, shorttitle = {City of Suspects}, publisher = {Duke University Press}, location = {Durham and London}, year = {2001}, annotation = {This is a \texttt{book} entry. Note the format of the \texttt{location} field in the database file} } @Book{vangennep, options = {useprefix}, hyphenation = {french}, sorttitle = {Rites de passage}, author = {van Gennep, Arnold}, indextitle = {Rites de passage, Les}, title = {Les rites de passage}, shorttitle = {Rites de passage}, publisher = {Nourry}, location = {Paris}, year = {1909}, annotation = {A \texttt{book} entry. Note the format of the printed name and compare the \texttt{useprefix} option in the \texttt{options} field as well as \texttt{brandt} and \texttt{geer}} } @Book{vangennepx, hyphenation = {french}, author = {van Gennep, Jean}, title = {Il a neigé à Port-au-Prince}, publisher = {Alhambra}, location = {Montréal}, year = {1999} } @Book{vazques-de-parga, hyphenation = {spanish}, sorttitle = {Peregrinaciones a Santiago de Compostela}, author = {V{\'a}zques{ de }Parga, Luis and Lacarra, Jos{\'e} Mar{\'i}a and Ur{\'i}a R{\'i}u, Juan}, indextitle = {Peregrinaciones a Santiago de Compostela, Las}, title = {Las Peregrinaciones a Santiago de Compostela}, shorttitle = {Peregrinaciones}, volumes = {3}, publisher = {Iberdrola}, location = {Pamplona}, year = {1993}, note = {Ed. facs. de la realizada en 1948--49}, annotation = {A multivolume book cited as a whole. This is a \texttt{book} entry with \texttt{volumes}, \texttt{note}, \texttt{sorttitle}, and \texttt{indextitle} fields} } @Book{worman, hyphenation = {american}, sorttitle = {Cast of Character}, author = {Worman, Nancy}, indextitle = {Cast of Character, The}, title = {The Cast of Character}, subtitle = {Style in Greek Literature}, shorttitle = {Cast of Character}, publisher = {University of Texas Press}, location = {Austin}, year = {2002}, annotation = {A \texttt{book} entry. Note the \texttt{sorttitle} and \texttt{indextitle} fields} } @Book{wormanx, hyphenation = {american}, sorttitle = {Someone did it again}, author = {Worman, Nana}, indextitle = {Someone did it again}, title = {Someone did it again}, publisher = {University of Nowhere Press}, location = {Somewhere}, year = {2009} } @Collection{britannica, options = {useeditor=false}, label = {EB}, hyphenation = {british}, sorttitle = {Encyclop{\ae}dia Britannica}, editor = {Preece, Warren E.}, indextitle = {Encyclop{\ae}dia Britannica, The New}, title = {The New Encyclop{\ae}dia Britannica}, shorttitle = {Encyclop{\ae}dia Britannica}, volumes = {32}, edition = {15}, publisher = {Encyclop{\ae}dia Britannica}, location = {Chicago, Ill.}, year = {2003}, annotation = {This is a \texttt{collection} entry for an encyclopedia. Note the \texttt{useeditor} option in the \texttt{options} field as well as the \texttt{sorttitle} field. We want this entry to be cited and alphabetized by title even though there is an editor. In addition to that, we want the title to be alphabetized under \enquote*{E} rather than \enquote*{T}. Also note the \texttt{label} field which is provided for author-year citation styles} } @Collection{gaonkar, hyphenation = {american}, editor = {Gaonkar, Dilip Parameshwar}, title = {Alternative Modernities}, publisher = {Duke University Press}, location = {Durham and London}, year = {2001}, isbn = {0-822-32714-7}, annotation = {This is a \texttt{collection} entry. Note the format of the \texttt{location} field in the database file as well as the \texttt{isbn} field} } @Collection{jaffe, editor = {Jaff{\'e}, Philipp}, editora = {Loewenfeld, Samuel and Kaltenbrunner, Ferdinand and Ewald, Paul}, editoratype = {redactor}, indextitle = {Regesta Pontificum Romanorum}, title = {Regesta Pontificum Romanorum ab condita ecclesia ad annum post Christum natum \textsc{mcxcviii}}, shorttitle = {Regesta Pontificum Romanorum}, volumes = {2}, edition = {2}, location = {Leipzig}, date = {1885/1888}, annotation = {A \texttt{collection} entry with \texttt{edition} and \texttt{volumes} fields. Note the \texttt{editortype} field handling the redactor} } @Collection{westfahl:frontier, hyphenation = {american}, editor = {Westfahl, Gary}, title = {Space and Beyond}, subtitle = {The Frontier Theme in Science Fiction}, booktitle = {Space and Beyond}, booksubtitle = {The Frontier Theme in Science Fiction}, publisher = {Greenwood}, location = {Westport, Conn. and London}, year = {2000}, annotation = {This is a \texttt{collection} entry. Note the format of the \texttt{location} field as well as the \texttt{subtitle} and \texttt{booksubtitle} fields} } @InBook{kant:kpv, shorthand = {KpV}, hyphenation = {german}, author = {Kant, Immanuel}, bookauthor = {Kant, Immanuel}, title = {Kritik der praktischen Vernunft}, shorttitle = {Kritik der praktischen Vernunft}, booktitle = {Kritik der praktischen Vernunft. Kritik der Urtheilskraft}, maintitle = {Kants Werke. Akademie Textausgabe}, volume = {5}, publisher = {Walter de Gruyter}, location = {Berlin}, year = {1968}, pages = {1--163}, annotation = {An edition of Kant's \emph{Collected Works}, volume five. This is an \texttt{inbook} entry which explicitly refers to the \emph{Critique of Practical Reason} only, not to the entire fifth volume. Note the \texttt{author} and \texttt{bookauthor} fields in the database file. By default, the \texttt{bookauthor} is omitted if the values of the \texttt{author} and \texttt{bookauthor} fields are identical} } @InBook{kant:ku, shorthand = {KU}, hyphenation = {german}, author = {Kant, Immanuel}, bookauthor = {Kant, Immanuel}, title = {Kritik der Urtheilskraft}, booktitle = {Kritik der praktischen Vernunft. Kritik der Urtheilskraft}, maintitle = {Kants Werke. Akademie Textausgabe}, volume = {5}, publisher = {Walter de Gruyter}, location = {Berlin}, year = {1968}, pages = {165--485}, annotation = {An edition of Kant's \emph{Collected Works}, volume five. This is an \texttt{inbook} entry which explicitly refers to the \emph{Critique of Judgment} only, not to the entire fifth volume} } @InBook{nietzsche:historie, hyphenation = {german}, sortyear = {1988-01-243}, sorttitle = {Werke-01-243}, indexsorttitle = {Vom Nutzen und Nachtheil der Historie fur das Leben}, author = {Nietzsche, Friedrich}, bookauthor = {Nietzsche, Friedrich}, editor = {Colli, Giorgio and Montinari, Mazzino}, indextitle = {Vom Nutzen und Nachtheil der Historie f{\"u}r das Leben}, title = {Unzeitgem{\"a}sse Betrachtungen. Zweites St{\"u}ck}, subtitle = {Vom Nutzen und Nachtheil der Historie f{\"u}r das Leben}, shorttitle = {Vom Nutzen und Nachtheil der Historie}, booktitle = {Die Geburt der Trag{\"o}die. Unzeitgem{\"a}{\ss}e Betrachtungen I--IV. Nachgelassene Schriften 1870--1973}, maintitle = {S{\"a}mtliche Werke}, mainsubtitle = {Kritische Studienausgabe}, volume = {1}, publisher = dtv # { and Walter de Gruyter}, location = {M{\"u}nchen and Berlin and New York}, year = {1988}, pages = {243--334}, annotation = {A single essay from the critical edition of Nietzsche's works. This \texttt{inbook} entry explicitly refers to an essay found in the first volume. Note the \texttt{title}, \texttt{booktitle}, and \texttt{maintitle} fields. Also note the \texttt{sorttitle} and \texttt{sortyear} fields. We want this entry to be listed after the entry referring to the entire first volume} } @InCollection{brandt, options = {useprefix=false}, hyphenation = {german}, indexsorttitle = {Nordischen Lander von der Mitte des 11. Jahrhunderts bis 1448}, author = {von Brandt, Ahasver and Erich Hoffmann}, editor = {Ferdinand Seibt}, indextitle = {Nordischen L{\"a}nder von der Mitte des 11.~Jahrhunderts bis 1448, Die}, title = {Die nordischen L{\"a}nder von der Mitte des 11.~Jahrhunderts bis 1448}, shorttitle = {Die nordischen L{\"a}nder}, booktitle = {Europa im Hoch- und Sp{\"a}tmittelalter}, series = {Handbuch der europ{\"a}ischen Geschichte}, number = {2}, publisher = {Klett-Cotta}, location = {Stuttgart}, year = {1987}, pages = {884--917}, annotation = {An \texttt{incollection} entry with a \texttt{series} and a \texttt{number}. Note the format of the printed name and compare the \texttt{useprefix} option in the \texttt{options} field as well as \texttt{vangennep}. Also note the \texttt{indextitle, and \texttt{indexsorttitle} fields}} } @InCollection{hyman, keywords = {secondary}, hyphenation = {american}, author = {Arthur Hyman}, editor = {O'Meara, Dominic J.}, indextitle = {Aristotle's Theory of the Intellect}, title = {Aristotle's Theory of the Intellect and its Interpretation by Averroes}, shorttitle = {Aristotle's Theory of the Intellect}, booktitle = {Studies in Aristotle}, series = {Studies in Philosophy and the History of Philosophy}, number = {9}, publisher = {The Catholic University of America Press}, location = {Washington, D.C.}, year = {1981}, pages = {161--191}, annotation = {An \texttt{incollection} entry with a \texttt{series} and \texttt{number} field} } @InCollection{pines, keywords = {secondary}, hyphenation = {american}, author = {Pines, Shlomo}, editor = {Twersky, Isadore}, indextitle = {Limitations of Human Knowledge According to Al-Farabi, ibn Bajja, and Maimonides, The}, title = {The Limitations of Human Knowledge According to Al-Farabi, ibn Bajja, and Maimonides}, shorttitle = {Limitations of Human Knowledge}, booktitle = {Studies in Medieval Jewish History and Literature}, publisher = hup, location = {Cambridge, Mass.}, year = {1979}, pages = {82--109}, annotation = {A typical \texttt{incollection} entry. Note the \texttt{indextitle} field} } @InProceedings{moraux, keywords = {secondary}, hyphenation = {french}, indexsorttitle = {De Anima dans la tradition grecque}, author = {Moraux, Paul}, editor = {Lloyd, G. E. R. and Owen, G. E. L.}, indextitle = {\emph{De Anima} dans la tradition gr{\`e}cque, Le}, title = {Le \emph{De Anima} dans la tradition gr{\`e}cque}, subtitle = {Quelques aspects de l'interpretation du trait{\'e}, de Theophraste {\`a} Themistius}, shorttitle = {\emph{De Anima} dans la tradition gr{\`e}cque}, booktitle = {Aristotle on Mind and the Senses}, booktitleaddon = {Proceedings of the Seventh Symposium Aristotelicum (1975)}, publisher = cup, location = {Cambridge}, date = {1979-01-02/1980-04-08}, origdate = {1924-06-07/1924-07-09}, eventdate = {1924-02-03/1924-02-05}, urldate = {1979-03-03/1979-03-04}, url = {http://some/thing}, pages = {281--324}, annotation = {This is a typical \texttt{inproceedings} entry. Note the \texttt{booksubtitle}, \texttt{shorttitle}, \texttt{indextitle}, and \texttt{indexsorttitle} fields} } @InProceedings{stdmodel:salam, entryset = {stdmodel}, author = {Salam, Abdus}, editor = {Svartholm, Nils}, title = {Weak and Electromagnetic Interactions}, booktitle = {Elementary particle theory}, booksubtitle = {Relativistic groups and analyticity}, booktitleaddon = {Proceedings of the Eighth Nobel Symposium, May 19--25, 1968}, venue = {Aspen{\"a}sgarden, Lerum}, publisher = {Almquist \& Wiksell}, location = {Stockholm}, year = {1968}, pages = {367\psqq} } @Manual{cms, label = {CMS}, hyphenation = {american}, sorttitle = {Chicago Manual of Style}, indextitle = {Chicago Manual of Style, The}, title = {The Chicago Manual of Style}, subtitle = {The Essential Guide for Writers, Editors, and Publishers}, shorttitle = {Chicago Manual of Style}, edition = {15}, publisher = {University of Chicago Press}, location = {Chicago, Ill.}, year = {2003}, isbn = {0-226-10403-6}, annotation = {This is a \texttt{manual} entry without an \texttt{author} or \texttt{editor}. Note the \texttt{label} field in the database file which is provided for author-year citation styles. Also note the \texttt{sorttitle} and \texttt{indextitle} fields. By default, all entries without an \texttt{author} or \texttt{editor} are alphabetized by \texttt{title} but we want this entry to be alphabetized under \enquote*{C} rather than \enquote*{T}. There's also an \texttt{isbn} field} } @Online{baez/online, hyphenation = {american}, author = {Baez, John C. and Lauda, Aaron D.}, title = {Higher-Dimensional Algebra V: 2-Groups}, version = {3}, date = {2004-10-27}, eprint = {math/0307200v3}, eprinttype = {arxiv}, annotation = {An \texttt{online} reference from arXiv. Note the \texttt{eprint} and \texttt{eprinttype} fields. Also note that the arXiv reference is transformed into a clickable link if \texttt{hyperref} support has been enabled. Compare \texttt{baez\slash article} which is the same item given as an \texttt{article} entry with eprint information} } @Online{ctan, label = {CTAN}, hyphenation = {american}, title = {CTAN}, subtitle = {The Comprehensive TeX Archive Network}, year = {2006}, url = {http://www.ctan.org}, urldate = {2006-10-01}, annotation = {This is an \texttt{online} entry. The \textsc{url}, which is given in the \texttt{url} field, is transformed into a clickable link if \texttt{hyperref} support has been enabled. Note the format of the \texttt{urldate} field (\texttt{yyyy-mm-dd}) in the database file. It is also possible to use the fields \texttt{urlday}\slash \texttt{urlmonth}\slash \texttt{urlyear} instead. Also note the \texttt{label} field which may be used as a fallback by citation styles which need an \texttt{author} and\slash or a \texttt{year}} } @Online{itzhaki, hyphenation = {american}, author = {Itzhaki, Nissan}, title = {Some remarks on 't Hooft's S-matrix for black holes}, version = {1}, date = {1996-03-11}, eprint = {hep-th/9603067}, eprinttype = {arxiv}, annotation = {An \texttt{online} reference from arXiv. Note the \texttt{eprint} and \texttt{eprinttype} fields. Also note that the arXiv reference is transformed into a clickable link if \texttt{hyperref} support has been enabled}, abstract = {We discuss the limitations of 't Hooft's proposal for the black hole S-matrix. We find that the validity of the S-matrix implies violation of the semi-classical approximation at scales large compared to the Planck scale. We also show that the effect of the centrifugal barrier on the S-matrix is crucial even for large transverse distances.} } @Online{markey, hyphenation = {american}, sorttitle = {Tame the Beast}, author = {Markey, Nicolas}, title = {Tame the BeaST}, subtitle = {The B to X of BibTeX}, version = {1.3}, url = {http://tug.ctan.org/tex-archive/info/bibtex/tamethebeast/ttb_en.pdf}, urldate = {2006-10-01}, annotation = {An \texttt{online} entry for a tutorial. Note the format of the \texttt{date} field (\texttt{yyyy-mm-dd}) in the database file. It is also possible to use the fields \texttt{day}\slash \texttt{month}\slash \texttt{year} instead.} } @Patent{almendro, hyphenation = {german}, author = {Almendro, Jos{\'e} L. and Mart{\'i}n, Jacinto and S{\'a}nchez, Alberto and Nozal, Fernando}, title = {Elektromagnetisches Signalhorn}, number = {EU-29702195U}, location = {countryes and countryfr and countryuk and countryde}, year = {1998}, annotation = {This is a \texttt{patent} entry with a \texttt{location} field. The number is given in the \texttt{number} field. Note the format of the \texttt{location} field in the database file. Compare \texttt{laufenberg}, \texttt{sorace}, and \texttt{kowalik}} } @Patent{kowalik, hyphenation = {french}, author = {Kowalik, F. and Isard, M.}, indextitle = {Estimateur d'un d{\'e}faut de fonctionnement}, title = {Estimateur d'un d{\'e}faut de fonctionnement d'un modulateur en quadrature et {\'e}tage de modulation l'utilisant}, type = {patreqfr}, number = {9500261}, date = {1995-01-11}, annotation = {This is a \texttt{patent} entry for a French patent request with a full date. The number is given in the \texttt{number} field. Note the format of the \texttt{type} and \texttt{date} fields in the database file. Compare \texttt{almendro}, \texttt{laufenberg}, and \texttt{sorace}} } @Patent{laufenberg, hyphenation = {german}, author = {Laufenberg, Xaver and Eynius, Dominique and Suelzle, Helmut and Usbeck, Stephan and Spaeth, Matthias and Neuser-Hoffmann, Miriam and Myrzik, Christian and Schmid, Manfred and Nietfeld, Franz and Thiel, Alexander and Braun, Harald and Ebner, Norbert}, holder = {{Robert Bosch GmbH} and {Daimler Chrysler AG} and {Bayerische Motoren Werke AG}}, title = {Elektrische Einrichtung und Betriebsverfahren}, type = {patenteu}, number = {1700367}, location = {countryde and countrywo}, date = {2006-09-13}, annotation = {This is a \texttt{patent} entry with a \texttt{holder} field. Note the format of the \texttt{type} and \texttt{location} fields in the database file. Compare \texttt{almendro}, \texttt{sorace}, and \texttt{kowalik}}, abstract = {The invention relates to an electric device comprising a generator, in particular for use in the vehicle electric system of a motor vehicle and a controller for controlling the generator voltage. The device is equipped with a control zone, in which the voltage is controlled and zones, in which the torque is controlled. The invention also relates to methods for operating a device of this type.}, file = {http://v3.espacenet.com/textdoc?IDX=EP1700367} } @Patent{sorace, hyphenation = {american}, author = {Sorace, Ronald E. and Reinhardt, Victor S. and Vaughn, Steven A.}, holder = {{Hughes Aircraft Company}}, title = {High-Speed Digital-to-RF Converter}, type = {patentus}, number = {5668842}, date = {1997-09-16}, annotation = {This is a \texttt{patent} entry with a \texttt{holder} field. Note the format of the \texttt{type} and \texttt{date} fields in the database file. Compare \texttt{almendro}, \texttt{laufenberg}, and \texttt{kowalik}} } @Report{chiu, hyphenation = {american}, sorttitle = {Hybrid Hierarchical Model of a Multiple Virtual Storage (MVS) Operating System}, author = {Chiu, Willy W. and Chow, We Min}, indextitle = {Hybrid Hierarchical Model, A}, title = {A Hybrid Hierarchical Model of a Multiple Virtual Storage (MVS) Operating System}, institution = {IBM and HP and Sun and Sony}, type = {resreport}, number = {RC-6947}, year = {1978}, annotation = {This is a \texttt{report} entry for a research report. Note the format of the \texttt{type} field in the database file which uses a localization key. The number of the report is given in the \texttt{number} field. Also note the \texttt{sorttitle} and \texttt{indextitle} fields} } @Report{padhye, hyphenation = {american}, sorttitle = {A Stochastic Model of TCP Reno Congestion Avoidance and Control}, author = {Padhye, Jitendra and Firoiu, Victor and Towsley, Don}, indextitle = {Stochastic Model of TCP Reno Congestion Avoidance and Control, A}, title = {A Stochastic Model of TCP Reno Congestion Avoidance and Control}, institution = {University of Massachusetts}, type = {techreport}, number = {99-02}, location = {Amherst, Mass.}, year = {1999}, annotation = {This is a \texttt{report} entry for a technical report. Note the format of the \texttt{type} field in the database file which uses a localization key. The number of the report is given in the \texttt{number} field. Also note the \texttt{sorttitle} and \texttt{indextitle} fields}, abstract = {The steady state performance of a bulk transfer TCP flow (i.e. a flow with a large amount of data to send, such as FTP transfers) may be characterized by three quantities. The first is the send rate, which is the amount of data sent by the sender in unit time. The second is the throughput, which is the amount of data received by the receiver in unit time. Note that the throughput will always be less than or equal to the send rate due to losses. Finally, the number of non-duplicate packets received by the receiver in unit time gives us the goodput of the connection. The goodput is always less than or equal to the throughput, since the receiver may receive two copies of the same packet due to retransmissions by the sender. In a previous paper, we presented a simple model for predicting the steady state send rate of a bulk transfer TCP flow as a function of loss rate and round trip time. In this paper, we extend that work in two ways. First, we analyze the performance of bulk transfer TCP flows using more precise, stochastic analysis. Second, we build upon the previous analysis to provide both an approximate formula as well as a more accurate stochastic model for the steady state throughput of a bulk transfer TCP flow.}, file = {ftp://gaia.cs.umass.edu/pub/Padhey99-markov.ps} } @Thesis{geer, options = {useprefix=false}, hyphenation = {british}, author = {de Geer, Ingrid}, title = {Earl, Saint, Bishop, Skald~-- and Music}, subtitle = {The Orkney Earldom of the Twelfth Century. A Musicological Study}, institution = {Uppsala Universitet}, type = {phdthesis}, location = {Uppsala}, year = {1985}, annotation = {This is a typical \texttt{thesis} entry for a PhD thesis. Note the \texttt{type} field in the database file which uses a localization key. Also note the format of the printed name and compare the \texttt{useprefix} option in the \texttt{options} field as well as \texttt{vangennep}} } @Thesis{loh, hyphenation = {american}, author = {Loh, Nin C.}, title = {High-Resolution Micromachined Interferometric Accelerometer}, institution = {Massachusetts Institute of Technology}, type = {mathesis}, location = {Cambridge, Mass.}, year = {1992}, annotation = {This is a typical \texttt{thesis} entry for an MA thesis. Note the \texttt{type} field in the database file which uses a localization key} } @Thesis{Pimentel00, author = {Pimentel, Jr.,Joseph J.}, title = {Sociolinguistic Reflections of Privatization and Globalization: The {Arabic} of {Egyptian} newspaper advertisements}, school = {University of Michigan}, year = {2000}, } @Book{luzzatto, author = {Luzzatto, Moshe Ḥayyim}, title = {ha-Lashon la-Ramḥal: u-vo sheloshah ḥiburim}, location = {Yerushalayim}, publisher = {Makhon Ramḥal}, year = {2000} } % Without braces round this prefixed lastname, T::B::N fails to get % the lastname on Windows for some reason @BOOK{hasan, author = {{al-Hasan}, ʿAlī}, editor = {{al-Hasan}, ʿAlī}, translator = {{al-Hasan}, ʿAlī}, title = {Some title}, publisher = {Some press}, year = {2000}, } % This also tests auto-escaping of some LaTeX specials chars like "%" @MISC{t1, KEYWORDS = { primary, something,somethingelse}, AUTHOR = {Bill Brown}, TITLE = {10\% of [100] and 90% of $Normal_2$ | \& # things {$^{3}$}}, YEAR = 1992, PAGES = {100--} } % SORTNAME should not be output @MISC{t2, AUTHOR = {Bill Brown}, SORTNAME = {Bill Brown}, TITLE = {Signs of W$\frac{o}{a}$nder}, YEAR = {1994}, PAGES = {100--108} } @MISC{tvonb, AUTHOR = {Terrence von Bobble}, TITLE = {Things}, YEAR = {1997} } % fullhash and namehash should be different for these two @UNPUBLISHED{anon1, AUTHOR = {AnonymousX}, TITLE = {Title1}, YEAR = {1835}, SHORTAUTHOR = {XAnony}, SHORTTITLE = {Shorttitle}, KEYWORDS = {arc}, PAGES = {111--118}, HYPHENATION = {USenglish} } @UNPUBLISHED{anon2, AUTHOR = {AnonymousY}, TITLE = {Title2}, YEAR = {1839}, PAGES = {1176--1276}, SHORTAUTHOR = {YAnony}, SHORTTITLE = {Shorttitle}, KEYWORDS = {arc}, HYPHENATION = {USenglish}, } % Testing uniquelist @MISC{u1, AUTHOR = {AAA and BBB and CCC and DDD}, TITLE = {A title}, DATE = {2000} } @MISC{u2, AUTHOR = {AAA and BBB and CCC and DDD and EEE}, TITLE = {A title}, DATE = {2003} } % Testing ignore @UNPUBLISHED{i1, ABSTRACT = {Some abstract %50 of which is useless}, AUTHOR = {AAA and BBB and CCC and DDD and EEE}, TITLE = {A title}, DATE = {2003}, USERB = {test}, LISTA = {list test}, LISTB = {late and early}, LISTC = {late and early}, } @MISC{i2, USERB = {Some text & some bad chars}, USERF = {Something to lose in an alsoset}, AUTHOR = {AAA and BBB and CCC}, TITLE = {A title}, DATE = {2005} } % Testing per_type and per_entry max/min*names @MISC{tmn1, AUTHOR = {AAA and BBB and CCC}, TITLE = {A title}, INSTITUTION = {A and B and C}, DATE = {2005} } @BOOK{tmn2, OPTIONS = {maxalphanames = 2}, AUTHOR = {AAA and BBB and CCC}, TITLE = {A title}, DATE = {2005} } @UNPUBLISHED{tmn3, OPTIONS = {minitems=2}, AUTHOR = {AAA and BBB and CCC}, INSTITUTION = {A and B and C}, TITLE = {A title}, DATE = {2005} } @UNPUBLISHED{tmn4, OPTIONS = {maxbibnames=4}, AUTHOR = {AAA and BBB and CCC}, TITLE = {A title}, DATE = {2005} } % Test of duplicate skipping @UNPUBLISHED{tmn4, AUTHOR = {ZZZ} } % Testing exotic labelnames @MISC{lne1, AUTHOR = {AAA and BBB and CCC}, NAMEA = {ZZZ}, TITLE = {A title}, DATE = {2005} } % Testing citekey aliases @MISC{alias1, AUTHOR = {Alan Alias}, DATE = {2005}, IDS = {alias2, alias3} } @MISC{alias2, AUTHOR = {Alan Alias}, DATE = {2005}, IDS = {alias4} } @MISC{alias5, AUTHOR = {Alan Alias}, DATE = {2005}, IDS = {alias6} } % Testing url encoding @MISC{url1, AUTHOR = {Alan Alias}, DATE = {2005}, URL = {http://www.something.com/q=á\'{e}\'aŠ} } @MISC{url2, AUTHOR = {Alan Alias}, DATE = {2005}, URL = {http://www.something.com/q=one\%20two} } @ONLINE{ol1, AUTHOR = {Oliver Online}, TITLE = {Online1}, NOTE = {A note} } @MISC{pages1, PAGES = {23--24} } @MISC{pages2, PAGES = {23} } @MISC{pages3, PAGES = {{I-II}---{III-IV}} } @MISC{pages4, PAGES = { 3 -- 5 }, } @MISC{pages5, PAGES = {42--}, } @MISC{pages6, PAGES = {\bibstring{number} 42}, } @MISC{pages7, PAGES = {\bibstring{number} 42, 3 --- 6, {I-II}--5}, } % Testing user->style maps @CONVERSATION{us1, AUTHOR = {Test}, } @BOOK{labelstest, AUTHOR = {AAA and BBB and CCC}, TITLE = {A title}, DATE = {2005-03-02} } @BOOK{list1, LOCATION = {AAA and BBB and others} }biblatex-biber-1.8/t/tdata/uniqueness2.bcf000444000000000000 26263512230324176 20044 0ustar00rootroot000000000000 output_encoding utf8 input_encoding utf8 debug 0 mincrossrefs 2 sortcase 0 sortfirstinits 0 sortupper 1 alphaothers \textbf{+} labelalpha 1 labelnamespec shortauthor author shorteditor editor translator labeltitle 0 labeltitlespec shorttitle title labeltitleyear 0 labeldate 1 labeldatespec date maxalphanames 3 maxbibnames 3 maxcitenames 1 maxitems 3 minalphanames 1 minbibnames 1 mincitenames 1 minitems 1 singletitle 0 sortalphaothers + sortscheme nty uniquelist 1 uniquename 2 useauthor 1 useeditor 1 useprefix 1 usetranslator 1 Edited Book Electronic Article Journal Article Magazine Article Newspaper Article Patent Report Government Document Legal Rule or Regulation Blog Online Database Online Multimedia Web Page Book Section Book Electronic Book Manuscript Unpublished Work Conference Paper Conference Proceedings Electronic Article Journal Article Magazine Article Newspaper Article Book Section Conference Proceedings periodical shorthand label labelname labelname year mm presort mm sortkey sortname author editor translator sorttitle title sorttitle title sortyear year volume 0000 article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort entryset institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender uniqueness2.bib * shorthand biblatex-biber-1.8/t/tdata/ris1.ris000444000000000000 423412230324176 16431 0ustar00rootroot000000000000TY - JOUR ID - test1 A1 - Baldwin,S.A. A1 - Fugaccia,I. A1 - Brown,D.R. A1 - Brown,L.V. A1 - Scheff,S.W. TI - Blood-brain barrier breach following cortical contusion in the rat JO - J.Neurosurg. Y1 - 1996 VL - 85 SP - 476 EP - 481 RP - Not In File KW - cortical contusion KW - blood-brain barrier KW - horseradish peroxidase KW - head trauma KW - hippocampus KW - rat N2 - Adult Fisher 344 rats were subjected to a unilateral impact to the dorsal cortex above the hippocampus at 3.5 m/sec with a 2 mm cortical depression. This caused severe cortical damage and neuronal loss in hippocampus subfields CA1, CA3 and hilus. Breakdown of the blood-brain barrier (BBB) was assessed by injecting the protein horseradish peroxidase (HRP) 5 minutes prior to or at various times following injury (5 minutes, 1, 2, 6, 12 hours, 1, 2, 5, and 10 days). Animals were killed 1 hour after HRP injection and brain sections were reacted with diaminobenzidine to visualize extravascular accumulation of the protein. Maximum staining occurred in animals injected with HRP 5 minutes prior to or 5 minutes after cortical contusion. Staining at these time points was observed in the ipsilateral hippocampus. Some modest staining occurred in the dorsal contralateral cortex near the superior sagittal sinus. Cortical HRP stain gradually decreased at increasing time intervals postinjury. By 10 days, no HRP stain was observed in any area of the brain. In the ipsilateral hippocampus, HRP stain was absent by 3 hours postinjury and remained so at the 6- and 12- hour time points. Surprisingly, HRP stain was again observed in the ipsilateral hippocampus 1 and 2 days following cortical contusion, indicating a biphasic opening of the BBB following head trauma and a possible second wave of secondary brain damage days after the contusion injury. These data indicate regions not initially destroyed by cortical impact, but evidencing BBB breach, may be accessible to neurotrophic factors administered intravenously both immediately and days after brain trauma. ER - TY - BOOK ID - test2 AU - Smith,John Frederick,III ED - Brown,Alan TI - Sometitle PY - 1996/03/12 SP - 1 EP - 20 KW - keyword ER - biblatex-biber-1.8/lib000755000000000000 012230324176 14102 5ustar00rootroot000000000000biblatex-biber-1.8/lib/Biber.pm000444000000000000 36565312230324176 15702 0ustar00rootroot000000000000package Biber; use v5.16; use strict; use warnings; use base 'Biber::Internals'; use constant { EXIT_OK => 0, EXIT_ERROR => 2 }; use Carp; use Encode; use File::Copy; use File::Spec; use File::Temp; use IO::File; use POSIX qw( locale_h ); # for sorting with built-in "sort" use Biber::Config; use Biber::Constants; use List::AllUtils qw( first uniq max ); use Biber::DataModel; use Biber::Internals; use Biber::Entries; use Biber::Entry; use Biber::Entry::Name; use Biber::Sections; use Biber::Section; use Biber::LaTeX::Recode; use Biber::SortLists; use Biber::SortList; use Biber::Utils; use Log::Log4perl qw( :no_extra_logdie_message ); use Data::Dump; use Data::Compare; use Text::BibTeX qw(:macrosubs); =encoding utf-8 =head1 NAME Biber - main module for biber, a bibtex replacement for users of biblatex =cut my $logger = Log::Log4perl::get_logger('main'); =head1 SYNOPSIS use Biber; my $biber = Biber->new(); $biber->parse_ctrlfile("example.bcf"); $biber->prepare; =cut our $MASTER; # reference to biber object. Needed all over the place =head1 METHODS =head2 new Initialize the Biber object, optionally passing named options as arguments. =cut sub new { my ($class, %opts) = @_; my $self = bless {}, $class; Biber::Config->_initopts(\%opts); # Add a reference to a global temp dir we might use for various things $self->{TEMPDIR} = File::Temp->newdir(); # Initialise recoding schemes Biber::LaTeX::Recode->init_schemes(Biber::Config->getoption('decodecharsset'), Biber::Config->getoption('output_safecharsset')); $MASTER = $self; # Validate if asked to # This has to be here, after config file is read and options # are parsed. It seems strange to validate the config file after it's been # read but there is no choice and it's useful anyway as this will catch some semantic # errors. Uses biber_error() and so $MASTER has to be defined before we call this if (Biber::Config->getoption('validate_config') and $opts{configfile}) { validate_biber_xml($opts{configfile}, 'config', ''); } return $self; } =head2 display_problems Output summary of warnings/errors before exit =cut sub display_problems { my $self = shift; if ($self->{warnings}) { $logger->info('WARNINGS: ' . $self->{warnings}); } if ($self->{errors}) { $logger->info('ERRORS: ' . $self->{errors}); exit EXIT_ERROR; } } =head2 biber_tempdir my $sections= $biber->biber_tempdir Returns a File::Temp directory object for use in various things =cut sub biber_tempdir { my $self = shift; return $self->{TEMPDIR}; } =head2 sections my $sections= $biber->sections Returns a Biber::Sections object describing the bibliography sections =cut sub sections { my $self = shift; return $self->{sections}; } =head2 add_sections Adds a Biber::Sections object. Used externally from, e.g. biber =cut sub add_sections { my ($self, $sections) = @_; $self->{sections} = $sections; return; } =head2 sortlists my $sortlists= $biber->sortlists Returns a Biber::SortLists object describing the bibliography sorting lists =cut sub sortlists { my $self = shift; return $self->{sortlists}; } =head2 set_output_obj Sets the object used to output final results Must be a subclass of Biber::Output::base =cut sub set_output_obj { my $self = shift; my $obj = shift; croak('Output object must be subclass of Biber::Output::base!') unless $obj->isa('Biber::Output::base'); $self->{output_obj} = $obj; return; } =head2 get_preamble Returns the current preamble as an array ref =cut sub get_preamble { my $self = shift; return $self->{preamble}; } =head2 get_output_obj Returns the object used to output final results =cut sub get_output_obj { my $self = shift; return $self->{output_obj}; } =head2 set_current_section Sets the current section number that we are working on to a section number =cut sub set_current_section { my $self = shift; my $secnum = shift; $self->{current_section} = $secnum; return; } =head2 get_current_section Gets the current section number that we are working on =cut sub get_current_section { my $self = shift; return $self->{current_section}; } =head2 tool_mode_setup Fakes parts of the control file for tool mode =cut sub tool_mode_setup { my $self = shift; my $bib_sections = new Biber::Sections; # There are no sections in tool mode so create a pseudo-section my $bib_section = new Biber::Section('number' => 99999); $bib_section->set_datasources([{type => 'file', name => $ARGV[0], datatype => Biber::Config->getoption('input_format')}]); $bib_section->set_allkeys(1); $bib_sections->add_section($bib_section); # Add the Biber::Sections object to the Biber object $self->add_sections($bib_sections); my $sortlists = new Biber::SortLists; my $seclist = Biber::SortList->new(section => 99999, label => Biber::Config->getblxoption('sortscheme')); $seclist->set_type('entry'); $seclist->set_sortscheme(Biber::Config->getblxoption('sorting')); $logger->debug("Adding 'entry' list 'tool' for pseudo-section 99999"); $sortlists->add_list($seclist); $self->{sortlists} = $sortlists; # User maps are set in config file and need some massaging which normally # happend in parse_ctrlfile if (my $usms = Biber::Config->getoption('sourcemap')) { # Force "user" level for the maps @$usms = map {$_->{level} = 'user';$_} @$usms; } return; } =head2 parse_ctrlfile This method reads the control file generated by biblatex to work out the various biblatex options. See Constants.pm for defaults and example of the data structure being built here. =cut sub parse_ctrlfile { my ($self, $ctrl_file) = @_; my $ctrl_file_path = locate_biber_file($ctrl_file); Biber::Config->set_ctrlfile_path($ctrl_file_path); biber_error("Cannot find control file '$ctrl_file'! - did you pass the \"backend=biber\" option to BibLaTeX?") unless ($ctrl_file_path and -e $ctrl_file_path); # Validate if asked to if (Biber::Config->getoption('validate_control')) { validate_biber_xml($ctrl_file_path, 'bcf', 'https://sourceforge.net/projects/biblatex'); } # Convert .bcf to .html using XSLT transform if asked to if (Biber::Config->getoption('convert_control')) { require XML::LibXSLT; require XML::LibXML; my $xslt = XML::LibXSLT->new(); my $CFstyle; # we assume that the schema files are in the same dir as Biber.pm: (my $vol, my $biber_path, undef) = File::Spec->splitpath( $INC{"Biber.pm"} ); # Deal with the strange world of Par::Packer paths # We might be running inside a PAR executable and @INC is a bit odd in this case # Specifically, "Biber.pm" in @INC might resolve to an internal jumbled name # nowhere near to these files. You know what I mean if you've dealt with pp my $bcf_xsl; if ($biber_path =~ m|/par\-| and $biber_path !~ m|/inc|) { # a mangled PAR @INC path $bcf_xsl = File::Spec->catpath($vol, "$biber_path/inc/lib/Biber", 'bcf.xsl'); } else { $bcf_xsl = File::Spec->catpath($vol, "$biber_path/Biber", 'bcf.xsl'); } if (-e $bcf_xsl) { $CFstyle = XML::LibXML->load_xml( location => $bcf_xsl, no_cdata=>1 ) } else { biber_warn("Cannot find XML::LibXSLT stylesheet. Skipping conversion : $!"); goto LOADCF; } my $CF = XML::LibXML->load_xml(location => $ctrl_file_path); my $stylesheet = $xslt->parse_stylesheet($CFstyle); my $CFhtml = $stylesheet->transform($CF); $stylesheet->output_file($CFhtml, $ctrl_file_path . '.html'); $logger->info("Converted BibLaTeX control file '$ctrl_file_path' to '$ctrl_file_path.html'"); } # Open control file LOADCF: my $ctrl = new IO::File "<$ctrl_file_path" or biber_error("Cannot open $ctrl_file_path: $!"); $logger->info("Reading '$ctrl_file_path'"); # Read control file require XML::LibXML::Simple; my $bcfxml = XML::LibXML::Simple::XMLin($ctrl, 'ForceContent' => 1, 'ForceArray' => [ qr/\Acitekey\z/, qr/\Aoption\z/, qr/\Aoptions\z/, qr/\Avalue\z/, qr/\Asortitem\z/, qr/\Abibdata\z/, qr/\Adatasource\z/, qr/\Asection\z/, qr/\Asortexclusion\z/, qr/\Aexclusion\z/, qr/\Asort\z/, qr/\Amode\z/, qr/\Amaps\z/, qr/\Amap\z/, qr/\Amap_step\z/, qr/\Aper_type\z/, qr/\Aper_datasource\z/, qr/\Anosort\z/, qr/\Anoinit\z/, qr/\Apresort\z/, qr/\Atype_pair\z/, qr/\Ainherit\z/, qr/\Afieldor\z/, qr/\Afieldxor\z/, qr/\Afield\z/, qr/\Aalias\z/, qr/\Aalsoset\z/, qr/\Aconstraints\z/, qr/\Aconstraint\z/, qr/\Aentrytype\z/, qr/\Adatetype\z/, qr/\Asortlist\z/, qr/\Alabel(?:part|element|alphatemplate)\z/, qr/\Acondition\z/, qr/\A(?:or)?filter\z/, ], 'NsStrip' => 1, 'KeyAttr' => []); # use Data::Dump;dd($bcfxml);exit 0; my $controlversion = $bcfxml->{version}; Biber::Config->setblxoption('controlversion', $controlversion); unless ($controlversion eq $BCF_VERSION) { biber_warn("Warning: Found biblatex control file version $controlversion, expected version $BCF_VERSION"); } # Look at control file and populate our main data structure with its information # OPTIONS foreach my $bcfopts (@{$bcfxml->{options}}) { # Biber options if ($bcfopts->{component} eq 'biber') { # Global options if ($bcfopts->{type} eq 'global') { foreach my $bcfopt (@{$bcfopts->{option}}) { # unless already explicitly set from cmdline/config file unless (Biber::Config->isexplicitoption($bcfopt->{key}{content})) { if ($bcfopt->{type} eq 'singlevalued') { Biber::Config->setoption($bcfopt->{key}{content}, $bcfopt->{value}[0]{content}); } elsif ($bcfopt->{type} eq 'multivalued') { Biber::Config->setoption($bcfopt->{key}{content}, [ map {$_->{content}} sort {$a->{order} <=> $b->{order}} @{$bcfopt->{value}} ]); } } } } } # BibLaTeX options if ($bcfopts->{component} eq 'biblatex') { # Global options if ($bcfopts->{type} eq 'global') { foreach my $bcfopt (@{$bcfopts->{option}}) { if ($bcfopt->{type} eq 'singlevalued') { Biber::Config->setblxoption($bcfopt->{key}{content}, $bcfopt->{value}[0]{content}); } elsif ($bcfopt->{type} eq 'multivalued') { # sort on order attribute and then remove it Biber::Config->setblxoption($bcfopt->{key}{content}, [ map {delete($_->{order}); $_} sort {$a->{order} <=> $b->{order}} @{$bcfopt->{value}} ]); } } } # Entrytype options else { my $entrytype = $bcfopts->{type}; foreach my $bcfopt (@{$bcfopts->{option}}) { if ($bcfopt->{type} eq 'singlevalued') { Biber::Config->setblxoption($bcfopt->{key}{content}, $bcfopt->{value}[0]{content}, 'PER_TYPE', $entrytype); } elsif ($bcfopt->{type} eq 'multivalued') { # sort on order attribute and then remove it Biber::Config->setblxoption($bcfopt->{key}{content}, [ map {delete($_->{order}); $_} sort {$a->{order} <=> $b->{order}} @{$bcfopt->{value}} ], 'PER_TYPE', $entrytype); } } } } } # DATASOURCE MAPPING # This is special as it's both a biblatex option and a biber option # We merge into the biber option # In biblatex you can set driver mappings but not in biber # Order of application of maps is decided by the level and within 'user' level, # which can come from two places (biber.conf and \DeclareSourcemap), order is # \DeclareSourcemap, then biber.conf if (exists($bcfxml->{sourcemap})) { # User maps are set in config file if (my $usms = Biber::Config->getoption('sourcemap')) { # Force "user" level for the maps @$usms = map {$_->{level} = 'user';$_} @$usms; # Merge any user maps from the document set by \DeclareSourcemap into user # maps set in the biber config file. These document user maps take precedence so go # at the front of any other user maps unshift(@$usms, grep {$_->{level} eq 'user'} @{$bcfxml->{sourcemap}{maps}}); # Merge the driver/style maps with the user maps from the config file if (my @m = grep {$_->{level} eq 'driver' or $_->{level} eq 'style'} @{$bcfxml->{sourcemap}{maps}} ) { Biber::Config->setoption('sourcemap', [@$usms, @m]); } else { # no driver defaults, just override the config file user map settings Biber::Config->setoption('sourcemap', $bcfxml->{sourcemap}{maps}); } } else { # just write the option as there are no config file settings at all Biber::Config->setoption('sourcemap', $bcfxml->{sourcemap}{maps}); } } # LABELALPHA TEMPLATE foreach my $t (@{$bcfxml->{labelalphatemplate}}) { my $latype = $t->{type}; if ($latype eq 'global') { Biber::Config->setblxoption('labelalphatemplate', $t); } else { Biber::Config->setblxoption('labelalphatemplate', $t, 'PER_TYPE', $latype); } } # INHERITANCE schemes for crossreferences (always global) Biber::Config->setblxoption('inheritance', $bcfxml->{inheritance}); # NOINIT # Make the data structure look like the biber config file structure # "value" is forced to arrays for other elements so we extract # the first element here as they will always be only length=1 my $noinit; foreach my $ni (@{$bcfxml->{noinits}{noinit}}) { push @$noinit, { value => $ni->{value}[0]}; } # There is a default so don't set this option if nothing is in the .bcf Biber::Config->setoption('noinit', $noinit) if $noinit; # NOSORT # Make the data structure look like the biber config file structure # "field" and "value" are forced to arrays for other elements so we extract # the first element here as they will always be only length=1 my $nosort; foreach my $ns (@{$bcfxml->{nosorts}{nosort}}) { push @$nosort, { name => $ns->{field}[0], value => $ns->{value}[0]}; } # There is a default so don't set this option if nothing is in the .bcf Biber::Config->setoption('nosort', $nosort) if $nosort; # SORTING # sorting excludes foreach my $sex (@{$bcfxml->{sorting}{sortexclusion}}) { my $excludes; foreach my $ex (@{$sex->{exclusion}}) { $excludes->{$ex->{content}} = 1; } Biber::Config->setblxoption('sortexclusion', $excludes, 'PER_TYPE', $sex->{type}); } # presort defaults foreach my $presort (@{$bcfxml->{sorting}{presort}}) { # Global presort default unless (exists($presort->{type})) { Biber::Config->setblxoption('presort', $presort->{content}); } # Per-type default else { Biber::Config->setblxoption('presort', $presort->{content}, 'PER_TYPE', $presort->{type}); } } my $sorting = _parse_sort($bcfxml->{sorting}); Biber::Config->setblxoption('sorting', $sorting); # DATAMODEL schema (always global) Biber::Config->setblxoption('datamodel', $bcfxml->{datamodel}); # SECTIONS # This is also where we set data files as these are associated with a bib section # Data sources my %bibdatasources = (); foreach my $data (@{$bcfxml->{bibdata}}) { foreach my $datasource (@{$data->{datasource}}) { unless (first {$_->{type} eq $datasource->{type} and $_->{datatype} eq $datasource->{datatype} and $_->{name} eq $datasource->{content}} @{$bibdatasources{$data->{section}[0]}}) { push @{$bibdatasources{$data->{section}[0]}}, { type => $datasource->{type}, name => $datasource->{content}, datatype => $datasource->{datatype} }; } } } # Be friendly to latexmk etc. unless (%bibdatasources) { biber_warn("No data sources defined!"); exit EXIT_OK; } my $key_flag = 0; my $bib_sections = new Biber::Sections; SECTION: foreach my $section (@{$bcfxml->{section}}) { my $bib_section; my $secnum = $section->{number}; # Can be multiple section 0 entries and so re-use that section object if it exists if (my $existing_section = $bib_sections->get_section($secnum)) { $bib_section = $existing_section; } else { $bib_section = new Biber::Section('number' => $secnum); } # Set the data files for the section unless we've already done so # (for example, for multiple section 0 entries) $bib_section->set_datasources($bibdatasources{$secnum}) unless $bib_section->get_datasources; my @keys = (); foreach my $keyc (@{$section->{citekey}}) { my $key = biber_decode_utf8($keyc->{content});# Unicode NFD boundary # Stop reading citekeys if we encounter "*" as a citation as this means # "all keys" if ($key eq '*') { $bib_section->set_allkeys(1); # Normalise - when allkeys is true don't need citekeys - just in case someone # lists "*" and also some other citekeys $bib_section->del_citekeys; $key_flag = 1; # There is at least one key, used for error reporting below $logger->info("Using all citekeys in bib section " . $secnum); $bib_sections->add_section($bib_section); next SECTION; } elsif (not Biber::Config->get_seenkey($key, $secnum)) { # Dynamic set definition # Save dynamic key -> member keys mapping for set entry auto creation later if (exists($keyc->{type}) and $keyc->{type} eq 'set') { $bib_section->set_dynamic_set($key, split /\s*,\s*/, $keyc->{members}); push @keys, $key; $key_flag = 1; # There is at least one key, used for error reporting below } else { # Set order information - there is no order on dynamic key defs above # as they are a definition, not a cite Biber::Config->set_keyorder($secnum, $key, $keyc->{order}); push @keys, $key; $key_flag = 1; # There is at least one key, used for error reporting below Biber::Config->incr_seenkey($key, $secnum); } } } unless ($bib_section->is_allkeys) { $logger->info('Found ', $#keys+1 , " citekeys in bib section $secnum") } if (Biber::Config->getoption('debug')) { my @debug_keys = sort @keys; unless ($bib_section->is_allkeys) { $logger->debug("The citekeys for section $secnum are: ", join(', ', @debug_keys), "\n"); } } $bib_section->add_citekeys(@keys); $bib_sections->add_section($bib_section); } # Add the Biber::Sections object to the Biber object $self->{sections} = $bib_sections; # Read sortlists my $sortlists = new Biber::SortLists; foreach my $list (@{$bcfxml->{sortlist}}) { my $ltype = $list->{type}; my $llabel = $list->{label}; my $lsection = $list->{section}[0]; # because "section" needs to be a list elsewhere in XML if (my $l = $sortlists->get_list($lsection, $ltype, $llabel)) { $logger->debug("Section '$ltype' list '$llabel' is repeated for section $lsection - ignoring"); next; } my $seclist = Biber::SortList->new(section => $lsection, label => $llabel); $seclist->set_type($ltype || 'entry'); # lists are entry lists by default foreach my $filter (@{$list->{filter}}) { $seclist->add_filter($filter->{type}, $filter->{content}); } # disjunctive filters foreach my $orfilter (@{$list->{orfilter}}) { $seclist->add_filter('orfilter', { map {$_->{type} => [$_->{content}]} @{$orfilter->{filter}} }); } if (my $sorting = $list->{sorting}) { # can be undef for fallback to global sorting $seclist->set_sortscheme(_parse_sort($sorting)); } else { $seclist->set_sortscheme(Biber::Config->getblxoption('sorting')); } $logger->debug("Adding '$ltype' list '$llabel' for section $lsection"); $sortlists->add_list($seclist); } # Check to make sure that each section has an entry sortlist for global sorting # We have to make sure in case sortcites is used which uses the global order. foreach my $section (@{$bcfxml->{section}}) { my $globalss = Biber::Config->getblxoption('sortscheme'); my $secnum = $section->{number}; unless ($sortlists->get_list($secnum, 'entry', $globalss)) { my $seclist = Biber::SortList->new(section => $secnum, type => 'entry', label => $globalss); $seclist->set_sortscheme(Biber::Config->getblxoption('sorting')); $sortlists->add_list($seclist); } } # Add the Biber::SortLists object to the Biber object $self->{sortlists} = $sortlists; # Warn if there are no citations in any section unless ($key_flag) { biber_warn("The file '$ctrl_file_path' does not contain any citations!"); } # Normalise any UTF-8 encoding string immediately to exactly what we want # We want the strict perl utf8 "UTF-8" normalise_utf8(); # bibtex output when not in tool mode, is essentially entering tool mode but # without allkeys. We are not in tool mode if we are here. We fake tool mode # and then add a special section which contains all cited keys from all sections if (Biber::Config->getoption('output_format') eq 'bibtex') { Biber::Config->setoption('tool' ,1); Biber::Config->setoption('pseudo_tool' ,1); my $bib_section = new Biber::Section('number' => 99999); foreach my $section (@{$self->sections->get_sections}) { $bib_section->add_citekeys($section->get_citekeys); foreach my $ds (@{$section->get_datasources}) { $bib_section->add_datasource($ds); } } $self->sections->add_section($bib_section); # Global sorting in non tool mode bibtex output is citeorder so override the .bcf here Biber::Config->setblxoption('sortscheme', 'none'); my $seclist = Biber::SortList->new(section => 99999, label => Biber::Config->getblxoption('sortscheme')); $seclist->set_type('entry'); # bibtex output in non-tool mode is just citeorder $seclist->set_sortscheme([ [ {}, {'citeorder' => {}} ] ]); $logger->debug("Adding 'entry' list 'none' for pseudo-section 99999"); $self->{sortlists}->add_list($seclist); } return; } =head2 process_setup Place to put misc pre-processing things needed later =cut sub process_setup { my $self = shift; # Make sure there is a default entry list with global sorting for each refsection # Needed in case someone cites entries which are included in no # bibliography as this results in no entry list in the .bcf foreach my $section (@{$self->sections->get_sections}) { my $secnum = $section->number; unless ($self->sortlists->has_lists_of_type_for_section($secnum, 'entry')) { my $dlist = Biber::SortList->new(label => Biber::Config->getblxoption('sortscheme')); $dlist->set_sortscheme(Biber::Config->getblxoption('sorting')); $dlist->set_type('entry'); $dlist->set_section($secnum); $self->sortlists->add_list($dlist); } } # Break data model information up into more processing-friendly formats # for use in verification checks later # This has to be here as opposed to in parse_control() so that it can pick # up user config dm settings Biber::Config->set_dm(Biber::DataModel->new(Biber::Config->getblxoption('datamodel'))); # Force output_safechars flag if output to ASCII and input_encoding is not ASCII if (Biber::Config->getoption('output_encoding') =~ /(?:x-)?ascii/xmsi and Biber::Config->getoption('input_encoding') !~ /(?:x-)?ascii/xmsi) { Biber::Config->setoption('output_safechars', 1); } } =head2 process_setup_tool Place to put misc pre-processing things needed later for tool mode =cut sub process_setup_tool { my $self = shift; Biber::Config->set_dm(Biber::DataModel->new(Biber::Config->getblxoption('datamodel'))); # Force output_safechars flag if output to ASCII and input_encoding is not ASCII if (Biber::Config->getoption('output_encoding') =~ /(?:x-)?ascii/xmsi and Biber::Config->getoption('input_encoding') !~ /(?:x-)?ascii/xmsi) { Biber::Config->setoption('output_safechars', 1); } } =head2 resolve_alias_refs Resolve aliases in xref/crossref/xdata which take keys as values to their real keys We use set_datafield as we are overriding the alias in the datasource =cut sub resolve_alias_refs { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); foreach my $citekey ($section->get_citekeys) { my $be = $section->bibentry($citekey); # XREF if (my $refkey = $be->get_field('xref')) { if (my $realkey = $section->get_citekey_alias($refkey)) { $be->set_datafield('xref', $realkey); } } # CROSSREF if (my $refkey = $be->get_field('crossref')) { if (my $realkey = $section->get_citekey_alias($refkey)) { $be->set_datafield('crossref', $realkey); } } # XDATA if (my $xdata = $be->get_field('xdata')) { my $resolved_keys; foreach my $refkey (@$xdata) { $refkey = $section->get_citekey_alias($refkey) // $refkey; push @$resolved_keys, $refkey; } $be->set_datafield('xdata', $resolved_keys); } } } =head2 process_citekey_aliases Remove citekey aliases from citekeys as they don't point to real entries. =cut sub process_citekey_aliases { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); foreach my $citekey ($section->get_citekeys) { if ($section->get_citekey_alias($citekey)) { $logger->debug("Pruning citekey alias '$citekey' from citekeys"); $section->del_citekey($citekey); } } } =head2 nullable_check Check entries for nullable fields =cut sub nullable_check { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $dm = Biber::Config->get_dm; foreach my $citekey ($section->get_citekeys) { my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); foreach my $f ($be->datafields) { if (is_null($be->get_datafield($f))) { unless ($dm->field_is_nullok($f)) { biber_warn("The field '$f' in entry '$citekey' cannot be null, deleting it"); $be->del_field($f); } } } } } =head2 instantiate_dynamic This instantiates any dynamic entries so that they are available for processing later on. This has to be done before most all other processing so that when we call $section->bibentry($key), as we do many times in the code, we don't die because there is a key but no Entry object. =cut sub instantiate_dynamic { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); $logger->debug("Creating dynamic entries (sets/related) for section $secnum"); # Instantiate any dynamic set entries before we do anything else foreach my $dset (@{$section->dynamic_set_keys}) { my @members = $section->get_dynamic_set($dset); # Resolve any aliases in the members my @realmems; foreach my $mem (@members) { push @realmems, $section->get_citekey_alias($mem) // $mem; } @members = @realmems; $section->set_dynamic_set($dset, @realmems); my $be = new Biber::Entry; $be->set_field('entrytype', 'set'); $be->set_field('entryset', [ @members ]); $be->set_field('citekey', $dset); $be->set_field('datatype', 'dynamic'); $section->bibentries->add_entry($dset, $be); $logger->debug("Created dynamic set entry '$dset' in section $secnum"); # Save graph information if requested if (Biber::Config->getoption('output_format') eq 'dot') { foreach my $m (@members) { Biber::Config->set_graph('set', $dset, $m); } } # Setting dataonly for members is handled by process_sets() } # Instantiate any related entry clones we need foreach my $citekey ($section->get_citekeys) { my $be = $section->bibentry($citekey); $be->relclone; } return; } =head2 resolve_xdata Resolve xdata entries =cut sub resolve_xdata { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); $logger->debug("Resolving XDATA entries for section $secnum"); # We are not looping over citekeys here as XDATA entries are not cited. # They may have been added to the section as entries, however. foreach my $be ($section->bibentries->entries) { # Don't directly resolve XDATA entrytypes - this is done recursively in the Entry method # Otherwise, we will die on loops etc. for XDATA entries which are never referenced from # any cited entry next if $be->get_field('entrytype') eq 'xdata'; next unless my $xdata = $be->get_field('xdata'); $be->resolve_xdata($xdata); } } =head2 cite_setmembers Promotes set member to cited status =cut sub cite_setmembers { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); $logger->debug("Adding set members to citekeys for section $secnum"); foreach my $citekey ($section->get_citekeys) { my $be = $section->bibentry($citekey); # promote indirectly cited inset set members to fully cited entries if ($be->get_field('entrytype') eq 'set' and $be->get_field('entryset')) { my $inset_keys = $be->get_field('entryset'); my $realmems; foreach my $mem (@$inset_keys) { push @$realmems, $section->get_citekey_alias($mem) // $mem; } $inset_keys = $realmems; $be->set_datafield('entryset', $inset_keys); foreach my $inset_key (@$inset_keys) { $logger->debug("Adding set member '$inset_key' to the citekeys (section $secnum)"); $section->add_citekeys($inset_key); # Save graph information if requested if (Biber::Config->getoption('output_format') eq 'dot') { Biber::Config->set_graph('set', $citekey, $inset_key); } } # automatically crossref for the first set member using plain set inheritance $be->set_inherit_from($section->bibentry($inset_keys->[0]), $section); # warning for the old pre-Biber way of doing things if ($be->get_field('crossref')) { biber_warn("Field 'crossref' is no longer needed in set entries in Biber - ignoring in entry '$citekey'", $be); $be->del_field('crossref'); } } } } =head2 process_interentry $biber->process_interentry This does several things: 1. Records the set information for use later 2. Ensures proper inheritance of data from cross-references. 3. Ensures that crossrefs/xrefs that are directly cited or cross-referenced at least mincrossrefs times are included in the bibliography. =cut sub process_interentry { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); $logger->debug("Processing explicit and implicit crossrefs for section $secnum"); foreach my $citekey ($section->get_citekeys) { my $be = $section->bibentry($citekey); my $refkey; # Record set information # It's best to do this in the loop here as every entry needs the information # from all other entries in process_sets() if ($be->get_field('entrytype') eq 'set') { my $entrysetkeys = $be->get_field('entryset'); foreach my $member (@$entrysetkeys) { Biber::Config->set_set_pc($citekey, $member); Biber::Config->set_set_cp($member, $citekey); } } # Loop over cited keys and count the cross/xrefs # Can't do this when parsing entries as this would count them # for potentially uncited children if ($refkey = $be->get_field('xref') or $refkey = $be->get_field('crossref')) { $logger->debug("Incrementing cross/xrefkey count for entry '$refkey' via entry '$citekey'"); Biber::Config->incr_crossrefkey($refkey); } # Record xref inheritance for graphing if required if (Biber::Config->getoption('output_format') eq 'dot' and my $xref = $be->get_field('xref')) { Biber::Config->set_graph('xref', $citekey, $xref); } # Do crossref inheritance if (my $cr = $be->get_field('crossref')) { # Skip inheritance if we've already done it next if Biber::Config->get_inheritance('crossref', $cr, $be->get_field('citekey')); my $parent = $section->bibentry($cr); $logger->debug("Entry $citekey inheriting fields from parent $cr"); unless ($parent) { biber_warn("Cannot inherit from crossref key '$cr' - does it exist?", $be); } else { $be->inherit_from($parent); } } } # We make sure that crossrefs that are directly cited or cross-referenced # at least $mincrossrefs times are included in the bibliography. foreach my $k ( @{Biber::Config->get_crossrefkeys} ) { # If parent has been crossref'ed more than mincrossref times, upgrade it # to cited crossref status and add it to the citekeys list if (Biber::Config->get_crossrefkey($k) >= Biber::Config->getoption('mincrossrefs')) { $logger->debug("cross/xref key '$k' is cross/xref'ed >= mincrossrefs, adding to citekeys"); $section->add_citekeys($k); } } } =head2 validate_datamodel Validate bib data according to a datamodel Note that we are validating the internal Biber::Entries after they have been created from the datasources so this is datasource neutral, as it should be. It is here to enforce adherence to what biblatex expects. =cut sub validate_datamodel { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $dm = Biber::Config->get_dm; if (Biber::Config->getoption('validate_datamodel')) { foreach my $citekey ($section->get_citekeys) { my $be = $section->bibentry($citekey); my $citekey = $be->get_field('citekey'); my $et = $be->get_field('entrytype'); my $ds = $section->get_keytods($citekey); # default entrytype to MISC type if not a known type unless ($dm->is_entrytype($et)) { biber_warn("Datamodel: Entry '$citekey' ($ds): Invalid entry type '" . $be->get_field('entrytype') . "' - defaulting to 'misc'", $be); $be->set_field('entrytype', 'misc'); $et = 'misc'; # reset this too } # Are all fields valid fields? # Each field must be: # * Valid because it's allowed for "ALL" entrytypes OR # * Valid field for the specific entrytype OR # * Valid because entrytype allows "ALL" fields foreach my $ef ($be->datafields) { unless ($dm->is_field_for_entrytype($et, $ef)) { biber_warn("Datamodel: Entry '$citekey' ($ds): Invalid field '$ef' for entrytype '$et'", $be); } } # Mandatory constraints foreach my $warning ($dm->check_mandatory_constraints($be)) { biber_warn($warning, $be); } # Conditional constraints foreach my $warning ($dm->check_conditional_constraints($be)) { biber_warn($warning, $be); } # Data constraints foreach my $warning ($dm->check_data_constraints($be)) { biber_warn($warning, $be); } } } } =head2 process_entries_pre Main processing operations, to generate metadata and entry information This method is automatically called by C. Here we generate the "namehash" and the strings for "labelname", "labelyear", "labelalpha", "sortstrings", etc. Runs prior to uniqueness processing =cut sub process_entries_pre { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); foreach my $citekey ( $section->get_citekeys ) { $logger->debug("Postprocessing entry '$citekey' from section $secnum (before uniqueness)"); # process set entries $self->process_sets($citekey); # generate labelname name $self->process_labelname($citekey); # generate labeldate name $self->process_labeldate($citekey); # generate labeltitle name $self->process_labeltitle($citekey); # generate fullhash $self->process_fullhash($citekey); # push entry-specific presort fields into the presort state $self->process_presort($citekey); } $logger->debug("Finished processing entries in section $secnum (before uniqueness)"); return; } =head2 process_entries_post More processing operations, to generate things which require uniqueness information like namehash Runs after uniqueness processing =cut sub process_entries_post { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); foreach my $citekey ( $section->get_citekeys ) { $logger->debug("Postprocessing entry '$citekey' from section $secnum (after uniqueness)"); # generate labelalpha information $self->process_labelalpha($citekey); # generate information for tracking extraalpha $self->process_extraalpha($citekey); # generate information for tracking extrayear $self->process_extrayear($citekey); # generate information for tracking extratitle $self->process_extratitle($citekey); # generate information for tracking extratitleyear $self->process_extratitleyear($citekey); # generate information for tracking singletitle $self->process_singletitle($citekey); # generate namehash $self->process_namehash($citekey); # generate per-name hashes $self->process_pername_hashes($citekey); } $logger->debug("Finished processing entries in section $secnum (after uniqueness)"); return; } =head2 process_singletitle Track seen work combination for generation of singletitle =cut sub process_singletitle { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); $logger->trace("Creating singletitle information for '$citekey'"); # Use labelname to generate this, if there is one ... my $identifier; if (my $lni = $be->get_labelname_info) { $identifier = $self->_getnamehash_u($citekey, $be->get_field($lni->{field}, $lni->{form}, $lni->{lang})); } # ... otherwise use labeltitle elsif (my $lti = $be->get_labeltitle_info) { $identifier = $be->get_field($lti->{field}, $lti->{form}, $lti->{lang}); } # Don't generate this information for entries with no labelname or labeltitle # as it would make no sense if ($identifier and Biber::Config->getblxoption('singletitle', $bee)) { Biber::Config->incr_seenwork($identifier); $logger->trace("Setting seenwork for '$citekey' to '$identifier'"); $be->set_field('seenwork', $identifier); } return; } =head2 process_extrayear Track labelname/year combination for generation of extrayear =cut sub process_extrayear { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); # Generate labelname/year combination for tracking extrayear # * If there is no labelname to use, use empty string # * If there is no labelyear to use: # * If there is no pubstate to use, use empty string otherwise use pubstate key # * Don't increment the seen_nameyear count if either name or year string is empty # (see code in incr_seen_nameyear method). # * Don't increment if skiplab is set if (Biber::Config->getblxoption('labeldate', $bee)) { if (Biber::Config->getblxoption('skiplab', $bee, $citekey)) { return; } $logger->trace("Creating extrayear information for '$citekey'"); my $name_string = ''; if (my $lni = $be->get_labelname_info) { $name_string = $self->_getnamehash_u($citekey, $be->get_field($lni->{field}, $lni->{form}, $lni->{lang})); } # extrayear takes into account the labelyear which can be a range my $year_string = $be->get_field('labelyear') || $be->get_field('year') || ''; my $nameyear_string = "$name_string,$year_string"; $logger->trace("Setting nameyear to '$nameyear_string' for entry '$citekey'"); $be->set_field('nameyear', $nameyear_string); $logger->trace("Incrementing nameyear for '$name_string'"); Biber::Config->incr_seen_nameyear($name_string, $year_string); } return; } =head2 process_extratitle Track labelname/labeltitle combination for generation of extratitle =cut sub process_extratitle { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); # Generate labelname/labeltitle combination for tracking extratitle # * If there is no labelname to use, use empty string # * If there is no labeltitle to use, use empty string # * Don't increment if skiplab is set # This is different from extrayear in that we do track the information # if the labelname is empty as titles are much more unique than years if (Biber::Config->getblxoption('labeltitle', $bee)) { if (Biber::Config->getblxoption('skiplab', $bee, $citekey)) { return; } $logger->trace("Creating extratitle information for '$citekey'"); my $name_string = ''; if (my $lni = $be->get_labelname_info) { $name_string = $self->_getnamehash_u($citekey, $be->get_field($lni->{field}, $lni->{form}, $lni->{lang})); } my $lti = $be->get_labeltitle_info; my $title_string = $be->get_field($lti->{field}, $lti->{form}, $lti->{lang}) // ''; my $nametitle_string = "$name_string,$title_string"; $logger->trace("Setting nametitle to '$nametitle_string' for entry '$citekey'"); $be->set_field('nametitle', $nametitle_string); $logger->trace("Incrementing nametitle for '$name_string'"); Biber::Config->incr_seen_nametitle($name_string, $title_string); } return; } =head2 process_extratitleyear Track labeltitle/labelyear combination for generation of extratitleyear =cut sub process_extratitleyear { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); # Generate labeltitle/labelyear combination for tracking extratitleyear # * If there is no labeltitle to use, use empty string # * If there is no labelyear to use, use empty string # * Don't increment the seen_titleyear count if the labeltitle field is empty # (see code in incr_seen_titleyear method). # * Don't increment if skiplab is set if (Biber::Config->getblxoption('labeltitleyear', $bee)) { if (Biber::Config->getblxoption('skiplab', $bee, $citekey)) { return; } $logger->trace("Creating extratitleyear information for '$citekey'"); my $lti = $be->get_labeltitle_info; my $title_string = $be->get_field($lti->{field}, $lti->{form}, $lti->{lang}) // ''; # Takes into account the labelyear which can be a range my $year_string = $be->get_field('labelyear') || $be->get_field('year') || ''; my $titleyear_string = "$title_string,$year_string"; $logger->trace("Setting titleyear to '$titleyear_string' for entry '$citekey'"); $be->set_field('titleyear', $titleyear_string); $logger->trace("Incrementing titleyear for '$title_string'"); Biber::Config->incr_seen_titleyear($title_string, $year_string); } return; } =head2 process_sets Postprocess set entries Checks for common set errors and enforces 'dataonly' for set members =cut sub process_sets { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); if (my @entrysetkeys = Biber::Config->get_set_children($citekey)) { # Enforce Biber parts of virtual "dataonly" for set members # Also automatically create an "entryset" field for the members foreach my $member (@entrysetkeys) { process_entry_options($member, [ 'skiplab', 'skiplos', 'uniquename=0', 'uniquelist=0' ]); my $me = $section->bibentry($member); if ($me->get_field('entryset')) { biber_warn("Field 'entryset' is no longer needed in set member entries in Biber - ignoring in entry '$member'", $me); $me->del_field('entryset'); } # This ends up setting \inset{} in the bbl $me->set_field('entryset', [ $citekey ]); } unless (@entrysetkeys) { biber_warn("No entryset found for entry $citekey of type 'set'", $be); } } # Also set this here for any non-set keys which are in a set and which haven't # had skips set by being seen as a member of that set yet else { if (Biber::Config->get_set_parents($citekey)) { process_entry_options($citekey, [ 'skiplab', 'skiplos', 'uniquename=0', 'uniquelist=0' ]); } } } =head2 process_labelname Generate labelname information. =cut sub process_labelname { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); my $lnamespec = Biber::Config->getblxoption('labelnamespec', $bee); my $dm = Biber::Config->get_dm; # prepend any per-entry labelname specification to the labelnamespec my $tmp_lns; if (my $lnfield = Biber::Config->getblxoption('labelnamefield', undef, $citekey)) { $tmp_lns->{content} = $lnfield; } if (my $lnform = Biber::Config->getblxoption('labelnameform', undef, $citekey)) { $tmp_lns->{form} = $lnform; } if (my $lnlang = Biber::Config->getblxoption('labelnamelang', undef, $citekey)) { $tmp_lns->{lang} = $lnlang; } if ($tmp_lns) { unshift @$lnamespec, $tmp_lns; } # First we set the normal labelname name foreach my $h_ln ( @$lnamespec ) { my $lnameopt; my $ln = $h_ln->{content}; if ( $ln =~ /\Ashort(\X+)\z/xms ) { $lnameopt = $1; } else { $lnameopt = $ln; } unless (first {$ln eq $_} @{$dm->get_fields_of_type('list', 'name')}) { biber_warn("Labelname candidate '$ln' is not a name field - skipping"); next; } # If there is a biblatex option which controls the use of this labelname info, check it if ($CONFIG_SCOPE_BIBLATEX{"use$lnameopt"} and not Biber::Config->getblxoption("use$lnameopt", $bee, $citekey)) { next; } if ($be->get_field($ln, $h_ln->{form}, $h_ln->{lang})) { $be->set_labelname_info({'field' => $ln, 'form' => $h_ln->{form}, 'lang' => $h_ln->{lang}}); last; } } # Then we loop again to set the labelname name for the fullhash generation code # This is because fullhash generation ignores SHORT* fields (section 4.2.4.1, BibLaTeX # manual) foreach my $h_ln ( @$lnamespec ) { my $ln = $h_ln->{content}; if ( $ln =~ /\Ashort(.+)\z/xms ) { next; } # We have already warned about this above unless (first {$ln eq $_} @{$dm->get_fields_of_type('list', 'name')}) { next; } # If there is a biblatex option which controls the use of this labelname info, check it if ($CONFIG_SCOPE_BIBLATEX{"use$ln"} and not Biber::Config->getblxoption("use$ln", $bee, $citekey)) { next; } if ($be->get_field($ln, $h_ln->{form}, $h_ln->{lang})) { $be->set_labelnamefh_info({'field' => $ln, 'form' => $h_ln->{form}, 'lang' => $h_ln->{lang}}); last; } } # Set the actual labelname # Note this is not set with form and lang, as it is now resolved and the information # on what form and lang were used to resolve it are in labelname_info if (my $lni = $be->get_labelname_info) { $be->set_field('labelname', $be->get_field($lni->{field}, $lni->{form}, $lni->{lang})); } else { $logger->debug("Could not determine the labelname of entry $citekey"); } } =head2 process_labeldate Generate labeldate information =cut sub process_labeldate { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); my $dm = Biber::Config->get_dm; if (Biber::Config->getblxoption('labeldate', $bee)) { if (Biber::Config->getblxoption('skiplab', $bee, $citekey)) { return; } my $pseudodate; my $ldatespec = Biber::Config->getblxoption('labeldatespec', $bee); foreach my $h_ly (@$ldatespec) { my $ly = $h_ly->{content}; if ($h_ly->{'type'} eq 'field') { # labeldate field my $ldy; my $ldm; my $ldd; my $datetype; if ($dm->field_is_datatype('date', $ly)) { # resolve dates $datetype = $ly =~ s/date\z//xmsr; $ldy = $datetype . 'year'; $ldm = $datetype . 'month'; $ldd = $datetype . 'day'; } else { $ldy = $ly; # labelyear can be a non-date field so make a pseudo-year $pseudodate = 1; } if ($be->get_field($ldy)) { # did we find a labeldate? # set source to field or date field prefix for a real date field $be->set_labeldate_info({'field' => { 'year' => $ldy, 'month' => $ldm, 'day' => $ldd, 'source' => $pseudodate ? $ldy : $datetype }}); last; } } elsif ($h_ly->{'type'} eq 'string') { # labelyear fallback string $be->set_labeldate_info({'string' => $ly}); last; } } # Construct labelyear, labelmonth, labelday # Might not have been set due to skiplab/dataonly if (my $ldi = $be->get_labeldate_info) { if (my $df = $ldi->{field}) { # set labelyear to a field value $be->set_field('labelyear', $be->get_field($df->{year})); $be->set_field('labelmonth', $be->get_field($df->{month})) if $df->{month}; $be->set_field('labelday', $be->get_field($df->{day})) if $df->{day}; $be->set_field('datelabelsource', $df->{source}); # ignore endyear if it's the same as year my ($ytype) = $df->{year} =~ /\A(\X*)year\z/xms; $ytype = $ytype // ''; # Avoid undef warnings since no match above can make it undef # endyear can be null if (is_def_and_notnull($be->get_field($ytype . 'endyear')) and ($be->get_field($df->{year}) ne $be->get_field($ytype . 'endyear'))) { $be->set_field('labelyear', $be->get_field('labelyear') . '\bibdatedash ' . $be->get_field($ytype . 'endyear')); } # pseudodates (field which are not really dates per se) are just years if (not $pseudodate and $be->get_field($ytype . 'endmonth') and ($be->get_field($df->{month}) ne $be->get_field($ytype . 'endmonth'))) { $be->set_field('labelmonth', $be->get_field('labelmonth') . '\bibdatedash ' . $be->get_field($ytype . 'endmonth')); } # pseudodates (field which are not really dates per se) are just years if (not $pseudodate and $be->get_field($ytype . 'endday') and ($be->get_field($df->{day}) ne $be->get_field($ytype . 'endday'))) { $be->set_field('labelday', $be->get_field('labelday') . '\bibdatedash ' . $be->get_field($ytype . 'endday')); } } elsif (my $ys = $ldi->{string}) { # set labelyear to a fallback string $be->set_field('labelyear', $ys); } } else { $logger->debug("labeldate information of entry $citekey is unset"); } } } =head2 process_labeltitle Generate labeltitle Note that this is not conditionalised on the biblatex "labeltitle" as labeltitle should always be output since all standard styles need it. Only extratitle is conditionalised on the biblatex "labeltitle" option. =cut sub process_labeltitle { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); my $ltitlespec = Biber::Config->getblxoption('labeltitlespec', $bee); # prepend any per-entry labeltitle specification to the labeltitlespec my $tmp_lts; if (my $ltfield = Biber::Config->getblxoption('labeltitlefield', undef, $citekey)) { $tmp_lts->{content} = $ltfield; } if (my $ltform = Biber::Config->getblxoption('labeltitleform', undef, $citekey)) { $tmp_lts->{form} = $ltform; } if (my $ltlang = Biber::Config->getblxoption('labeltitlelang', undef, $citekey)) { $tmp_lts->{lang} = $ltlang; } if ($tmp_lts) { unshift @$ltitlespec, $tmp_lts; } foreach my $h_ltn (@$ltitlespec) { my $ltn = $h_ltn->{content}; if (my $lt = $be->get_field($ltn, $h_ltn->{form}, $h_ltn->{lang})) { $be->set_labeltitle_info({'field' => $ltn, 'form' => $h_ltn->{form}, 'lang' => $h_ltn->{lang}}); $be->set_field('labeltitle', $lt); last; } $logger->debug("labeltitle information of entry $citekey is unset"); } } =head2 process_fullhash Generate fullhash =cut sub process_fullhash { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); # fullhash is generated from the labelname but ignores SHORT* fields and # max/mincitenames settings if (my $lnfhi = $be->get_labelnamefh_info) { if (my $lnfh = $be->get_field($lnfhi->{field}, $lnfhi->{form}, $lnfhi->{lang})) { $be->set_field('fullhash', $self->_getfullhash($citekey, $lnfh)); } } return; } =head2 process_namehash Generate namehash =cut sub process_namehash { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); # namehash is generated from the labelname if (my $lni = $be->get_labelname_info) { if (my $ln = $be->get_field($lni->{field}, $lni->{form}, $lni->{lang})) { $be->set_field('namehash', $self->_getnamehash($citekey, $ln)); } } return; } =head2 process_pername_hashes Generate per_name_hashes =cut sub process_pername_hashes { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); my $dm = Biber::Config->get_dm; # Generate hashes for all forms and langs N: foreach my $pn (@{$dm->get_fields_of_type('list', 'name')}) { foreach my $form ($be->get_field_form_names($pn)) { foreach my $lang ($be->get_field_form_lang_names($pn, $form)) { my $names = $be->get_field($pn, $form, $lang) or next N; foreach my $n (@{$names->names}) { $n->set_hash($self->_genpnhash($citekey, $n)); } } } } return; } =head2 process_visible_names Generate the visible name information. This is used in various places and it is useful to have it generated in one place. =cut sub process_visible_names { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $dm = Biber::Config->get_dm; foreach my $citekey ( $section->get_citekeys ) { $logger->debug("Postprocessing visible names for key '$citekey'"); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); my $maxcn = Biber::Config->getblxoption('maxcitenames', $bee, $citekey); my $mincn = Biber::Config->getblxoption('mincitenames', $bee, $citekey); my $maxbn = Biber::Config->getblxoption('maxbibnames', $bee, $citekey); my $minbn = Biber::Config->getblxoption('minbibnames', $bee, $citekey); my $maxan = Biber::Config->getblxoption('maxalphanames', $bee, $citekey); my $minan = Biber::Config->getblxoption('minalphanames', $bee, $citekey); foreach my $n (@{$dm->get_fields_of_type('list', 'name')}) { next unless my $names = $be->get_field($n); my $count = $names->count_names; my $visible_names_cite; my $visible_names_bib; my $visible_names_alpha; # Cap min*names for this entry at $count. Why? Because imagine we have this: # # John Smith and Bill Jones # # and mincitenames=3. Then visibility will be set to 3 but there aren't 3 names to # get information from so looping over the visibility count would cause name methods # to operate on undef at index 3 and die my $l_mincn = $count < $mincn ? $count : $mincn; my $l_minbn = $count < $minbn ? $count : $minbn; my $l_minan = $count < $minan ? $count : $minan; # If name list was truncated in bib with "and others", this overrides maxcitenames my $morenames = $names->get_morenames ? 1 : 0; # max/minalphanames doesn't care about uniquelist - labels are just labels if ( $morenames or $count > $maxan ) { $visible_names_alpha = $l_minan; } else { $visible_names_alpha = $count; } # max/mincitenames if ( $morenames or $count > $maxcn ) { # Visibiliy to the uniquelist point if uniquelist is requested # We know at this stage that if uniquelist is set, there are more than maxcitenames # names. We also know that uniquelist > mincitenames because it is a further disambiguation # on top of mincitenames so can't be less as you can't disambiguate by losing information $visible_names_cite = $names->get_uniquelist // $l_mincn; } else { # visibility is simply the full list $visible_names_cite = $count; } # max/minbibnames if ( $morenames or $count > $maxbn ) { # Visibiliy to the uniquelist point if uniquelist is requested # We know at this stage that if uniquelist is set, there are more than maxbibnames # names. We also know that uniquelist > mincitenames because it is a further disambiguation # on top of mincitenames so can't be less as you can't disambiguate by losing information $visible_names_bib = $names->get_uniquelist // $l_minbn; } else { # visibility is simply the full list $visible_names_bib = $count; } $logger->trace("Setting visible names (cite) for key '$citekey' to '$visible_names_cite'"); $logger->trace("Setting visible names (bib) for key '$citekey' to '$visible_names_bib'"); $logger->trace("Setting visible names (alpha) for key '$citekey' to '$visible_names_alpha'"); # Need to set these on all name forms foreach my $form ($be->get_field_form_names($n)) { my $ns = $be->get_field($n, $form); $ns->set_visible_cite($visible_names_cite); $ns->set_visible_bib($visible_names_bib); $ns->set_visible_alpha($visible_names_alpha); } } } } =head2 process_labelalpha Generate the labelalpha and also the variant for sorting =cut sub process_labelalpha { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); # Don't add a label if skiplab is set for entry if (Biber::Config->getblxoption('skiplab', $bee, $citekey)) { return; } if ( my $la = Biber::Config->getblxoption('labelalpha', $be->get_field('entrytype')) ) { my $label; my $sortlabel; ( $label, $sortlabel ) = @{ $self->_genlabel($citekey) }; $be->set_field('labelalpha', $label); $be->set_field('sortlabelalpha', $sortlabel); } } =head2 process_extraalpha Generate the extraalpha information =cut sub process_extraalpha { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); if (Biber::Config->getblxoption('labelalpha', $be->get_field('entrytype'))) { if (my $la = $be->get_field('labelalpha')) { Biber::Config->incr_la_disambiguation($la); } } } =head2 process_presort Put presort fields for an entry into the main Biber bltx state so that it is all available in the same place since this can be set per-type and globally too. =cut sub process_presort { my $self = shift; my $citekey = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); # We are treating presort as an option as it can be set per-type and globally too if (my $ps = $be->get_field('presort')) { Biber::Config->setblxoption('presort', $ps, 'PER_ENTRY', $citekey); } } =head2 process_lists Sort and filter lists for a section =cut sub process_lists { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); foreach my $list (@{$self->sortlists->get_lists_for_section($secnum)}) { my $llabel = $list->get_label; my $ltype = $list->get_type; # Last-ditch fallback in case we still don't have a sorting spec $list->set_sortscheme(Biber::Config->getblxoption('sorting')) unless $list->get_sortscheme; $list->set_keys([ $section->get_citekeys ]); $logger->debug("Populated '$ltype' list '$llabel' in section $secnum with keys: " . join(', ', $list->get_keys)); # Now we check the sorting cache to see if we already have results # for this scheme since sorting is computationally expensive. # We know the keys are the same as we just set them # to a copy of the section citekeys above. If the scheme is the same # as a previous sort then the results have to also be the same so inherit # the results which are normally set by sorting: # # * sorted keys # * sortinit data # * extra* data my $cache_flag = 0; $logger->debug("Checking sorting cache for list '$llabel'"); foreach my $cacheitem (@{$section->get_sort_cache}) { if (Compare($list->get_sortscheme, $cacheitem->[0])) { $logger->debug("Found sorting cache entry for '$llabel'"); $logger->trace("Sorting list cache for list '$llabel':\n-------------------\n" . Data::Dump::pp($list->get_sortscheme) . "\n-------------------\n"); $list->set_keys($cacheitem->[1]); $list->set_sortinitdata($cacheitem->[2]); $list->set_extrayeardata($cacheitem->[3]); $list->set_extraalphadata($cacheitem->[4]); $cache_flag = 1; last; } } unless ($cache_flag) { $logger->debug("No sorting cache entry for '$llabel'"); # Sorting $self->generate_sortinfo($list); # generate the sort information $self->sort_list($list); # sort the list $self->generate_extra($list) unless Biber::Config->getoption('tool'); # generate the extra* fields # Cache the results $logger->debug("Adding sorting cache entry for '$llabel'"); $section->add_sort_cache($list->get_listdata); } # Filtering # This is not really used - filtering is more efficient to do on the biblatex # side since we are filtering afer sorting anyway. It is used to provide # a field=shorthand filter for type=shorthand lists though. if (my $filters = $list->get_filters) { my $flist = []; KEYLOOP: foreach my $k ($list->get_keys) { # Filter out skiplos entries as a special case in 'shorthand' type lists if ($list->get_type eq 'shorthand') { next if Biber::Config->getblxoption('skiplos', $section->bibentry($k)->get_field('entrytype'), $k); } $logger->debug("Checking key '$k' in list '$llabel' against list filters"); my $be = $section->bibentry($k); foreach my $t (keys %$filters) { my $fs = $filters->{$t}; # Filter disjunction is ok if any of the checks are ok, hence the grep() if ($t eq 'orfilter') { next KEYLOOP unless grep {check_list_filter($k, $_, $fs->{$_}, $be)} keys %$fs; } else { next KEYLOOP unless check_list_filter($k, $t, $fs, $be); } } push @$flist, $k; } $logger->debug("Keys after filtering list '$llabel' in section $secnum: " . join(', ', @$flist)); $list->set_keys($flist); # Now save the sorted list in the list object } } return; } =head2 check_list_filter Run an entry through a list filter. Returns a boolean. =cut sub check_list_filter { my ($k, $t, $fs, $be) = @_; $logger->debug("Checking key '$k' against filter '$t=" . join(',', @$fs) . "'"); if ($t eq 'type') { return 0 unless grep {$be->get_field('entrytype') eq $_} @$fs; } elsif ($t eq 'nottype') { return 0 if grep {$be->get_field('entrytype') eq $_} @$fs; } elsif ($t eq 'subtype') { return 0 unless grep {$be->field_exists('entrysubtype') and $be->get_field('entrysubtype') eq $_} @$fs; } elsif ($t eq 'notsubtype') { return 0 if grep {$be->field_exists('entrysubtype') and $be->get_field('entrysubtype') eq $_} @$fs; } elsif ($t eq 'keyword') { return 0 unless grep {$be->has_keyword($_)} @$fs; } elsif ($t eq 'notkeyword') { return 0 if grep {$be->has_keyword($_)} @$fs; } elsif ($t eq 'field') { return 0 unless grep {$be->field_exists($_)} @$fs; } elsif ($t eq 'notfield') { return 0 if grep {$be->field_exists($_)} @$fs; } return 1; } =head2 generate_sortinfo Generate information for sorting =cut sub generate_sortinfo { my $self = shift; my $list = shift; my $sortscheme = $list->get_sortscheme; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); foreach my $key ($list->get_keys) { $self->_generatesortinfo($key, $list, $sortscheme); } return; } =head2 uniqueness Generate the uniqueness information needed when creating .bbl =cut sub uniqueness { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); # Generate uniqueness information according to this algorithm: # 1. Generate uniquename if uniquename option is set # 2. if (uniquelist has never run before OR step 1 changed any uniquename values) { # goto step 3 # } else { return } # 3. Completely regenerate uniquelist if uniquelist option is set # 4. if (step 3 changed any uniquelist values) { # goto step 1 # } else { return } # uniquelist can never shorten to a list shorter than maxcitenames because: # * Shortening a list can't make it unique # * You can't lengthen it if the list is shorter than maxcitenames because there # is no more information to add that you don't already have. # uniquelist cannot be less than mincitenames as the list is either unambiguous # at mincitenames or it isn't and uniquelist needs more information by adding items # Set a flag for first uniquelist pass. This is a special case as we always want to run # at least one uniquelist pass if requested, regardless of unul_done global flag. my $first_ul_pass = 1; # Generate uniquename information, if requested while ('true') { unless (Biber::Config->get_unul_done) { Biber::Config->set_unul_changed(0); # reset state for global unul changed flag $self->create_uniquename_info; $self->generate_uniquename; } else { last; # uniquename/uniquelist disambiguation is finished as nothing changed } # Generate uniquelist information, if requested # Always run uniquelist at least once, if requested if ($first_ul_pass or not Biber::Config->get_unul_done) { Biber::Config->set_unul_changed(0); # reset state for global unul changed flag $first_ul_pass = 0; # Ignore special case when uniquelist has run once $self->create_uniquelist_info; $self->generate_uniquelist; } else { last; # uniquename/uniquelist disambiguation is finished as nothing changed } } return; } =head2 create_uniquename_info Gather the uniquename information as we look through the names What is happening in here is the following: We are registering the number of occurences of each name, name+init and fullname within a specific context. For example, the context is "global" with uniquename < 5 and "name list" for uniquename=5 or 6. The keys we store to count this are the most specific information for the context, so, for uniquename < 5, this is the full name and for uniquename=5 or 6, this is the complete list of full names. These keys have values in a hash which are ignored. They serve only to accumulate repeated occurences with the context and we don't care about this and so the values are a useful sinkhole for such repetition. For example, if we find in the global context a lastname "Smith" in two different entries under the same form "Alan Smith", the data structure will look like: {Smith}->{global}->{Alan Smith} = 2 We don't care about the value as this means that there are 2 "Alan Smith"s in the global context which need disambiguating identically anyway. So, we just count the keys for the lastname "Smith" in the global context to see how ambiguous the lastname itself is. This would be "1" and so "Alan Smith" would get uniquename=0 because it's unambiguous as just "Smith". The same goes for "minimal" list context disambiguation for uniquename=5 or 6. For example, if we had the lastname "Smith" to disambiguate in two entries with labelname "John Smith and Alan Jones", the data structure would look like: {Smith}->{Smith+Jones}->{John Smith+Alan Jones} = 2 Again, counting the keys of the context for the lastname gives us "1" which means we have uniquename=0 for "John Smith" in both entries because it's the same list. This also works for repeated names in the same list "John Smith and Bert Smith". Disambiguating "Smith" in this: {Smith}->{Smith+Smith}->{John Smith+Bert Smith} = 2 So both "John Smith" and "Bert Smith" in this entry get uniquename=0 (of course, as long as there are no other "X Smith and Y Smith" entries where X != "John" or Y != "Bert"). =cut sub create_uniquename_info { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $bibentries = $section->bibentries; # Reset uniquename information as we have to generate it # again because uniquelist information might have changed Biber::Config->reset_uniquenamecount; foreach my $citekey ( $section->get_citekeys ) { my $be = $bibentries->entry($citekey); my $bee = $be->get_field('entrytype'); next unless my $un = Biber::Config->getblxoption('uniquename', $bee, $citekey); $logger->trace("Generating uniquename information for '$citekey'"); if (my $lni = $be->get_labelname_info) { # Set the index limit beyond which we don't look for disambiguating information my $ul = undef; # Not set if (defined($be->get_field($lni->{field}, $lni->{form}, $lni->{lang})->get_uniquelist)) { # If defined, $ul will always be >1, see comment in set_uniquelist() in Names.pm $ul = $be->get_field($lni->{field}, $lni->{form}, $lni->{lang})->get_uniquelist; } my $maxcn = Biber::Config->getblxoption('maxcitenames', $bee, $citekey); my $mincn = Biber::Config->getblxoption('mincitenames', $bee, $citekey); # Note that we don't determine if a name is unique here - # we can't, were still processing entries at this point. # Here we are just recording seen combinations of: # # lastname and how many name context keys contain this (uniquename = 0) # lastnames+initials and how many name context keys contain this (uniquename = 1) # Full name and how many name context keys contain this (uniquename = 2) # # A name context can be either a complete single name or a list of names # depending on whether uniquename=min* or not # # Anything which has more than one combination for both of these would # be uniquename = 2 unless even the full name doesn't disambiguate # and then it is left at uniquename = 0 my $nl = $be->get_field($lni->{field}, $lni->{form}, $lni->{lang}); my $num_names = $nl->count_names; my $names = $nl->names; # If name list was truncated in bib with "and others", this overrides maxcitenames my $morenames = $nl->get_morenames ? 1 : 0; my @truncnames; my @lastnames; my @fullnames; my @initnames; foreach my $name (@$names) { # We need to track two types of uniquename disambiguation here: # # 1. Information to disambiguate visible names from visible names # where "visibility" is governed by uniquelist/max/mincitenames. # This is the actual "uniquename" feature information. # 2. Information to disambiguate all names, regardless of visibility # This is needed for uniquelist because it needs to construct # hypothetical ambiguity information for every list position. # We want to record disambiguation information for visible names when: # uniquename = 3 (allinit) or 4 (allfull) # Uniquelist is set and a name appears before the uniquelist truncation # Uniquelist is not set and the entry has an explicit "and others" at the end # since this means that every name is less than maxcitenames by definition # Uniquelist is not set and a name list is shorter than the maxcitenames truncation # Uniquelist is not set, a name list is longer than the maxcitenames truncation # and the name appears before the mincitenames truncation if ($un == 3 or $un == 4 or ($ul and $name->get_index <= $ul) or $morenames or $num_names <= $maxcn or $name->get_index <= $mincn) { # implicitly, $num_names > $maxcn here push @truncnames, $name; if ($un == 5 or $un == 6) { push @lastnames, $name->get_lastname; push @fullnames, $name->get_namestring; push @initnames, $name->get_nameinitstring; } } } # Information for mininit ($un=5) or minfull ($un=6) my $lastnames_string; my $fullnames_string; my $initnames_string; if ($un == 5) { $lastnames_string = join("\x{10FFFD}", @lastnames); $initnames_string = join("\x{10FFFD}", @initnames); if ($#lastnames + 1 < $num_names or $morenames) { $lastnames_string .= "\x{10FFFD}et al"; # if truncated, record this $initnames_string .= "\x{10FFFD}et al"; # if truncated, record this } } elsif ($un == 6) { $lastnames_string = join("\x{10FFFD}", @lastnames); $fullnames_string = join("\x{10FFFD}", @fullnames); if ($#lastnames + 1 < $num_names or $morenames) { $lastnames_string .= "\x{10FFFD}et al"; # if truncated, record this $fullnames_string .= "\x{10FFFD}et al"; # if truncated, record this } } foreach my $name (@$names) { # we have to differentiatite here between last names with and without # prefices/suffices otherwise we end up falsely trying to disambiguate # "X" and "von X" or "X" and "X Jr" using initials/first names when there is no need. my $lastname = (Biber::Config->getblxoption('useprefix', $bee, $citekey) and $name->get_prefix ? $name->get_prefix : '') . $name->get_lastname . ($name->get_suffix ? $name->get_suffix : ''); my $nameinitstring = $name->get_nameinitstring; my $namestring = $name->get_namestring; my $namecontext; my $key; # Context and key depend on the uniquename setting if ($un == 1 or $un == 3) { $namecontext = 'global'; $key = $nameinitstring; } elsif ($un == 2 or $un == 4) { $namecontext = 'global'; $key = $namestring; } elsif ($un == 5) { $namecontext = $lastnames_string; $key = $initnames_string; $name->set_minimal_info($lastnames_string); } elsif ($un == 6) { $namecontext = $lastnames_string; $key = $fullnames_string; $name->set_minimal_info($lastnames_string); } if (first {Compare($_, $name)} @truncnames) { # Record a uniqueness information entry for the lastname showing that # this lastname has been seen in this name context Biber::Config->add_uniquenamecount($lastname, $namecontext, $key); # Record a uniqueness information entry for the lastname+initials showing that # this lastname_initials has been seen in this name context Biber::Config->add_uniquenamecount($nameinitstring, $namecontext, $key); # Record a uniqueness information entry for the fullname # showing that this fullname has been seen in this name context Biber::Config->add_uniquenamecount($namestring, $namecontext, $key); } # As above but here we are collecting (separate) information for all # names, regardless of visibility (needed to track uniquelist) if (Biber::Config->getblxoption('uniquelist', $bee, $citekey)) { Biber::Config->add_uniquenamecount_all($lastname, $namecontext, $key); Biber::Config->add_uniquenamecount_all($nameinitstring, $namecontext, $key); Biber::Config->add_uniquenamecount_all($namestring, $namecontext, $key); } } } } return; } =head2 generate_uniquename Generate the per-name uniquename values using the information harvested by create_uniquename_info() =cut sub generate_uniquename { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $bibentries = $section->bibentries; # Now use the information to set the actual uniquename information foreach my $citekey ( $section->get_citekeys ) { my $be = $bibentries->entry($citekey); my $bee = $be->get_field('entrytype'); next unless my $un = Biber::Config->getblxoption('uniquename', $bee, $citekey); $logger->trace("Setting uniquename for '$citekey'"); if (my $lni = $be->get_labelname_info) { # Set the index limit beyond which we don't look for disambiguating information # If defined, $ul will always be >1, see comment in set_uniquelist() in Names.pm my $ul = $be->get_field($lni->{field}, $lni->{form}, $lni->{lang})->get_uniquelist; my $maxcn = Biber::Config->getblxoption('maxcitenames', $bee, $citekey); my $mincn = Biber::Config->getblxoption('mincitenames', $bee, $citekey); my $nl = $be->get_field($lni->{field}, $lni->{form}, $lni->{lang}); my $num_names = $nl->count_names; my $names = $nl->names; # If name list was truncated in bib with "and others", this overrides maxcitenames my $morenames = ($nl->get_morenames) ? 1 : 0; my @truncnames; foreach my $name (@$names) { if ($un == 3 or $un == 4 or ($ul and $name->get_index <= $ul) or $morenames or $num_names <= $maxcn or $name->get_index <= $mincn) { # implicitly, $num_names > $maxcn here push @truncnames, $name; } else { # Set anything now not visible due to uniquelist back to 0 $name->reset_uniquename; } } foreach my $name (@$names) { # we have to differentiatite here between last names with and without # prefices/suffices otherwise we end up falsely trying to disambiguate # "X" and "von X" or "X" and "X Jr" using initials/first names when there is no need. my $lastname = (Biber::Config->getblxoption('useprefix', $bee, $citekey) and $name->get_prefix ? $name->get_prefix : '') . $name->get_lastname . ($name->get_suffix ? $name->get_suffix : ''); my $nameinitstring = $name->get_nameinitstring; my $namestring = $name->get_namestring; my $namecontext = 'global'; # default if ($un == 5 or $un == 6) { $namecontext = $name->get_minimal_info; # $un=5 and 6 } if (first {Compare($_, $name)} @truncnames) { # If there is one key for the lastname, then it's unique using just lastname # because either: # * There are no other identical lastnames # * All identical lastnames have a lastname+init ($un=5) or fullname ($un=6) # which is identical and therefore can't be disambiguated any further anyway if (Biber::Config->get_numofuniquenames($lastname, $namecontext) == 1) { $name->set_uniquename(0); } # Otherwise, if there is one key for the lastname+inits, then it's unique # using initials because either: # * There are no other identical lastname+inits # * All identical lastname+inits have a fullname ($un=6) which is identical # and therefore can't be disambiguated any further anyway elsif (Biber::Config->get_numofuniquenames($nameinitstring, $namecontext) == 1) { $name->set_uniquename(1); } # Otherwise if there is one key for the fullname, then it's unique using # the fullname because: # * There are no other identical full names # # But restrict to uniquename biblatex option maximum elsif (Biber::Config->get_numofuniquenames($namestring, $namecontext) == 1) { my $run; if ($un == 1) {$run = 1} # init elsif ($un == 2) {$run = 2} # full elsif ($un == 3) {$run = 1} # allinit elsif ($un == 4) {$run = 2} # allfull elsif ($un == 5) {$run = 1} # mininit elsif ($un == 6) {$run = 2} # minfull $name->set_uniquename($run) } # Otherwise, there must be more than one key for the full name, # so set to 0 since nothing will uniqueify this name and it's just # misleading to expand it else { $name->set_uniquename(0); } } # As above but not just for visible names (needed for uniquelist) if (Biber::Config->getblxoption('uniquelist', $bee, $citekey)) { if (Biber::Config->get_numofuniquenames_all($lastname, $namecontext) == 1) { $name->set_uniquename_all(0); } elsif (Biber::Config->get_numofuniquenames_all($nameinitstring, $namecontext) == 1) { $name->set_uniquename_all(1); } elsif (Biber::Config->get_numofuniquenames_all($namestring, $namecontext) == 1) { my $run; if ($un == 1) {$run = 1} # init elsif ($un == 2) {$run = 2} # full elsif ($un == 3) {$run = 1} # allinit elsif ($un == 4) {$run = 2} # allfull elsif ($un == 5) {$run = 1} # mininit elsif ($un == 6) {$run = 2} # minfull $name->set_uniquename_all($run) } else { $name->set_uniquename_all(0); } } } } } return; } =head2 create_uniquelist_info Gather the uniquename information as we look through the names =cut sub create_uniquelist_info { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $bibentries = $section->bibentries; # Reset uniquelist information as we have to generate it again because uniquename # information might have changed Biber::Config->reset_uniquelistcount; foreach my $citekey ( $section->get_citekeys ) { my $be = $bibentries->entry($citekey); my $bee = $be->get_field('entrytype'); my $maxcn = Biber::Config->getblxoption('maxcitenames', $bee, $citekey); my $mincn = Biber::Config->getblxoption('mincitenames', $bee, $citekey); next unless my $ul = Biber::Config->getblxoption('uniquelist', $bee, $citekey); $logger->trace("Generating uniquelist information for '$citekey'"); if (my $lni = $be->get_labelname_info) { my $nl = $be->get_field($lni->{field}, $lni->{form}, $lni->{lang}); my $num_names = $nl->count_names; my $namelist = []; my $ulminyear_namelist = []; foreach my $name (@{$nl->names}) { my $lastname = $name->get_lastname; my $nameinitstring = $name->get_nameinitstring; my $namestring = $name->get_namestring; my $ulminyearflag = 0; # uniquelist = minyear if ($ul == 2) { # minyear uniquename, we set based on the max/mincitenames list if ($num_names > $maxcn and $name->get_index <= $mincn) { $ulminyearflag = 1; } } # uniquename is not set so generate uniquelist based on just lastname if (not defined($name->get_uniquename_all)) { push @$namelist, $lastname; push @$ulminyear_namelist, $lastname if $ulminyearflag; } # uniquename indicates unique with just lastname elsif ($name->get_uniquename_all == 0) { push @$namelist, $lastname; push @$ulminyear_namelist, $lastname if $ulminyearflag; } # uniquename indicates unique with lastname with initials elsif ($name->get_uniquename_all == 1) { push @$namelist, $nameinitstring; push @$ulminyear_namelist, $nameinitstring if $ulminyearflag; } # uniquename indicates unique with full name elsif ($name->get_uniquename_all == 2) { push @$namelist, $namestring; push @$ulminyear_namelist, $namestring if $ulminyearflag; } Biber::Config->add_uniquelistcount($namelist); } # We need to know the list uniqueness counts for the whole list seperately otherwise # we will falsely "disambiguate" identical name lists from each other by setting # uniquelist to the full list because every part of each list will have more than # one count. We therefore need to distinguish counts which are of the final, complete # list of names. If there is more than one count for these, (meaning that there are # two or more identical name lists), we don't expand them at all as there is no point. Biber::Config->add_uniquelistcount_final($namelist); # Add count for uniquelist=minyear unless (Compare($ulminyear_namelist, [])) { Biber::Config->add_uniquelistcount_minyear($ulminyear_namelist, $be->get_field('labelyear'), $namelist); } } } return; } =head2 generate_uniquelist Generate the per-namelist uniquelist values using the information harvested by create_uniquelist_info() =cut sub generate_uniquelist { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $bibentries = $section->bibentries; LOOP: foreach my $citekey ( $section->get_citekeys ) { my $be = $bibentries->entry($citekey); my $bee = $be->get_field('entrytype'); my $maxcn = Biber::Config->getblxoption('maxcitenames', $bee, $citekey); my $mincn = Biber::Config->getblxoption('mincitenames', $bee, $citekey); next unless my $ul = Biber::Config->getblxoption('uniquelist', $bee, $citekey); $logger->trace("Creating uniquelist for '$citekey'"); if (my $lni = $be->get_labelname_info) { my $nl = $be->get_field($lni->{field}, $lni->{form}, $lni->{lang}); my $namelist = []; my $num_names = $nl->count_names; foreach my $name (@{$nl->names}) { my $lastname = $name->get_lastname; my $nameinitstring = $name->get_nameinitstring; my $namestring = $name->get_namestring; # uniquename is not set so generate uniquelist based on just lastname if (not defined($name->get_uniquename_all)) { push @$namelist, $lastname; } # uniquename indicates unique with just lastname elsif ($name->get_uniquename_all == 0) { push @$namelist, $lastname; } # uniquename indicates unique with lastname with initials elsif ($name->get_uniquename_all == 1) { push @$namelist, $nameinitstring; } # uniquename indicates unique with full name elsif ($name->get_uniquename_all == 2) { push @$namelist, $namestring; } # With uniquelist=minyear, uniquelist should not be set at all if there are # no other entries with the same max/mincitenames visible list and different years # to disambiguate from if ($ul == 2 and $num_names > $maxcn and $name->get_index <= $mincn and Biber::Config->get_uniquelistcount_minyear($namelist, $be->get_field('labelyear')) == 1) { $logger->trace("Not setting uniquelist=minyear for '$citekey'"); next LOOP; } # list is unique after this many names so we set uniquelist to this point # Even if uniquelist=minyear, we record normal uniquelist information if # we didn't skip this key in the test above if (Biber::Config->get_uniquelistcount($namelist) == 1) { last; } } $logger->trace("Setting uniquelist for '$citekey' using " . join(',', @$namelist)); $logger->trace("Uniquelist count for '$citekey' is '" . Biber::Config->get_uniquelistcount_final($namelist) . "'"); $nl->set_uniquelist($namelist, $maxcn, $mincn); } } return; } =head2 generate_extra Generate information for: * extraalpha * extrayear * extratitle * extratitleyear =cut sub generate_extra { my $self = shift; my $list = shift; my $sortscheme = $list->get_sortscheme; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); Biber::Config->reset_seen_extra(); # Since this sub is per-list, have to reset the # extra* counters per list # This loop critically depends on the order of the citekeys which # is why we have to do sorting before this foreach my $key ($list->get_keys) { my $be = $section->bibentry($key); my $bee = $be->get_field('entrytype'); # Only generate extra* information if skiplab is not set. # Don't forget that skiplab is implied for set members unless (Biber::Config->getblxoption('skiplab', $bee, $key)) { # extrayear if (Biber::Config->getblxoption('labeldate', $bee)) { my $nameyear = $be->get_field('nameyear'); if (Biber::Config->get_seen_nameyear($nameyear) > 1) { $logger->trace("nameyear for '$nameyear': " . Biber::Config->get_seen_nameyear($nameyear)); my $v = Biber::Config->incr_seen_extrayear($nameyear); $list->set_extrayeardata_for_key($key, $v); } } # extratitle if (Biber::Config->getblxoption('labeltitle', $bee)) { my $nametitle = $be->get_field('nametitle'); if (Biber::Config->get_seen_nametitle($nametitle) > 1) { $logger->trace("nametitle for '$nametitle': " . Biber::Config->get_seen_nametitle($nametitle)); my $v = Biber::Config->incr_seen_extratitle($nametitle); $list->set_extratitledata_for_key($key, $v); } } # extratitleyear if (Biber::Config->getblxoption('labeltitleyear', $bee)) { my $titleyear = $be->get_field('titleyear'); if (Biber::Config->get_seen_titleyear($titleyear) > 1) { $logger->trace("titleyear for '$titleyear': " . Biber::Config->get_seen_titleyear($titleyear)); my $v = Biber::Config->incr_seen_extratitleyear($titleyear); $list->set_extratitleyeardata_for_key($key, $v); } } # extraalpha if (Biber::Config->getblxoption('labelalpha', $bee)) { my $la = $be->get_field('labelalpha'); if (Biber::Config->get_la_disambiguation($la) > 1) { $logger->trace("labelalpha disambiguation for '$la': " . Biber::Config->get_la_disambiguation($la)); my $v = Biber::Config->incr_seen_extraalpha($la); $list->set_extraalphadata_for_key($key, $v); } } } } return; } =head2 generate_singletitle Generate the singletitle field, if requested. The information for generating this is gathered in process_singletitle() =cut sub generate_singletitle { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $bibentries = $section->bibentries; foreach my $citekey ( $section->get_citekeys ) { my $be = $bibentries->entry($citekey); if (Biber::Config->getblxoption('singletitle', $be->get_field('entrytype'))) { if ($be->get_field('seenwork') and Biber::Config->get_seenwork($be->get_field('seenwork')) < 2 ) { $logger->trace("Setting singletitle for '$citekey'"); $be->set_field('singletitle', 1); } else { $logger->trace("Not setting singletitle for '$citekey'"); } } } return; } =head2 sort_list Sort a list using information in entries according to a certain sorting scheme. Use a flag to skip info messages on first pass =cut sub sort_list { my $self = shift; my $list = shift; my $sortscheme = $list->get_sortscheme; my @keys = $list->get_keys; my $llabel = $list->get_label; my $ltype = $list->get_type; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); if (Biber::Config->getoption('sortcase')) { $logger->debug("Sorting is by default case-SENSITIVE"); } else { $logger->debug("Sorting is by default case-INSENSITIVE"); } $logger->debug("Keys before sort:\n"); foreach my $k (@keys) { $logger->debug("$k => " . $list->get_sortdata($k)->[0]); } $logger->trace("Sorting '$ltype' list '$llabel' with scheme\n-------------------\n" . Data::Dump::pp($sortscheme) . "\n-------------------\n"); # Set up locale. Order of priority is: # 1. locale value passed to Unicode::Collate::Locale->new() (Unicode::Collate sorts only) # 2. Biber sortlocale option # 3. LC_COLLATE env variable # 4. LANG env variable # 5. LC_ALL env variable # 6. Built-in defaults my $thislocale = Biber::Config->getoption('sortlocale'); $logger->debug("Locale for sorting is '$thislocale'"); if ( Biber::Config->getoption('fastsort') ) { use locale; $logger->info("Sorting '$ltype' list '$llabel' keys"); $logger->debug("Sorting with fastsort (locale $thislocale)"); unless (setlocale(LC_ALL, $thislocale)) { biber_warn("Unavailable locale $thislocale"); } # Construct a multi-field Schwartzian Transform with the right number of # extractions into a string representing an array ref as we musn't eval this yet my $num_sorts = 0; my $data_extractor = '['; my $sorter; my $sort_extractor; # Global lowercase setting my $glc = Biber::Config->getoption('sortcase') ? '' : 'lc '; foreach my $sortset (@{$sortscheme}) { $data_extractor .= '$list->get_sortdata($_)->[1][' . $num_sorts . '],'; $sorter .= ' || ' if $num_sorts; # don't add separator before first field my $lc = $glc; # Casing defaults to global default ... my $sc = $sortset->[0]{sortcase}; # but is overriden by field setting if it exists if (defined($sc) and $sc != Biber::Config->getoption('sortcase')) { unless ($sc) { $lc = 'lc '; } else { $lc = ''; } } my $sd = $sortset->[0]{sort_direction}; if (defined($sd) and $sd eq 'descending') { # descending field $sorter .= $lc . '$b->[' . $num_sorts . '] cmp ' . $lc . '$a->[' . $num_sorts . ']'; } else { # ascending field $sorter .= $lc . '$a->[' . $num_sorts . '] cmp ' . $lc . '$b->[' . $num_sorts . ']'; } $num_sorts++; } $data_extractor .= '$_]'; # Handily, $num_sorts is now one larger than the number of fields which is the # correct index for the actual data in the sort array $sort_extractor = '$_->[' . $num_sorts . ']'; $logger->trace("Sorting structure is: $sorter"); # Schwartzian transform multi-field sort @keys = map { eval $sort_extractor } sort { eval $sorter } map { eval $data_extractor } @keys; } else { require Unicode::Collate::Locale; my $collopts = Biber::Config->getoption('collate_options'); # UCA level 2 if case insensitive sorting is requested unless (Biber::Config->getoption('sortcase')) { $collopts->{level} = 2; } # Add upper_before_lower option $collopts->{upper_before_lower} = Biber::Config->getoption('sortupper'); # Add tailoring locale for Unicode::Collate if ($thislocale and not $collopts->{locale}) { $collopts->{locale} = $thislocale; if ($collopts->{table}) { my $t = delete $collopts->{table}; $logger->info("Ignoring collation table '$t' as locale is set ($thislocale)"); } } # Remove locale from options as we need this to make the object my $coll_locale = delete $collopts->{locale}; # Now create the collator object my $Collator = Unicode::Collate::Locale->new( locale => $coll_locale) or $logger->logcarp("Problem creating Unicode::Collate::Locale object: $@"); # Fix the old "alternate" alias otherwise we have problems as U::C->change() always # returns the new "variable" option and we get confused. if (my $alt = delete $collopts->{alternate}) { $collopts->{variable} = $alt; } #Show the collation options when debugging $logger->debug('Collation options: ' . Data::Dump::pp($collopts)); # Tailor the collation object and report differences from defaults for locale # Have to do this in ->change method as ->new can croak with conflicting tailoring # for locales which enforce certain tailorings my %coll_changed = $Collator->change( %{$collopts} ); while (my ($k, $v) = each %coll_changed) { # If we changing something that has no override tailoring in the locale, it # is undef in this hash and we don't care about such things next unless defined($coll_changed{$k}); if ($coll_changed{$k} ne $collopts->{$k}) { $logger->info("Overriding locale '$coll_locale' default tailoring '$k = $v' with '$k = " . $collopts->{$k} . "'"); } } my $UCAversion = $Collator->version(); $logger->info("Sorting '$ltype' list '$llabel' keys"); $logger->debug("Sorting with Unicode::Collate (" . stringify_hash($collopts) . ", UCA version: $UCAversion, Locale: " . $Collator->getlocale . ")"); # Log if U::C::L currently has no tailoring for used locale if ($Collator->getlocale eq 'default') { $logger->info("No sort tailoring available for locale '$thislocale'"); } # Construct a multi-field Schwartzian Transform with the right number of # extractions into a string representing an array ref as we musn't eval this yet my $num_sorts = 0; my $data_extractor = '['; my $sorter; my $sort_extractor; foreach my $sortset (@{$sortscheme}) { my $fc = ''; my @fc; # If the case or upper option on a field is not the global default # set it locally on the $Collator by constructing a change() method call my $sc = $sortset->[0]{sortcase}; if (defined($sc) and $sc != Biber::Config->getoption('sortcase')) { push @fc, $sc ? 'level => 4' : 'level => 2'; } my $su = $sortset->[0]{sortupper}; if (defined($su) and $su != Biber::Config->getoption('sortupper')) { push @fc, $su ? 'upper_before_lower => 1' : 'upper_before_lower => 0'; } if (@fc) { # This field has custom collation options $fc = '->change(' . join(',', @fc) . ')'; } else { # Reset collation options to global defaults if there are no field options # We have to do this as ->change modifies the Collation object $fc = '->change(level => ' . $collopts->{level} . ' ,upper_before_lower => ' . $collopts->{upper_before_lower} . ')'; } $data_extractor .= '$list->get_sortdata($_)->[1][' . $num_sorts . '],'; $sorter .= ' || ' if $num_sorts; # don't add separator before first field my $sd = $sortset->[0]{sort_direction}; if (defined($sd) and $sd eq 'descending') { # descending field $sorter .= '$Collator' . $fc . '->cmp($b->[' . $num_sorts . '],$a->[' . $num_sorts . '])'; } else { # ascending field $sorter .= '$Collator' . $fc . '->cmp($a->[' . $num_sorts . '],$b->[' . $num_sorts . '])'; } $num_sorts++; } $data_extractor .= '$_]'; # Handily, $num_sorts is now one larger than the number of fields which is the # correct index for the actual data in the sort array $sort_extractor = '$_->[' . $num_sorts . ']'; $logger->trace("Sorting structure is: $sorter"); # Schwartzian transform multi-field sort @keys = map { eval $sort_extractor } sort { eval $sorter } map { eval $data_extractor } @keys; } $logger->debug("Keys after sort:\n"); foreach my $k (@keys) { $logger->debug("$k => " . $list->get_sortdata($k)->[0]); } $list->set_keys([ @keys ]); return; } =head2 prepare Do the main work. Process and sort all entries before writing the output. =cut sub prepare { my $self = shift; my $out = $self->get_output_obj; # Biber::Output object # Place to put global pre-processing things $self->process_setup; foreach my $section (@{$self->sections->get_sections}) { # shortcut - skip sections that don't have any keys next unless $section->get_citekeys or $section->is_allkeys; my $secnum = $section->number; $logger->info("Processing section $secnum"); $section->reset_caches; # Reset the the section caches (sorting, label etc.) Biber::Config->_init; # (re)initialise Config object $self->set_current_section($secnum); # Set the section number we are working on $self->fetch_data; # Fetch cited key and dependent data from sources $self->process_citekey_aliases; # Remove citekey aliases from citekeys $self->instantiate_dynamic; # Instantiate any dynamic entries (sets, related) $self->resolve_alias_refs; # Resolve xref/crossref/xdata aliases to real keys $self->resolve_xdata; # Resolve xdata entries $self->cite_setmembers; # Cite set members $self->process_interentry; # Process crossrefs/sets etc. $self->nullable_check; # Check entries for nullable fields $self->validate_datamodel; # Check against data model $self->process_entries_pre; # Main entry processing loop, part 1 $self->uniqueness; # Here we generate uniqueness information $self->process_visible_names; # Generate visible names information for all entries $self->process_entries_post; # Main entry processing loop, part 2 $self->process_lists; # process the output lists (sort and filtering) $self->generate_singletitle; # Generate singletitle field if requested $out->create_output_section; # Generate and push the section output into the # output object ready for writing } $out->create_output_misc; # Generate and push the final misc bits of output # into the output object ready for writing return; } =head2 prepare_tool Do the main work for tool mode =cut sub prepare_tool { my $self = shift; my $out = $self->get_output_obj; # Biber::Output object # Place to put global pre-processing things $self->process_setup_tool; # tool mode only has a section '99999' my $secnum = 99999; my $section = $self->sections->get_section($secnum); $section->reset_caches; # Reset the the section caches (sorting, label etc.) Biber::Config->_init; # (re)initialise Config object $self->set_current_section($secnum); # Set the section number we are working on $self->fetch_data; # Fetch cited key and dependent data from sources if (Biber::Config->getoption('output_resolve')) { $self->resolve_alias_refs; # Resolve xref/crossref/xdata aliases to real keys $self->resolve_xdata; # Resolve xdata entries $self->process_interentry; # Process crossrefs/sets etc. } $self->process_lists; # process the output lists (sort and filtering) $out->create_output_section; # Generate and push the section output into the # into the output object ready for writing return; } =head2 fetch_data Fetch citekey and dependents data from section datasources Expects to find datasource packages named: Biber::Input:::: and one defined subroutine called: Biber::Input::::::extract_entries which takes args: 1: Biber object 2: Datasource name 3: Reference to an array of cite keys to look for and returns an array of the cite keys it did not find in the datasource =cut sub fetch_data { my $self = shift; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); # Only looking for static keys, dynamic key entries are not in any datasource ... my @citekeys = $section->get_static_citekeys; no strict 'refs'; # symbolic references below ... # Clear all T::B macro definitions between sections if asked as T::B never clears these if (Biber::Config->getoption('clrmacros')) { $logger->debug('Clearing Text::BibTeX macros definitions'); Text::BibTeX::delete_all_macros(); } # (Re-)define the old BibTeX month macros to what biblatex wants unless user stops this unless (Biber::Config->getoption('nostdmacros')) { my %months = ('jan' => '01', 'feb' => '02', 'mar' => '03', 'apr' => '04', 'may' => '05', 'jun' => '06', 'jul' => '07', 'aug' => '08', 'sep' => '09', 'oct' => '10', 'nov' => '11', 'dec' => '12'); foreach my $mon (keys %months) { Text::BibTeX::delete_macro($mon); Text::BibTeX::add_macro_text($mon, $months{$mon}); } } # First we look for the directly cited keys in each datasource my @remaining_keys = @citekeys; $logger->debug('Looking for directly cited keys: ' . join(', ', @remaining_keys)); foreach my $datasource (@{$section->get_datasources}) { # shortcut if we have found all the keys now last unless (@remaining_keys or $section->is_allkeys); my $type = $datasource->{type}; my $name = $datasource->{name}; my $datatype = $datasource->{datatype}; my $package = 'Biber::Input::' . $type . '::' . $datatype; eval "require $package" or biber_error("Error loading data source package '$package': $@"); # Slightly different message for tool mode if (Biber::Config->getoption('tool')) { $logger->info("Looking for $datatype format $type '$name'"); } else { $logger->info("Looking for $datatype format $type '$name' for section $secnum"); } @remaining_keys = &{"${package}::extract_entries"}($name, \@remaining_keys); } # error reporting $logger->debug("Directly cited keys not found for section '$secnum': " . join(',', @remaining_keys)); foreach my $citekey (@remaining_keys) { biber_warn("I didn't find a database entry for '$citekey' (section $secnum)"); $section->del_citekey($citekey); $section->add_undef_citekey($citekey); } # Don't need to do dependent detection if running in (real) tool mode since this is always # allkeys=1 and we don't care about missing dependents which get_dependents() might prune # pseudo_tool mode is bibtex output when not in tool mode. Internally, it's essentially # the same but without allkeys. if (Biber::Config->getoption('tool') and not Biber::Config->getoption('pseudo_tool')) { return; } $logger->debug('Building dependents for keys: ' . join(',', $section->get_citekeys)); # dependent key list generation - has to be a sub as it's recursive to catch # nested crossrefs, xdata etc. get_dependents($self, [$section->get_citekeys]); $logger->debug("Citekeys for section '$secnum' after fetching data: " . join(', ', $section->get_citekeys)); return; } =head2 get_dependents Get dependents of the entries for a given list of citekeys. Is called recursively until there are no more dependents to look for. =cut sub get_dependents { my ($self, $keys) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $dep_map; # Flag to say an entry has some deps so we can shortcut deletions my $new_deps; no strict 'refs'; # symbolic references below ... foreach my $citekey (@$keys) { # aliases need resolving here and are treated as dependents if (my $real = $section->get_citekey_alias($citekey)) { $logger->debug("Alias '$citekey' requires real key '$real'"); push @$new_deps, $real; $dep_map->{$real} = 1; } # Dynamic sets don't exist yet but their members do elsif (my @dmems = $section->get_dynamic_set($citekey)) { # skip looking for dependent if it's already there foreach my $dm (@dmems) { unless ($section->bibentry($dm)) { push @$new_deps, $dm; $dep_map->{$citekey} = 1; } } $logger->debug("Dynamic set entry '$citekey' has members: " . join(', ', @dmems)); } else { # This must exist for all but dynamic sets my $be = $section->bibentry($citekey); # xdata if (my $xdata = $be->get_field('xdata')) { foreach my $xdatum (@$xdata) { # skip looking for dependent if it's already there (loop suppression) push @$new_deps, $xdatum unless $section->bibentry($xdatum); $logger->debug("Entry '$citekey' has xdata '$xdatum'"); $dep_map->{$citekey} = 1; } } # crossrefs/xrefs my $refkey; if ($refkey = $be->get_field('xref') or $refkey = $be->get_field('crossref')) { # skip looking for dependent if it's already there (loop suppression) push @$new_deps, $refkey unless $section->bibentry($refkey); $logger->debug("Entry '$citekey' has cross/xref '$refkey'"); $dep_map->{$citekey} = 1; } # static sets if ($be->get_field('entrytype') eq 'set') { my $smems = $be->get_field('entryset'); # skip looking for dependent if it's already there (loop suppression) foreach my $sm (@$smems) { unless ($section->has_citekey($sm)) { push @$new_deps, $sm; $dep_map->{$citekey} = 1; } } $logger->debug("Static set entry '$citekey' has members: " . join(', ', @$smems)); } # Related entries if (my $relkeys = $be->get_field('related')) { # skip looking for dependent if it's already there (loop suppression) foreach my $rm (@$relkeys) { unless ($section->has_citekey($rm) or $section->is_related($rm)) { # record that $rm is used as a related entry key $section->add_related($rm); push @$new_deps, $rm; $dep_map->{$citekey} = 1; } } $logger->debug("Entry '$citekey' has related entries: " . join(', ', @$relkeys)); } } } # Remove repeated keys which are dependents of more than one entry @$new_deps = uniq @$new_deps; my @missing; if (@$new_deps) { # Now look for the dependents of the directly cited keys $logger->debug('Looking for dependent keys: ' . join(', ', @$new_deps)); # No need to go back to the datasource if allkeys, just see if the keys # are in section if ($section->is_allkeys) { foreach my $dk (@$new_deps) { push @missing, $dk unless $section->has_citekey($dk); } } else { @missing = @$new_deps; foreach my $datasource (@{$section->get_datasources}) { # shortcut if we have found all the keys now last unless @missing; my $type = $datasource->{type}; my $name = $datasource->{name}; my $datatype = $datasource->{datatype}; my $package = 'Biber::Input::' . $type . '::' . $datatype; eval "require $package" or biber_error("Error loading data source package '$package': $@"); @missing = &{"${package}::extract_entries"}($name, \@missing); } } # error reporting $logger->debug("Dependent keys not found for section '$secnum': " . join(', ', @missing)); foreach my $citekey ($section->get_citekeys) { next unless $dep_map->{$citekey}; # only if we have some missing deps to delete foreach my $missing_key (@missing) { $self->remove_undef_dependent($citekey, $missing_key); # Remove the missing key from the list to recurse with @$new_deps = grep { $_ ne $missing_key } @$new_deps; } } } $logger->trace('Recursing in get_dependents with: ' . join(', ', @$new_deps)); get_dependents($self, $new_deps) if @$new_deps; # recurse if there are more things to find return; # bottom of recursion } =head2 remove_undef_dependent Remove undefined dependent keys from an entry using a map of dependent keys to entries =cut sub remove_undef_dependent { my $self = shift; my ($citekey, $missing_key) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); # remove from any dynamic keys if (my @dmems = $section->get_dynamic_set($citekey)){ if (first {$missing_key eq $_} @dmems) { $section->set_dynamic_set($citekey, grep {$_ ne $missing_key} @dmems); } else { biber_warn("I didn't find a database entry for dynamic set member '$missing_key' - ignoring (section $secnum)"); } } else { my $be = $section->bibentry($citekey); # remove any xrefs if ($be->get_field('xref') and ($be->get_field('xref') eq $missing_key)) { $be->del_field('xref'); biber_warn("I didn't find a database entry for xref '$missing_key' in entry '$citekey' - ignoring (section $secnum)"); } # remove any crossrefs if ($be->get_field('crossref') and ($be->get_field('crossref') eq $missing_key)) { $be->del_field('crossref'); biber_warn("I didn't find a database entry for crossref '$missing_key' in entry '$citekey' - ignoring (section $secnum)"); } # remove xdata if (my $xdata = $be->get_field('xdata')) { if (first {$missing_key eq $_} @$xdata) { $be->set_datafield('xdata', [ grep {$_ ne $missing_key} @$xdata ]) ; biber_warn("I didn't find a database entry for xdata entry '$missing_key' in entry '$citekey' - ignoring (section $secnum)"); } } # remove static sets if ($be->get_field('entrytype') eq 'set') { my $smems = $be->get_field('entryset'); if (first {$missing_key eq $_} @$smems) { $be->set_datafield('entryset', [ grep {$_ ne $missing_key} @$smems ]); biber_warn("I didn't find a database entry for static set member '$missing_key' in entry '$citekey' - ignoring (section $secnum)"); } } # remove related entries if (my $relkeys = $be->get_field('related')) { if (first {$missing_key eq $_} @$relkeys) { $be->set_datafield('related', [ grep {$_ ne $missing_key} @$relkeys ]); # If no more related entries, remove the other related fields unless ($be->get_field('related')) { $be->del_field('relatedtype'); $be->del_field('relatedstring'); } biber_warn("I didn't find a database entry for related entry '$missing_key' in entry '$citekey' - ignoring (section $secnum)"); } } } return; } =head2 _parse_sort Convenience sub to parse a .bcf sorting section and return nice sorting object =cut sub _parse_sort { my $root_obj = shift; my $sorting; foreach my $sort (sort {$a->{order} <=> $b->{order}} @{$root_obj->{sort}}) { my $sortingitems; # Generate sorting pass structures foreach my $sortitem (sort {$a->{order} <=> $b->{order}} @{$sort->{sortitem}}) { my $sortitemattributes = {}; if (defined($sortitem->{substring_side})) { # Found sorting substring side attribute $sortitemattributes->{substring_side} = $sortitem->{substring_side}; } if (defined($sortitem->{substring_width})) { # Found sorting substring length attribute $sortitemattributes->{substring_width} = $sortitem->{substring_width}; } if (defined($sortitem->{pad_width})) { # Found sorting pad length attribute $sortitemattributes->{pad_width} = $sortitem->{pad_width}; } if (defined($sortitem->{pad_char})) { # Found sorting pad char attribute $sortitemattributes->{pad_char} = $sortitem->{pad_char}; } if (defined($sortitem->{pad_side})) { # Found sorting pad side attribute $sortitemattributes->{pad_side} = $sortitem->{pad_side}; } if (defined($sortitem->{form})) { # Found script form attribute $sortitemattributes->{form} = $sortitem->{form}; } if (defined($sortitem->{lang})) { # Found script lang attribute $sortitemattributes->{lang} = $sortitem->{lang}; } push @{$sortingitems}, {$sortitem->{content} => $sortitemattributes}; } # Only push a sortitem if defined. If the item has a conditional "pass" # attribute, it may be ommitted in which case we don't want an empty array ref # pushing # Also, we only push the sort attributes if there are any sortitems otherwise # we end up with a blank sort my $sopts; $sopts->{final} = $sort->{final} if defined($sort->{final}); $sopts->{sort_direction} = $sort->{sort_direction} if defined($sort->{sort_direction}); $sopts->{sortcase} = $sort->{sortcase} if defined($sort->{sortcase}); $sopts->{sortupper} = $sort->{sortupper} if defined($sort->{sortupper}); if (defined($sortingitems)) { unshift @{$sortingitems}, $sopts; push @{$sorting}, $sortingitems; } } return $sorting; } =head2 _filedump and _stringdump Dump the biber object with Data::Dump for debugging =cut sub _filedump { my ($self, $file) = @_; my $fh = IO::File->new($file, '>') or croak "Can't open file $file for writing"; print $fh Data::Dump::pp($self); close $fh; return } sub _stringdump { my $self = shift ; return Data::Dump::pp($self); } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber000755000000000000 012230324177 15126 5ustar00rootroot000000000000biblatex-biber-1.8/lib/Biber/SortLists.pm000444000000000000 450312230324176 17570 0ustar00rootroot000000000000package Biber::SortLists; use v5.16; use strict; use warnings; =encoding utf-8 =head1 NAME Biber::SortLists =head2 new Initialize a Biber::SortLists object =cut sub new { my ($class) = @_; my $self = bless {}, $class; return $self; } =head2 add_list Adds a section list to this section =cut sub add_list { my $self = shift; my $list = shift; push @{$self->{lists}}, $list; return; } =head2 get_lists Returns an array ref of all sort lists =cut sub get_lists { my $self = shift; return $self->{lists}; } =head2 get_lists_for_section Returns an array ref of all sort lists for a given section Using numeric equals as section identifiers are numbers =cut sub get_lists_for_section { my $self = shift; my $section = shift; my $lists = []; my $glist; foreach my $list (@{$self->{lists}}) { if ($list->get_section == $section) { push @$lists, $list; } } return $lists; } =head2 get_list Returns a specific list by section, type and label =cut sub get_list { my ($self, $section, $type, $label) = @_; foreach my $list (@{$self->{lists}}) { return $list if ($list->get_label eq $label and $list->get_type eq $type and $list->get_section == $section); } return undef; } =head2 has_lists_of_type_for_section Returns boolean saying whether there is a sort list for a section of a specified type =cut sub has_lists_of_type_for_section { my ($self, $section, $type) = @_; foreach my $list (@{$self->{lists}}) { if ($list->get_type eq $type and $list->get_section == $section) { return 1; } } return 0; } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Utils.pm000444000000000000 5636312230324175 16754 0ustar00rootroot000000000000package Biber::Utils; use v5.16; use strict; use warnings; use re 'eval'; use base 'Exporter'; use constant { EXIT_OK => 0, EXIT_ERROR => 2 }; use Carp; use Encode; use File::Find; use File::Spec; use IPC::Cmd qw( can_run ); use IPC::Run3; # This works with PAR::Packer and Windows. IPC::Run doesn't use Biber::Constants; use Biber::LaTeX::Recode; use Biber::Entry::Name; use Regexp::Common qw( balanced ); use Log::Log4perl qw(:no_extra_logdie_message); use Unicode::Normalize; my $logger = Log::Log4perl::get_logger('main'); =encoding utf-8 =head1 NAME Biber::Utils - Various utility subs used in Biber =cut =head1 EXPORT All functions are exported by default. =cut our @EXPORT = qw{ locate_biber_file driver_config makenamesid makenameid stringify_hash normalise_string normalise_string_hash normalise_string_underscore normalise_string_sort normalise_string_label reduce_array remove_outer add_outer ucinit strip_nosort strip_noinit is_def is_undef is_def_and_notnull is_def_and_null is_undef_or_null is_notnull is_null normalise_utf8 inits join_name latex_recode_output filter_entry_options biber_error biber_warn ireplace imatch validate_biber_xml process_entry_options escape_label unescape_label biber_decode_utf8 out parse_date}; =head1 FUNCTIONS =head2 driver_config Returns an XML::LibXML::Simple object for an input driver config file =cut sub driver_config { my $driver_name = shift; # we assume that the driver config file is in the same dir as the driver: (my $vol, my $driver_path, undef) = File::Spec->splitpath( $INC{"Biber/Input/file/${driver_name}.pm"} ); # Deal with the strange world of Par::Packer paths, see similar code in Biber.pm my $dcf; if ($driver_path =~ m|/par\-| and $driver_path !~ m|/inc|) { # a mangled PAR @INC path $dcf = File::Spec->catpath($vol, "$driver_path/inc/lib/Biber/Input/file", "${driver_name}.dcf"); } else { $dcf = File::Spec->catpath($vol, $driver_path, "${driver_name}.dcf"); } # Read driver config file my $dcfxml = XML::LibXML::Simple::XMLin($dcf, 'ForceContent' => 1, 'ForceArray' => [ qr/\Afield\z/, qr/\Aalias\z/, qr/\Aalsoset\z/], 'NsStrip' => 1); return $dcfxml; } =head2 locate_biber_file Searches for a file by For the exact path if the filename is absolute In the output_directory, if defined Relative to the current directory In the same directory as the control file Using kpsewhich, if available =cut sub locate_biber_file { my $filename = shift; my $filenamepath = $filename; # default if nothing else below applies my $outfile; # If output_directory is set, perhaps the file can be found there so # construct a path to test later if (my $outdir = Biber::Config->getoption('output_directory')) { $outfile = File::Spec->catfile($outdir, $filename); } # Filename is absolute if (File::Spec->file_name_is_absolute($filename) and -e $filename) { return $filename; } # File is output_directory if (defined($outfile) and -e $outfile) { return $outfile; } # File is relative to cwd if (-e $filename) { return $filename; } # File is where control file lives if (my $cfp = Biber::Config->get_ctrlfile_path) { my ($ctlvolume, $ctldir, undef) = File::Spec->splitpath($cfp); if ($ctlvolume) { # add vol sep for windows if volume is set and there isn't one $ctlvolume .= ':' unless $ctlvolume =~ /:\z/; } if ($ctldir) { # add path sep if there isn't one $ctldir .= '/' unless $ctldir =~ /\/\z/; } my $path = "$ctlvolume$ctldir$filename"; return $path if -e $path; } # File is in kpse path if (can_run('kpsewhich')) { $logger->debug("Looking for file '$filename' via kpsewhich"); my $found; my $err; run3 [ 'kpsewhich', $filename ], \undef, \$found, \$err, { return_if_system_error => 1}; if ($?) { $logger->debug("kpsewhich returned error: $err ($!)"); } $logger->trace("kpsewhich returned '$found'"); if ($found) { $logger->debug("Found '$filename' via kpsewhich"); chomp $found; $found =~ s/\cM\z//xms; # kpsewhich in cygwin sometimes returns ^M at the end # filename can be UTF-8 and run3() isn't clever with UTF-8 return decode_utf8($found); } else { $logger->debug("Could not find '$filename' via kpsewhich"); } } return undef; } =head2 biber_warn Wrapper around various warnings bits and pieces Logs a warning, add warning to the list of .bbl warnings and optionally increments warning count in Biber object, if present =cut sub biber_warn { my ($warning, $entry) = @_; $logger->warn($warning); $entry->add_warning($warning) if $entry; $Biber::MASTER->{warnings}++; return; } =head2 biber_error Wrapper around error logging Forces an exit. =cut sub biber_error { my $error = shift; $logger->error($error); $Biber::MASTER->{errors}++; # exit unless user requested not to for errors unless (Biber::Config->getoption('nodieonerror')) { $Biber::MASTER->display_problems; exit EXIT_ERROR; } } =head2 makenamesid Given a Biber::Names object, return an underscore normalised concatenation of all of the full name strings. =cut sub makenamesid { my $names = shift; my @namestrings; foreach my $name (@{$names->names}) { push @namestrings, $name->get_namestring; } my $tmp = join ' ', @namestrings; return normalise_string_underscore($tmp); } =head2 makenameid Given a Biber::Name object, return an underscore normalised concatenation of the full name strings. =cut sub makenameid { my $name = shift; return normalise_string_underscore($name->get_namestring); } =head2 latex_recode_output Tries to convert UTF-8 to TeX macros in passed string =cut sub latex_recode_output { my $string = shift; return Biber::LaTeX::Recode::latex_encode($string); }; =head2 strip_noinit Removes elements which are not to be considered during initials generation in names =cut sub strip_noinit { my $string = shift; return '' unless $string; # Sanitise missing data return $string unless my $noinit = Biber::Config->getoption('noinit'); foreach my $opt (@$noinit) { my $re = $opt->{value}; $re = qr/$re/; $string =~ s/$re//gxms; } return $string; } =head2 strip_nosort Removes elements which are not to be used in sorting a name from a string =cut sub strip_nosort { my $string = shift; my $fieldname = shift; return '' unless $string; # Sanitise missing data return $string unless my $nosort = Biber::Config->getoption('nosort'); # Strip user-defined REs from string my $restrings; foreach my $nsopt (@$nosort) { # Specific fieldnames override types if (fc($nsopt->{name}) eq fc($fieldname)) { push @$restrings, $nsopt->{value}; } } unless ($restrings) { foreach my $nsopt (@$nosort) { next unless $nsopt->{name} =~ /\Atype_/xms; if ($NOSORT_TYPES{lc($nsopt->{name})}{lc($fieldname)}) { push @$restrings, $nsopt->{value}; } } } # If no nosort to do, just return string return $string unless $restrings; foreach my $re (@$restrings) { $re = qr/$re/; $string =~ s/$re//gxms; } return $string; } =head2 normalise_string_label Remove some things from a string for label generation, like braces. It also decodes LaTeX character macros into Unicode as this is always safe when normalising strings for sorting since they don't appear in the output. =cut sub normalise_string_label { my $str = shift; my $fieldname = shift; return '' unless $str; # Sanitise missing data # Replace LaTeX chars by Unicode for sorting # Don't bother if output is UTF-8 as in this case, we've already decoded everthing # before we read the file (see Biber.pm) unless (Biber::Config->getoption('output_encoding') eq 'UTF-8') { $str = latex_decode($str, strip_outer_braces => 1); } return normalise_string_common($str); } =head2 normalise_string_sort Removes LaTeX macros, and all punctuation, symbols, separators and control characters, as well as leading and trailing whitespace for sorting strings. It also decodes LaTeX character macros into Unicode as this is always safe when normalising strings for sorting since they don't appear in the output. =cut sub normalise_string_sort { my $str = shift; my $fieldname = shift; return '' unless $str; # Sanitise missing data # First strip nosort REs $str = strip_nosort($str, $fieldname); # Then replace ties with spaces or they will be lost $str =~ s/([^\\])~/$1 /g; # Foo~Bar -> Foo Bar # Replace LaTeX chars by Unicode for sorting # Don't bother if output is UTF-8 as in this case, we've already decoded everthing # before we read the file (see Biber.pm) unless (Biber::Config->getoption('output_encoding') eq 'UTF-8') { $str = latex_decode($str, strip_outer_braces => 1); } return normalise_string_common($str); } =head2 normalise_string Removes LaTeX macros, and all punctuation, symbols, separators and control characters, as well as leading and trailing whitespace for sorting strings. Only decodes LaTeX character macros into Unicode if output is UTF-8 =cut sub normalise_string { my $str = shift; return '' unless $str; # Sanitise missing data # First replace ties with spaces or they will be lost $str =~ s/([^\\])~/$1 /g; # Foo~Bar -> Foo Bar if (Biber::Config->getoption('output_encoding') eq 'UTF-8') { $str = latex_decode($str, strip_outer_braces => 1); } return normalise_string_common($str); } =head2 normalise_string_common Common bit for normalisation =cut sub normalise_string_common { my $str = shift; $str =~ s/\\[A-Za-z]+//g; # remove latex macros (assuming they have only ASCII letters) $str =~ s/[\p{P}\p{S}\p{C}]+//g; # remove punctuation, symbols, separator and control $str =~ s/^\s+//; # Remove leading spaces $str =~ s/\s+$//; # Remove trailing spaces $str =~ s/\s+/ /g; # collapse spaces return $str; } =head2 normalise_string_hash Normalise strings used for hashes. We collapse LaTeX macros into a vestige so that hashes are unique between things like: Smith {\v S}mith we replace macros like this to preserve their vestiges: \v S -> v: \" -> 34: =cut sub normalise_string_hash { my $str = shift; return '' unless $str; # Sanitise missing data $str =~ s/\\(\p{L}+)\s*/$1:/g; # remove tex macros $str =~ s/\\([^\p{L}])\s*/ord($1).':'/ge; # remove accent macros like \"a $str =~ s/[{}~\.\s]+//g; # Remove brackes, ties, dots, spaces return $str; } =head2 normalise_string_underscore Like normalise_string, but also substitutes ~ and whitespace with underscore. =cut sub normalise_string_underscore { my $str = shift; return '' unless $str; # Sanitise missing data $str =~ s/([^\\])~/$1 /g; # Foo~Bar -> Foo Bar $str = normalise_string($str); $str =~ s/\s+/_/g; return $str; } =head2 escape_label Escapes a few special character which might be used in labels =cut sub escape_label { my $str = shift; return '' unless $str; # Sanitise missing data $str =~ s/([_\^\$\#\%\&])/\\$1/g; $str =~ s/~/{\\textasciitilde}/g; $str =~ s/>/{\\textgreater}/g; $str =~ s//g; $str =~ s/\{\\textless\}/ 'string' =cut sub remove_outer { my $str = shift; $str =~ s/^{(\X+)}$/$1/; return $str; } =head2 add_outer Add surrounding curly brackets: 'string' -> '{string}' =cut sub add_outer { my $str = shift; return '{' . $str . '}'; } =head2 ucinit upper case of initial letters in a string =cut sub ucinit { my $str = shift; $str = lc($str); $str =~ s/\b(\p{Ll})/\u$1/g; return $str; } =head2 is_undef Checks for undefness of arbitrary things, including composite method chain calls which don't reliably work with defined() (see perldoc for defined()) This works because we are just testing the value passed to this sub. So, for example, this is randomly unreliable even if the resulting value of the arg to defined() is "undef": defined($thing->method($arg)->method) wheras: is_undef($thing->method($arg)->method) works since we only test the return value of all the methods with defined() =cut sub is_undef { my $val = shift; return defined($val) ? 0 : 1; } =head2 is_def Checks for definedness in the same way as is_undef() =cut sub is_def { my $val = shift; return defined($val) ? 1 : 0; } =head2 is_undef_or_null Checks for undef or nullness (see is_undef() above) =cut sub is_undef_or_null { my $val = shift; return 1 if is_undef($val); return $val ? 0 : 1; } =head2 is_def_and_notnull Checks for def and unnullness (see is_undef() above) =cut sub is_def_and_notnull { my $arg = shift; if (defined($arg) and is_notnull($arg)) { return 1; } else { return 0; } } =head2 is_def_and_null Checks for def and nullness (see is_undef() above) =cut sub is_def_and_null { my $arg = shift; if (defined($arg) and is_null($arg)) { return 1; } else { return 0; } } =head2 is_null Checks for nullness =cut sub is_null { my $arg = shift; return is_notnull($arg) ? 0 : 1; } =head2 is_notnull Checks for notnullness =cut sub is_notnull { my $arg = shift; return undef unless defined($arg); my $st = is_notnull_scalar($arg); if (defined($st) and $st) { return 1; } my $at = is_notnull_array($arg); if (defined($at) and $at) { return 1; } my $ht = is_notnull_hash($arg); if (defined($ht) and $ht) { return 1; } my $ot = is_notnull_object($arg); if (defined($ot) and $ot) { return 1; } return 0; } =head2 is_notnull_scalar Checks for notnullness of a scalar =cut sub is_notnull_scalar { my $arg = shift; unless (ref \$arg eq 'SCALAR') { return undef; } return $arg ne '' ? 1 : 0; } =head2 is_notnull_array Checks for notnullness of an array (passed by ref) =cut sub is_notnull_array { my $arg = shift; unless (ref $arg eq 'ARRAY') { return undef; } my @arr = @$arg; return $#arr > -1 ? 1 : 0; } =head2 is_notnull_hash Checks for notnullness of an hash (passed by ref) =cut sub is_notnull_hash { my $arg = shift; unless (ref $arg eq 'HASH') { return undef; } my @arr = keys %$arg; return $#arr > -1 ? 1 : 0; } =head2 is_notnull_object Checks for notnullness of an object (passed by ref) =cut sub is_notnull_object { my $arg = shift; unless (ref($arg) =~ m/\ABiber::/xms) { return undef; } return $arg->notnull ? 1 : 0; } =head2 stringify_hash Turns a hash into a string of keys and values =cut sub stringify_hash { my $hashref = shift; my $string; while (my ($k,$v) = each %$hashref) { $string .= "$k => $v, "; } # Take off the trailing comma and space chop $string; chop $string; return $string; } =head2 normalise_utf8 Normalise any UTF-8 encoding string immediately to exactly what we want We want the strict perl utf8 "UTF-8" =cut sub normalise_utf8 { if (defined(Biber::Config->getoption('input_encoding')) and Biber::Config->getoption('input_encoding') =~ m/\Autf-?8\z/xmsi) { Biber::Config->setoption('input_encoding', 'UTF-8'); } if (defined(Biber::Config->getoption('output_encoding')) and Biber::Config->getoption('output_encoding') =~ m/\Autf-?8\z/xmsi) { Biber::Config->setoption('output_encoding', 'UTF-8'); } } =head2 inits We turn the initials into an array so we can be flexible with them later The tie here is used only so we know what to split on. We don't want to make any typesetting decisions in Biber, like what to use to join initials so on output to the .bbl, we only use BibLaTeX macros. =cut sub inits { my $istring = shift; return [ split(/(?{$map}; } } } return $roptions; } =head2 imatch Do an interpolating (neg)match using a match RE and a string passed in as variables =cut sub imatch { my ($value, $val_match, $negmatch) = @_; return 0 unless $val_match; $val_match = qr/$val_match/; if ($negmatch) {# "!~" doesn't work here as we need an array returned return $value =~ m/$val_match/xms ? () : (1); } else { return $value =~ m/$val_match/xms; } } =head2 ireplace Do an interpolating match/replace using a match RE, replacement RE and string passed in as variables =cut sub ireplace { my ($value, $val_match, $val_replace) = @_; return $value unless $val_match; $val_match = qr/$val_match/; # Tricky quoting because of later evals $val_replace = '"' . $val_replace . '"'; $value =~ s/$val_match/$val_replace/eegxms; return $value; } =head2 validate_biber_xml Validate a biber/biblatex XML metadata file against an RNG schema =cut sub validate_biber_xml { my ($file, $type, $prefix) = @_; require XML::LibXML; # Set up XML parser my $xmlparser = XML::LibXML->new(); $xmlparser->line_numbers(1); # line numbers for more informative errors # Set up schema my $xmlschema; # we assume that the schema files are in the same dir as Biber.pm: (my $vol, my $biber_path, undef) = File::Spec->splitpath( $INC{"Biber.pm"} ); $biber_path =~ s/\/$//; # splitpath sometimes leaves a trailing '/' # Deal with the strange world of Par::Packer paths # We might be running inside a PAR executable and @INC is a bit odd in this case # Specifically, "Biber.pm" in @INC might resolve to an internal jumbled name # nowhere near to these files. You know what I mean if you've dealt with pp my $rng; if ($biber_path =~ m|/par\-| and $biber_path !~ m|/inc|) { # a mangled PAR @INC path $rng = File::Spec->catpath($vol, "$biber_path/inc/lib/Biber", "${type}.rng"); } else { $rng = File::Spec->catpath($vol, "$biber_path/Biber", "${type}.rng"); } if (-e $rng) { $xmlschema = XML::LibXML::RelaxNG->new( location => $rng ) } else { biber_warn("Cannot find XML::LibXML::RelaxNG schema. Skipping validation : $!"); return; } # Parse file my $xp = $xmlparser->parse_file($file); # XPath context if ($prefix) { my $xpc = XML::LibXML::XPathContext->new($xp); $xpc->registerNs($type, $prefix); } # Validate against schema. Dies if it fails. eval { $xmlschema->validate($xp) }; if (ref($@)) { $logger->debug( $@->dump() ); biber_error("'$file' failed to validate against schema '$rng'"); } elsif ($@) { biber_error("'$file' failed to validate against schema '$rng'\n$@"); } else { $logger->info("'$file' validates against schema '$rng'"); } undef $xmlparser; } =head2 process_entry_options Set per-entry options =cut sub process_entry_options { my $citekey = shift; my $options = shift; return unless $options; # Just in case it's null foreach (@$options) { s/\s+=\s+/=/g; # get rid of spaces around any "=" m/^([^=]+)(=?)(.+)?$/; my $val; if ($2) { if ($3 eq 'true') { $val = 1; } elsif ($3 eq 'false') { $val = 0; } else { $val = $3; } _expand_option($1, $val, $citekey); } else { _expand_option($1, 1, $citekey); } } return; } =head2 parse_date Simple parse of ISO8601 dates because not decent module exists for this that doesn't default the missing components =cut sub parse_date { my $date = shift; # We are not validating dates here, just syntax parsing my $date_re = qr/(\d{4}) # year (?:-(\d{2}))? # month (?:-(\d{2}))? # day /xms; return $date =~ m|\A$date_re(/)?(?:$date_re)?\z|xms; } =head2 biber_decode_utf8 Perform NFD form conversion as well as UTF-8 conversion. Used to normalize bibtex input as the T::B interface doesn't allow a neat whole file slurping. =cut sub biber_decode_utf8 { return NFD(decode_utf8(shift));# Unicode NFD boundary } =head2 out Output to target. Outputs NFC UTF-8 if output is UTF-8 =cut sub out { my ($fh, $string) = @_; print $fh NFC($string);# Unicode NFC boundary } sub _expand_option { my ($opt, $val, $citekey) = @_; my $cfopt = $CONFIG_BIBLATEX_PER_ENTRY_OPTIONS{lc($opt)}{INPUT}; # Standard option if (not defined($cfopt)) { Biber::Config->setblxoption($opt, $val, 'PER_ENTRY', $citekey); } # Set all split options to same value as parent elsif (ref($cfopt) eq 'ARRAY') { foreach my $k (@$cfopt) { Biber::Config->setblxoption($k, $val, 'PER_ENTRY', $citekey); } } # Specify values per all splits elsif (ref($cfopt) eq 'HASH') { foreach my $k (keys %$cfopt) { Biber::Config->setblxoption($k, $cfopt->{$k}, 'PER_ENTRY', $citekey); } } return; } 1; __END__ =head1 AUTHOR François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Internals.pm000444000000000000 14347312230324176 17633 0ustar00rootroot000000000000package Biber::Internals; use v5.16; use strict; use warnings; use Carp; use Biber::Constants; use Biber::Utils; use Biber::DataModel; use Data::Compare; use List::AllUtils qw( :all ); use Log::Log4perl qw(:no_extra_logdie_message); use Digest::MD5 qw( md5_hex ); use POSIX qw( locale_h ); # for lc() use Unicode::GCString; use Unicode::Normalize; use Encode; =encoding utf-8 =head1 NAME Biber::Internals - Internal methods for processing the bibliographic data =head1 METHODS =cut my $logger = Log::Log4perl::get_logger('main'); sub _getnamehash { my ($self, $citekey, $names) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); my $hashkey = ''; my $count = $names->count_names; my $visible = $names->get_visible_cite; # namehash obeys list truncations but not uniquename foreach my $n (@{$names->first_n_names($visible)}) { if ( $n->get_prefix and Biber::Config->getblxoption('useprefix', $bee, $citekey)) { $hashkey .= $n->get_prefix; } $hashkey .= $n->get_lastname; if ( $n->get_suffix ) { $hashkey .= $n->get_suffix; } if ( $n->get_firstname ) { $hashkey .= $n->get_firstname; } if ( $n->get_middlename ) { $hashkey .= $n->get_middlename; } # without useprefix, prefix is not first in the hash if ( $n->get_prefix and not Biber::Config->getblxoption('useprefix', $bee, $citekey)) { $hashkey .= $n->get_prefix; } } # name list was truncated if ($visible < $count or $names->get_morenames) { $hashkey .= '+'; } $logger->trace("Creating MD5 namehash using '$hashkey'"); # Digest::MD5 can't deal with straight UTF8 so encode it first (via NFC as this is "output") return md5_hex(encode_utf8(NFC($hashkey))); } # Same as _getnamehash but takes account of uniquename setting for firstname # It's used for extra* tracking only sub _getnamehash_u { my ($self, $citekey, $names) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); my $hashkey = ''; my $count = $names->count_names; my $visible = $names->get_visible_cite; # namehash obeys list truncations but not uniquename foreach my $n (@{$names->first_n_names($visible)}) { if ( $n->get_prefix and Biber::Config->getblxoption('useprefix', $bee, $citekey)) { $hashkey .= $n->get_prefix; } $hashkey .= $n->get_lastname; if ( $n->get_suffix ) { $hashkey .= $n->get_suffix; } if ( $n->get_firstname and defined($n->get_uniquename)) { if ($n->get_uniquename eq '2') { $hashkey .= $n->get_firstname; } elsif ($n->get_uniquename eq '1') { $hashkey .= join('', @{$n->get_firstname_i}); } } if ( $n->get_middlename ) { $hashkey .= $n->get_middlename; } # without useprefix, prefix is not first in the hash if ( $n->get_prefix and not Biber::Config->getblxoption('useprefix', $bee, $citekey)) { $hashkey .= $n->get_prefix; } } # name list was truncated if ($visible < $count or $names->get_morenames) { $hashkey .= '+'; } $logger->trace("Creating MD5 namehash_u using '$hashkey'"); # Digest::MD5 can't deal with straight UTF8 so encode it first (via NFC as this is "output") return md5_hex(encode_utf8(NFC($hashkey))); } sub _getfullhash { my ($self, $citekey, $names) = @_; my $hashkey = ''; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); foreach my $n (@{$names->names}) { if ( my $p = $n->get_prefix and Biber::Config->getblxoption('useprefix', $be->get_field('entrytype'), $citekey ) ) { $hashkey .= $p; } $hashkey .= $n->get_lastname; if ( $n->get_suffix ) { $hashkey .= $n->get_suffix; } if ( $n->get_firstname ) { $hashkey .= $n->get_firstname; } if ( $n->get_middlename ) { $hashkey .= $n->get_middlename; } # without useprefix, prefix is not first in the hash if ( my $p = $n->get_prefix and not Biber::Config->getblxoption('useprefix', $be->get_field('entrytype'), $citekey ) ) { $hashkey .= $p; } } # If we had an "and others" if ($names->get_morenames) { $hashkey .= '+' } $logger->trace("Creating MD5 fullhash using '$hashkey'"); # Digest::MD5 can't deal with straight UTF8 so encode it first (via NFC as this is "output") return md5_hex(encode_utf8(NFC($hashkey))); } # Special hash to track per-name information sub _genpnhash { my ($self, $citekey, $n) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $hashkey = ''; if ( my $p = $n->get_prefix and Biber::Config->getblxoption('useprefix', $be->get_field('entrytype'), $citekey ) ) { $hashkey .= $p; } $hashkey .= $n->get_lastname; if ( $n->get_suffix ) { $hashkey .= $n->get_suffix; } if ( $n->get_firstname ) { $hashkey .= $n->get_firstname; } if ( $n->get_middlename ) { $hashkey .= $n->get_middlename; } # without useprefix, prefix is not first in the hash if ( $n->get_prefix and not Biber::Config->getblxoption('useprefix', $be->get_field('entrytype'), $citekey ) ) { $hashkey .= $n->get_prefix; } $logger->trace("Creating MD5 pnhash using '$hashkey'"); # Digest::MD5 can't deal with straight UTF8 so encode it first (via NFC as this is "output") return md5_hex(encode_utf8(NFC($hashkey))); } ################## # label generation ################## # special label routines - either not part of the dm but special fields for biblatex # or dm fields which need special treatment. Technically users could remove such fields # from the dm but it would be very strange. my %internal_dispatch_label = ( 'label' => [\&_label_basic, ['label', 'nostrip']], 'shorthand' => [\&_label_basic, ['shorthand', 'nostrip']], 'sortkey' => [\&_label_basic, ['sortkey', 'nostrip']], 'citekey' => [\&_label_citekey, []], 'labelname' => [\&_label_name, ['labelname']], 'labeltitle' => [\&_label_basic, ['labeltitle']], 'labelmonth' => [\&_label_basic, ['labelmonth']], 'labelday' => [\&_label_basic, ['labelday']], 'labelyear' => [\&_label_basic, ['labelyear']]); sub _dispatch_table_label { my ($field, $dm) = @_; # internal fields not part of the data model if (my $id = $internal_dispatch_label{$field}) { return $id; } # Label elements which aren't fields unless ($dm->is_field($field)) { return undef; } # Fields which are part of the datamodel my ($t, $dt) = $dm->get_dm_for_field($field); if ($t eq 'list' and $dt eq 'name') { return [\&_label_name, [$field]]; } else { return [\&_label_basic, [$field]]; } } # Main label loop sub _genlabel { my ($self, $citekey) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $labelalphatemplate = Biber::Config->getblxoption('labelalphatemplate', $be->get_field('entrytype')); my $label; my $slabel; $LABEL_FINAL = 0; # reset final shortcut foreach my $labelpart (sort {$a->{order} <=> $b->{order}} @{$labelalphatemplate->{labelelement}}) { my $ret = _labelpart($self, $labelpart->{labelpart}, $citekey); $label .= $ret->[0]; $slabel .= $ret->[1]; last if $LABEL_FINAL; } return [ $label, $slabel ]; } # Disjunctive set of label parts sub _labelpart { my ($self, $labelpart, $citekey) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); my $dm = Biber::Config->get_dm; my $maxan = Biber::Config->getblxoption('maxalphanames', $bee, $citekey); my $minan = Biber::Config->getblxoption('minalphanames', $bee, $citekey); my $lp; my $slp; foreach my $part (@$labelpart) { # Implement defaults not set by biblatex itself unless (exists($part->{substring_fixed_threshold})) { $part->{substring_fixed_threshold} = 1; } # Deal with various tests # ifnamecount only uses this label template part if the list it is applied to is a certain # length if (my $ic = $part->{ifnamecount}) { my $f = $part->{content}; if ( first {$f eq $_} @{$dm->get_fields_of_type('list', 'name')} or $f eq 'labelname') { # get-field doesn't need form/lang here as we are just counting names # and we assume that the name count is the same for all forms/langs my $name = $be->get_field($f) || next; # just in case there is no labelname etc. my $total_names = $name->count_names; my $visible_names; if ($total_names > $maxan) { $visible_names = $minan; } else { $visible_names = $total_names; } next unless $visible_names == $ic; } } my $ret = _dispatch_label($self, $part, $citekey); $lp .= $ret->[0]; $slp .= $ret->[1]; # We use the first one to return something if ($ret->[0]) { $LABEL_FINAL = 1 if $part->{final}; last; } } return [ $lp, $slp ]; } # Main label dispatch method sub _dispatch_label { my ($self, $part, $citekey) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $code_ref; my $code_args_ref; my $lp; my $slp; my $dm = Biber::Config->get_dm; # if the field is not found in the dispatch table, assume it's a literal string unless (_dispatch_table_label($part->{content}, $dm)) { $code_ref = \&_label_literal; $code_args_ref = [$part->{content}]; } else { # real label field $code_ref = ${_dispatch_table_label($part->{content}, $dm)}[0]; $code_args_ref = ${_dispatch_table_label($part->{content}, $dm)}[1]; } return &{$code_ref}($self, $citekey, $code_args_ref, $part); } ######################### # Label dispatch routines ######################### sub _label_citekey { my ($self, $citekey, $args, $labelattrs) = @_; my $k = _process_label_attributes($self, $citekey, $citekey, $labelattrs, $args->[0]); return [$k, unescape_label($k)]; } sub _label_basic { my ($self, $citekey, $args, $labelattrs) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $e = $args->[0]; my $f; if ($args->[1] and $args->[1] eq 'nostrip') { $f = $be->get_field($e, $labelattrs->{form}, $labelattrs->{lang}); } else { $f = normalise_string_label($be->get_field($e, $labelattrs->{form}, $labelattrs->{lang})); } if ($f) { my $b = _process_label_attributes($self, $citekey, $f, $labelattrs, $e); return [$b, unescape_label($b)]; } else { return ['', '']; } } # literal string - don't post-process this, there is no point sub _label_literal { my ($self, $citekey, $args, $labelattrs) = @_; my $string = $args->[0]; return [escape_label(unescape_label($string)), unescape_label($string)]; } # names sub _label_name { my ($self, $citekey, $args, $labelattrs) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $useprefix = Biber::Config->getblxoption('useprefix', $be->get_field('entrytype'), $citekey); my $alphaothers = Biber::Config->getblxoption('alphaothers', $be->get_field('entrytype')); my $sortalphaothers = Biber::Config->getblxoption('sortalphaothers', $be->get_field('entrytype')); # Shortcut - if there is no labelname, don't do anything return ['',''] unless defined($be->get_labelname_info); my $namename = $args->[0]; my $acc; # This contains sortalphaothers instead of alphaothers, if defined # This is needed in cases where alphaothers is something like # '\textasteriskcentered' which would mess up sorting. my $sortacc; # Careful to extract the information we need about the real name behind labelname # as we need this to set the use* options below. my $realname; if ($namename eq 'labelname') { $realname = $be->get_labelname_info->{field}; } else { $realname = $namename; } # If $namename is 'labelname', form and lang will be ignored anyway my $nameval = $be->get_field($namename, $labelattrs->{form}, $labelattrs->{lang}); # Account for labelname set to short* when testing use* options my $lnameopt; if ( $realname =~ /\Ashort(\X+)\z/xms ) { $lnameopt = $1; } else { $lnameopt = $realname; } if (Biber::Config->getblxoption("use$lnameopt", $be->get_field('entrytype'), $citekey) and $nameval) { my $numnames = $nameval->count_names; my $visibility = $nameval->get_visible_alpha; my @lastnames = map { strip_nosort(normalise_string($_->get_lastname), $namename) } @{$nameval->names}; my @prefices = map { $_->get_prefix } @{$nameval->names}; my $loopnames; # loopnames is the number of names to loop over in the name list when constructing the label if (my $lc = $labelattrs->{namecount}) { if ($lc > $numnames) { # cap at numnames, of course $lc = $numnames; } $loopnames = $lc; # Only look as many names as specified } else { $loopnames = $visibility; # Else use bib visibility } for (my $i = 0; $i < $loopnames; $i++) { $acc .= Unicode::GCString->new($prefices[$i])->substr(0,1)->as_string if ($useprefix and $prefices[$i]); $acc .= _process_label_attributes($self, $citekey, $lastnames[$i], $labelattrs, $namename, 'lastname', $i); } $sortacc = $acc; # Add alphaothers if name list is truncated if ($numnames > $loopnames or $nameval->get_morenames) { $acc .= $alphaothers // ''; # alphaothers can be undef $sortacc .= $sortalphaothers // ''; # sortalphaothers can be undef } return [$acc, unescape_label($sortacc)]; } else { return ['', '']; } } # Label generation utilities # Modify label string according to some attributes # We use different caches for the "v" and "l" schemes because they have a different format # internally and interfere with each other between resets in prepare() otherwise sub _process_label_attributes { my ($self, $citekey, $field_string, $labelattrs, $field, $namepart, $index) = @_; return $field_string unless $labelattrs; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my @citekeys = $section->get_citekeys; my $nindex = first_index {$_ eq $citekey} @citekeys; if (defined($labelattrs->{substring_width})) { # dynamically disambiguated width (individual name disambiguation) if ($labelattrs->{substring_width} =~ /v/ and $field) { # Use the cache if there is one if (my $lcache = $section->get_labelcache_v($field)) { $logger->debug("Using label disambiguation cache (name) for '$field' in section $secnum"); # Use the global index override if set (substring_width =~ /f/) $field_string = ${$lcache->{$field_string}{data}}[$lcache->{globalindices}{$field_string} || $lcache->{$field_string}{index}]; } else { # This contains a mapping of strings to substrings of increasing lengths my %substr_cache = (); my $lcache = {}; # Get the indices of each field (or namepart) we are dealing with my %indices; foreach my $key (@citekeys) { if (my $f = $section->bibentry($key)->get_field($field, $labelattrs->{form}, $labelattrs->{lang})) { if ($namepart) { foreach my $n (@{$f->first_n_names($f->get_visible_alpha)}) { # Do strip/nosort here as that's what we also do to the field contents # we will use to look up in this hash later $indices{strip_nosort(normalise_string($n->get_namepart($namepart)), $field)} = $n->get_index; } } else { $indices{$f} = 0; } } } # This ends up as a flat list due to array interpolation my @strings = uniq keys %indices; # Look to the index of the longest string or the explicit max width if set my $maxlen = $labelattrs->{substring_width_max} || max map {Unicode::GCString->new($_)->length} @strings; for (my $i = 1; $i <= $maxlen; $i++) { foreach my $map (map { my $s = Unicode::GCString->new($_)->substr(0, $i)->as_string; $substr_cache{$s}++; [$_, $s] } @strings) { # We construct a list of all substrings, up to the length of the longest string # or substring_width_max. Then we save the index of the list element which is # the minimal disambiguation if it's not yet defined push @{$lcache->{$map->[0]}{data}}, $map->[1]; $lcache->{$map->[0]}{nameindex} = $indices{$map->[0]}; if (not exists($lcache->{$map->[0]}{index}) and ($substr_cache{$map->[1]} == 1 or $i == $maxlen)) { # -1 to make it into a clean array index $lcache->{$map->[0]}{index} = Unicode::GCString->new($map->[1])->length - 1; } } } # We want to use a string width for all strings equal to the longest one needed # to disambiguate this list. We do this by saving an override for the minimal # disambiguation length per index if ($labelattrs->{substring_width} =~ /f/) { # Get the uniqueness indices of all of the strings and strip out those # which don't occur at least substring_fixed_threshold times my $is; foreach my $v (values %$lcache) { $is->{$v->{nameindex}}{$v->{index}}++; } # Now set a new global index for the name part index which is the maximum of those # occuring above a certain threshold foreach my $s (keys %$lcache) { foreach my $ind (keys %$is) { next unless $indices{$s} == $ind; $lcache->{globalindices}{$s} = max grep {$is->{$ind}{$_} >= $labelattrs->{substring_fixed_threshold} } keys %{$is->{$ind}}; } } } # Use the global index override if set (substring_width =~ /f/) $field_string = ${$lcache->{$field_string}{data}}[$lcache->{globalindices}{$field_string} || $lcache->{$field_string}{index}]; $logger->debug("Creating label disambiguation cache for '$field' " . ($namepart ? "($namepart) " : '') . "in section $secnum"); $logger->trace("Label disambiguation cache for '$field' " . ($namepart ? "($namepart) " : '') . "in section $secnum:\n " . Data::Dump::pp($lcache)); $section->set_labelcache_v($field, $lcache); } } # dynamically disambiguated width (list disambiguation) elsif ($labelattrs->{substring_width} =~ /l/ and $field) { # Use the cache if there is one if (my $lcache = $section->get_labelcache_l($field)) { $logger->debug("Using label disambiguation cache (list) for '$field' in section $secnum"); $field_string = $lcache->{data}[$nindex][$index]; } else { # This retains the structure of the entries for the "l" list disambiguation # Have to be careful if field "$f" is not set for all entries my $strings = [map {my $f = $section->bibentry($_)->get_field($field, $labelattrs->{form}, $labelattrs->{lang}); $f ? ($namepart ? [map {$_->get_namepart($namepart)} @{$f->first_n_names($f->get_visible_alpha)}] : [$f]) : [''] } @citekeys]; my $lcache = _label_listdisambiguation($strings); $field_string = $lcache->{data}[$nindex][$index]; $logger->debug("Creating label disambiguation (list) cache for '$field' " . ($namepart ? "($namepart) " : '') . "in section $secnum"); $logger->trace("Label disambiguation (list) cache for '$field' " . ($namepart ? "($namepart) " : '') . "in section $secnum:\n " . Data::Dump::pp($lcache)); $section->set_labelcache_l($field, $lcache); } } # static substring width else { my $subs_offset = 0; my $default_substring_width = 1; my $default_substring_side = 'left'; my $subs_width = ($labelattrs->{substring_width} or $default_substring_width); my $subs_side = ($labelattrs->{substring_side} or $default_substring_side); my $padchar = $labelattrs->{pad_char}; if ($subs_side eq 'right') { $subs_offset = 0 - $subs_width; } # If desired, do the substring on all part of compound strings # (strings with internal spaces or hyphens) if ($labelattrs->{substring_compound}) { my $tmpstring; foreach my $part (split(/[ -]+/, $field_string)) { $tmpstring .= Unicode::GCString->new($part)->substr($subs_offset, $subs_width)->as_string; } $field_string = $tmpstring; } else { $field_string = Unicode::GCString->new($field_string)->substr($subs_offset, $subs_width)->as_string; } # Padding if ($padchar) { $padchar = unescape_label($padchar); my $pad_side = ($labelattrs->{pad_side} or 'right'); my $paddiff = $subs_width - Unicode::GCString->new($field_string)->length; if ($paddiff) { if ($pad_side eq 'right') { $field_string .= $padchar x $paddiff; } elsif ($pad_side eq 'left') { $field_string = $padchar x $paddiff . $field_string; } } $field_string = escape_label($field_string); } } } # Case changes if ($labelattrs->{uppercase} and $labelattrs->{lowercase}) { # do nothing if both are set, for sanity } elsif ($labelattrs->{uppercase}) { $field_string = uc($field_string); } elsif ($labelattrs->{lowercase}) { $field_string = lc($field_string); } return $field_string; } # This turns a list of label strings: # [ # ['Agassi', 'Chang', 'Laver', 'bob'], # ['Agassi', 'Chang', 'Laver'], # ['Agassi', 'Chang', 'Laver'], # ['Agassi', 'Connors', 'Lendl'], # ['Agassi', 'Courier', 'Laver'], # ['Borg', 'Connors', 'Edberg'], # ['Borg', 'Connors', 'Emerson'], # ['Becker', 'Connors', 'Emerson'], # ['Becker'] # ['Zoo', 'Xaa'], # ['Zoo', 'Xaa'], # ['Zaa'], # ['Abc', 'Abc', 'Abc'], # ['Abc', 'Abc', 'Abc'], # ['Abc', 'Abc', 'Abc'] # ] # # # into a disambiguated list of substrings: # # { data => [ # ['A', 'C', 'L', 'b'], # ['A', 'Ch', 'L' ], # ['A', 'Ch', 'L' ], # ['A', 'Co', 'L' ], # ['A', 'C', 'L' ], # ['B', 'C', 'Ed' ], # ['Bo', 'C', 'E' ], # ['B', 'C', 'E' ], # ['B' ] # ['Z' 'X' ] # ['Z' 'X' ] # ['Z' ] # ['A', 'A', 'A' ] # ['A', 'A', 'A' ] # ['A', 'A', 'A' ] # ], # } # sub _label_listdisambiguation { my $strings = shift; # Cache map says which index are we substr'ing to for each name. # Starting default is first char from each my $cache->{substr_map} = [map {[map {1} @$_]} @$strings]; my $lcache->{data} = [map {undef} @$strings]; # First flag any duplicates so we can shortcut setting these later my @dups; for (my $i = 0; $i <= $#$strings; $i++) { $dups[$i] = join('', @{$strings->[$i]}); } _do_substr($lcache, $cache, $strings); # loop until the entire disambiguation cache is filled. while (grep { !defined } @{$lcache->{data}}) { _check_counts($lcache, $cache); foreach my $ambiguous_indices (@{$cache->{ambiguity}}) { my $ambiguous_strings = [@$strings[@$ambiguous_indices]]; # slice # We work on the first in an ambiguous set # We have to find the first name which is not the same as another name in the # same position as we can't disambiguate on the basis of an identical name. For example: # [ # [ 'Smith', 'Jones' ] # [ 'Smith', 'Janes' ] # ] # # Here there is no point trying more characters in "Smith" as it won't help # Special case: If all lists in an ambiguity set are identical, like # # [ # [ 'Smith, 'Jones' ], # [ 'Smith, 'Jones' ], # ] # # Then we can shortcut and take a 1-char substring only # if all name lists in the ambiguous list are in fact the same if (all {Compare($ambiguous_strings->[0], $_)} @$ambiguous_strings) { $lcache->{data}[$ambiguous_indices->[0]] = [map {Unicode::GCString->new($_)->substr(0,1)->as_string} @{$ambiguous_strings->[0]}]; } else { # Get disambiguating list position information _gen_first_disambiguating_name_map($cache, $ambiguous_strings, $ambiguous_indices); # Then increment appropriate substr map $cache->{substr_map}[$ambiguous_indices->[0]][$cache->{name_map}[$ambiguous_indices->[0]]]++; } # Rebuild the cache and loop _do_substr($lcache, $cache, $strings); } } return $lcache; } # Take substrings of name lists according to a map and save the results sub _do_substr { my ($lcache, $cache, $strings) = @_; delete($cache->{keys}); for (my $i = 0; $i <= $#$strings; $i++) { next if defined($lcache->{data}[$i]); # ignore names already disambiguated my $row = $strings->[$i]; my @s; for (my $j = 0; $j <= $#$row; $j++) { push @s, Unicode::GCString->new($row->[$j])->substr(0 ,$cache->{substr_map}[$i][$j])->as_string; } my $js = join('', @s); $cache->{keys}{$js}{index} = $i; # index of the last seen $js key - useless for count >1 push @{$cache->{keys}{$js}{indices}}, $i; $cache->{keys}{$js}{count}++; $cache->{keys}{$js}{strings} = \@s; } } # Push finished disambiguation into results and save still ambiguous labels for loop sub _check_counts { my ($lcache, $cache) = @_; delete($cache->{ambiguity}); foreach my $key (keys %{$cache->{keys}}) { if ($cache->{keys}{$key}{count} > 1) { push @{$cache->{ambiguity}}, $cache->{keys}{$key}{indices}; } else { $lcache->{data}[$cache->{keys}{$key}{index}] = $cache->{keys}{$key}{strings}; } } } # Find the index of the first name in $array->[0] which doesn't # occur in any other of $array in the same position. This must be the name # which disambiguates. # [ # ['Agassi', 'Chang', 'Laver'], # ['Agassi', 'Chang', 'Laver'], # ['Agassi', 'Connors', 'Lendl'], # ['Agassi', 'Courier', 'Laver'], # ['Agassi', 'Courier', 'Lendl'], # ] # results in # $cache->{name_map} = [ 1, 1, 1, 1, 2 ] sub _gen_first_disambiguating_name_map { my ($cache, $array, $indices) = @_; for (my $i = 0; $i <= $#$array; $i++) { my @check_array = @$array; splice(@check_array, $i, 1); # Remove duplicates from the check array otherwise the duplicate makes generating the # name disambiguation index fail because there is a same name in every position @check_array = grep {not Compare($array->[$i], $_)} @check_array; # all ambiguous must be same length (otherwise they wouldn't be ambiguous) my $len = $#{$array->[0]}; for (my $j = 0; $j <= $len; $j++) { # if no other name equal to this one in same place, this is the index of the name # to use for disambiguation unless (grep {$array->[$i][$j] eq $_} map {$_->[$j]} @check_array) { $cache->{name_map}[$indices->[$i]] = $j; last; } } } } ######### # Sorting ######### our $sorting_sep = ','; # special sorting routines - not part of the dm but special fields for biblatex my %internal_dispatch_sorting = ( 'editoratype' => [\&_sort_editort, ['editoratype']], 'editorbtype' => [\&_sort_editort, ['editorbtype']], 'editorctype' => [\&_sort_editort, ['editorctype']], 'citeorder' => [\&_sort_citeorder, []], 'labelalpha' => [\&_sort_labelalpha, []], 'labelname' => [\&_sort_labelname, []], 'labeltitle' => [\&_sort_labeltitle, []], 'labelyear' => [\&_sort_labeldate, ['year']], 'labelmonth' => [\&_sort_labeldate, ['month']], 'labelday' => [\&_sort_labeldate, ['day']], 'presort' => [\&_sort_presort, []], 'sortname' => [\&_sort_sortname, []], 'entrykey' => [\&_sort_entrykey, []]); # The value is an array pointer, first element is a code pointer, second is # a pointer to extra arguments to the code. This is to make code re-use possible # so the sorting can share code for similar things. sub _dispatch_table_sorting { my ($field, $dm) = @_; # internal fields not part of the data model if (my $id = $internal_dispatch_sorting{$field}) { return $id; } # Sorting elements which aren't fields unless ($dm->is_field($field)) { return undef; } # Fields which are part of the datamodel my ($t, $dt) = $dm->get_dm_for_field($field); if ($t eq 'list' and $dt eq 'name') { return [\&_sort_name, [$field]]; } elsif ($t eq 'field' and $dt eq 'literal') { return [\&_sort_literal, [$field]]; } elsif ($t eq 'field' and ($dt eq 'integer' or $dt eq 'datepart')) { return [\&_sort_integer, [$field]]; } elsif ($t eq 'list' and ($dt eq 'literal' or $dt eq 'key')) { return [\&_sort_list, [$field]]; } elsif ($t eq 'field' and $dt eq 'key') { return [\&_sort_literal, [$field]]; } } # Main sorting dispatch method sub _dispatch_sorting { my ($self, $sortfield, $citekey, $sortelementattributes) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $code_ref; my $code_args_ref; my $dm = Biber::Config->get_dm; # If this field is excluded from sorting for this entrytype, then skip it and return if (my $se = Biber::Config->getblxoption('sortexclusion', $be->get_field('entrytype'))) { if ($se->{$sortfield}) { return ''; } } # if the field is not found in the dispatch table, assume it's a literal string unless (_dispatch_table_sorting($sortfield, $dm)) { $code_ref = \&_sort_string; $code_args_ref = [$sortfield]; } else { # real sorting field $code_ref = ${_dispatch_table_sorting($sortfield, $dm)}[0]; $code_args_ref = ${_dispatch_table_sorting($sortfield, $dm)}[1]; } return &{$code_ref}($self, $citekey, $sortelementattributes, $code_args_ref); } # Conjunctive set of sorting sets sub _generatesortinfo { my ($self, $citekey, $list, $sortscheme) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $sortobj; $BIBER_SORT_FINAL = 0; $BIBER_SORT_FINAL = ''; foreach my $sortset (@{$sortscheme}) { my $s = $self->_sortset($sortset, $citekey); # We have already found a "final" item so if this item returns null, # copy in the "final" item string as it's the master key for this entry now if ($BIBER_SORT_FINAL and not $BIBER_SORT_NULL) { push @$sortobj, $BIBER_SORT_FINAL; } else { push @$sortobj, $s; } } # Record the information needed for sorting later # sortstring isn't actually used to sort, it's used to generate sortinit and # for debugging purposes my $ss = join($sorting_sep, @$sortobj); $list->set_sortdata($citekey, [$ss, $sortobj]); $logger->debug("Sorting object for key '$citekey' -> " . Data::Dump::pp($sortobj)); # Generate sortinit - the initial letter of the sortstring. Skip # if there is no sortstring, which is possible in tests if ($ss) { # This must ignore the presort characters, naturally my $pre = Biber::Config->getblxoption('presort', $be->get_field('entrytype'), $citekey); # Strip off the prefix $ss =~ s/\A$pre$sorting_sep+//; my $init = Unicode::GCString->new(normalise_string($ss))->substr(0, 1)->as_string; # Now check if this sortinit is valid in the output_encoding. If not, warn # and replace with a suitable value my $outenc = Biber::Config->getoption('output_encoding'); if ($outenc ne 'UTF-8') { # Can this init be represented in the BBL encoding? if (encode($outenc, NFC($init)) eq '?') { # Malformed data encoding char # So convert to macro my $initd = Biber::LaTeX::Recode::latex_encode($init); # Don't warn if output is ascii as it's fairly pointless since this warning may be # true of a lot of data and drawing attention to just sortinit might be confusing unless ($outenc =~ /(?:x-)?ascii/xmsi) { biber_warn("The character '$init' cannot be encoded in '$outenc'. sortinit will be set to macro '$initd' for entry '$citekey'", $be); } $init = $initd; } } $list->set_sortinitdata_for_key($citekey, $init); } return; } # Process sorting set sub _sortset { my ($self, $sortset, $citekey) = @_; foreach my $sortelement (@$sortset[1..$#$sortset]) { my ($sortelementname, $sortelementattributes) = %$sortelement; $BIBER_SORT_NULL = 0; # reset this per sortset my $string = $self->_dispatch_sorting($sortelementname, $citekey, $sortelementattributes); if ($string) { # sort returns something for this key if ($sortset->[0]{final}) { # If we encounter a "final" element, we return an empty sort # string and save the string so it can be copied into all further # fields as this is now the master sort key. We use an empty string # where we found it in order to preserve sort field order and so # that we sort correctly against all other entries without a value # for this "final" field $BIBER_SORT_FINAL = $string; last; } return $string; } } $BIBER_SORT_NULL = 1; # set null flag - need this to deal with some cases return ''; } ############################################## # Sort dispatch routines ############################################## sub _sort_citeorder { my ($self, $citekey, $sortelementattributes) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); # Pad the numbers so that they sort with "cmp" properly. Assume here max of # a million bib entries. Probably enough ... # Allkeys and sorting=none means use bib order which is in orig_order_citekeys # However, someone might do: # \cite{b,a} # \nocite{*} # in the same section which means we need to use the order attribute for those # keys which have one (the \cited keys) and then an orig_order_citekey index based index # for the nocite ones. my $ko = Biber::Config->get_keyorder($secnum, $citekey);# only for \cited keys if ($section->is_allkeys) { return sprintf('%.7d', $ko || (Biber::Config->get_keyorder_max($secnum) + (first_index {$_ eq $citekey} $section->get_orig_order_citekeys) + 1)); } # otherwise, we need to take account of citations with simulataneous order like # \cite{key1, key2} so this tied sorting order can be further sorted with other fields # Note the fallback of "0" - this is for auto-generated entries which are not cited # and so never have a keyorder entry else { return sprintf('%.7d', $ko || 0); } } sub _sort_integer { my ($self, $citekey, $sortelementattributes, $args) = @_; my $dmtype = $args->[0]; # get day/month field type my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); if (my $field = $be->get_field($dmtype)) { return _process_sort_attributes($field, $sortelementattributes); } else { return ''; } } sub _sort_editort { my ($self, $citekey, $sortelementattributes, $args) = @_; my $edtypeclass = $args->[0]; # get editor type/class field my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); if (Biber::Config->getblxoption('useeditor', $be->get_field('entrytype'), $citekey) and $be->get_field($edtypeclass)) { my $string = $be->get_field($edtypeclass); return _process_sort_attributes($string, $sortelementattributes); } else { return ''; } } sub _sort_entrykey { my ($self, $citekey, $sortelementattributes) = @_; return _process_sort_attributes($citekey, $sortelementattributes); } sub _sort_labelalpha { my ($self, $citekey, $sortelementattributes, $args) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $string = $be->get_field('sortlabelalpha') // ''; return _process_sort_attributes($string, $sortelementattributes); } sub _sort_labelname { my ($self, $citekey, $sortelementattributes, $args) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); # re-direct to the right sorting routine for the labelname if (my $lni = $be->get_labelname_info) { # Don't process attributes as they will be processed in the real sub return $self->_dispatch_sorting($lni->{field}, $citekey, $sortelementattributes); } else { return ''; } } sub _sort_labeltitle { my ($self, $citekey, $sortelementattributes, $args) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); # re-direct to the right sorting routine for the labeltitle if (my $lti = $be->get_labeltitle_info) { # Don't process attributes as they will be processed in the real sub return $self->_dispatch_sorting($lti->{field}, $citekey, $sortelementattributes); } else { return ''; } } sub _sort_labeldate { no autovivification; my ($self, $citekey, $sortelementattributes, $args) = @_; my $ldc = $args->[0]; # labeldate component my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); # re-direct to the right sorting routine for the labeldate component if (my $ldi = $be->get_labeldate_info) { if (my $ldf = $ldi->{field}{$ldc}) { # Don't process attributes as they will be processed in the real sub return $self->_dispatch_sorting($ldf, $citekey, $sortelementattributes); } elsif (exists($ldi->{string})) { # labelyear fallback string return ''; } } else { return ''; } } # This is a meta-sub which uses the optional arguments to the dispatch code # It's done to avoid having many repetitions of almost identical sorting code sub _sort_list { my ($self, $citekey, $sortelementattributes, $args) = @_; my $list = $args->[0]; # get list field my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); if ($be->get_field($list, $sortelementattributes->{form}, $sortelementattributes->{lang})) { my $string = $self->_liststring($citekey, $list, $sortelementattributes->{form}, $sortelementattributes->{lang}); return _process_sort_attributes($string, $sortelementattributes); } else { return ''; } } # This is a meta-sub which uses the optional arguments to the dispatch code # It's done to avoid having many repetitions of almost identical sorting code # for literal strings which need normalising sub _sort_literal { my ($self, $citekey, $sortelementattributes, $args) = @_; my $literal = $args->[0]; # get actual field my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); if (my $field = $be->get_field($literal, $sortelementattributes->{form}, $sortelementattributes->{lang})) { my $string = normalise_string_sort($field, $literal); return _process_sort_attributes($string, $sortelementattributes); } else { return ''; } } # This is a meta-sub which uses the optional arguments to the dispatch code # It's done to avoid having many repetitions of almost identical sorting code # for the editor roles sub _sort_name { my ($self, $citekey, $sortelementattributes, $args) = @_; my $name = $args->[0]; # get name field name my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); # If there is a biblatex option which controls the use of this name, check it if ($CONFIG_SCOPE_BIBLATEX{"use$name"} and not Biber::Config->getblxoption("use$name", $be->get_field('entrytype'), $citekey)) { return ''; } if ($be->get_field($name, $sortelementattributes->{form}, $sortelementattributes->{lang})) { my $string = $self->_namestring($citekey, $name, $sortelementattributes->{form}, $sortelementattributes->{lang}); return _process_sort_attributes($string, $sortelementattributes); } else { return ''; } } sub _sort_presort { my ($self, $citekey, $sortelementattributes) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $string = Biber::Config->getblxoption('presort', $be->get_field('entrytype'), $citekey); return _process_sort_attributes($string, $sortelementattributes); } sub _sort_sortname { my ($self, $citekey, $sortelementattributes) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); # see biblatex manual §3.4 - sortname is ignored if no use option is defined if ($be->get_field('sortname', $sortelementattributes->{form}, $sortelementattributes->{lang}) and (Biber::Config->getblxoption('useauthor', $be->get_field('entrytype'), $citekey) or Biber::Config->getblxoption('useeditor', $be->get_field('entrytype'), $citekey) or Biber::Config->getblxoption('useetranslator', $be->get_field('entrytype'), $citekey))) { my $string = $self->_namestring($citekey, 'sortname', $sortelementattributes->{form}, $sortelementattributes->{lang}); return _process_sort_attributes($string, $sortelementattributes); } else { return ''; } } sub _sort_string { my ($self, $citekey, $sortelementattributes, $args) = @_; my $string = $args->[0]; # get literal string return _process_sort_attributes($string, $sortelementattributes); } #======================================================== # Utility subs used elsewhere but relying on sorting code #======================================================== sub _process_sort_attributes { my ($field_string, $sortelementattributes) = @_; return $field_string unless $sortelementattributes; return $field_string unless $field_string; # process substring if ($sortelementattributes->{substring_width} or $sortelementattributes->{substring_side}) { my $subs_offset = 0; my $default_substring_width = 4; my $default_substring_side = 'left'; my $subs_width = ($sortelementattributes->{substring_width} or $default_substring_width); my $subs_side = ($sortelementattributes->{substring_side} or $default_substring_side); if ($subs_side eq 'right') { $subs_offset = 0 - $subs_width; } $field_string = Unicode::GCString->new($field_string)->substr($subs_offset, $subs_width)->as_string; } # Process padding if ($sortelementattributes->{pad_side} or $sortelementattributes->{pad_width} or $sortelementattributes->{pad_char}) { my $default_pad_width = 4; my $default_pad_side = 'left'; my $default_pad_char = '0'; my $pad_width = ($sortelementattributes->{pad_width} or $default_pad_width); my $pad_side = ($sortelementattributes->{pad_side} or $default_pad_side); my $pad_char = ($sortelementattributes->{pad_char} or $default_pad_char); my $pad_length = $pad_width - Unicode::GCString->new($field_string)->length; if ($pad_side eq 'left') { $field_string = ($pad_char x $pad_length) . $field_string; } elsif ($pad_side eq 'right') { $field_string = $field_string . ($pad_char x $pad_length); } } return $field_string; } # This is used to generate sorting string for names sub _namestring { my $self = shift; my ($citekey, $field, $form, $lang) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); my $names = $be->get_field($field, $form, $lang); my $str = ''; my $count = $names->count_names; my $visible = $names->get_visible_bib; # get visibility for bib - can be different to cite # These should be symbols which can't appear in names and which sort before all alphanum # so that "Alan Smith" sorts after "Al Smith". This means, symbols which normalise_string_sort() # strips out. Unfortuately, this means using punctuation and these are by default variable # weight and ignorable in DUCET so we have to set U::C to variable=>'non-ignorable' as # sorting default so that they are non-ignorable my $nsi = '!'; # name separator, internal my $nse = '#'; # name separator, external # Guaranteed to sort after everything else as it's the last legal Unicode code point my $trunc = "\x{10FFFD}"; # sort string for "et al" truncated name # We strip nosort first otherwise normalise_string_sort damages diacritics # We strip each individual component instead of the whole thing so we can use # as name separators things which would otherwise be stripped. This way we # guarantee that the separators are never in names foreach my $n (@{$names->first_n_names($visible)}) { # If useprefix is true, use prefix at start of name for sorting if ( $n->get_prefix and Biber::Config->getblxoption('useprefix', $bee, $citekey ) ) { $str .= normalise_string_sort($n->get_prefix, $field) . $nsi; } # Append last name $str .= normalise_string_sort($n->get_lastname, $field) . $nsi; # Append first name or inits if sortfirstinits is set if (Biber::Config->getoption('sortfirstinits')) { $str .= normalise_string_sort(join('', @{$n->get_firstname_i}), $field) . $nsi if $n->get_firstname_i; } else { $str .= normalise_string_sort($n->get_firstname, $field) . $nsi if $n->get_firstname; } # Append suffix $str .= normalise_string_sort($n->get_suffix, $field) . $nsi if $n->get_suffix; # If useprefix is false, use prefix at end of name if ( $n->get_prefix and not Biber::Config->getblxoption('useprefix', $be->get_field('entrytype'), $citekey ) ) { $str .= normalise_string_sort($n->get_prefix, $field) . $nsi; } $str =~ s/\Q$nsi\E\z//xms; # Remove any trailing internal separator $str .= $nse; # Add separator in between names } $str =~ s/\s+\Q$nse\E/$nse/gxms; # Remove any whitespace before external separator $str =~ s/\Q$nse\E\z//xms; # strip final external separator as we have finished $str .= $trunc if $visible < $count; # name list was truncated return $str; } sub _liststring { my ( $self, $citekey, $field, $form, $lang ) = @_; my $secnum = $self->get_current_section; my $section = $self->sections->get_section($secnum); my $be = $section->bibentry($citekey); my $bee = $be->get_field('entrytype'); my $f = $be->get_field($field, $form, $lang); # _liststring is used in tests so there has to be return '' unless defined($f); # more error checking which will never be needed in normal use my @items = @$f; my $str = ''; my $truncated = 0; # These should be symbols which can't appear in lists and which sort before all alphanum # so that "Alan Smith" sorts after "Al Smth". This means, symbols which normalise_string_sort() # strips out. Unfortuately, this means using punctuation and these are by default variable # weight and ignorable in DUCET so we have to redefine these these symbols after loading DUCET # when sorting so that they are non-ignorable (see Biber.pm) my $lsi = '!'; # list separator, internal # Guaranteed to sort after everything else as it's the last legal Unicode code point my $trunc = "\x{10FFFD}"; # sort string for truncated list # perform truncation according to options minitems, maxitems if ( $#items + 1 > Biber::Config->getblxoption('maxitems', $bee, $citekey) ) { $truncated = 1; @items = splice(@items, 0, Biber::Config->getblxoption('minitems', $bee, $citekey) ); } # separate the items by a string to give some structure $str = join($lsi, map { normalise_string_sort($_, $field)} @items); $str =~ s/\s+\z//xms; $str .= $trunc if $truncated; return $str; } 1; __END__ =head1 AUTHOR François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/SortList.pm000444000000000000 2045612230324177 17433 0ustar00rootroot000000000000package Biber::SortList; use v5.16; use strict; use warnings; use Biber::Utils; use Biber::Constants; use List::Util qw( first ); =encoding utf-8 =head1 NAME Biber::SortList =head2 new Initialize a Biber::SortList object =cut sub new { my ($class, %params) = @_; my $self = bless {%params}, $class; return $self; } =head2 set_section Sets the section of a sort list =cut sub set_section { my $self = shift; my $section = shift; $self->{section} = lc($section); return; } =head2 get_section Gets the section of a sort list =cut sub get_section { my $self = shift; return $self->{section}; } =head2 set_label Sets the label of a sort list =cut sub set_label { my $self = shift; my $label = shift; $self->{label} = lc($label); return; } =head2 get_label Gets the label of a sort list =cut sub get_label { my $self = shift; return $self->{label}; } =head2 set_type Sets the type of a sort list =cut sub set_type { my $self = shift; my $type = shift; $self->{type} = lc($type); return; } =head2 get_type Gets the type of a section list =cut sub get_type { my $self = shift; return $self->{type}; } =head2 set_keys Sets the keys for the list =cut sub set_keys { my ($self, $keys) = @_; $self->{keys} = $keys; return; } =head2 get_keys Gets the keys for the list =cut sub get_keys { my $self = shift; return @{$self->{keys}}; } =head2 count_keys Count the keys for the list =cut sub count_keys { my $self = shift; return $#{$self->{keys}} + 1; } =head2 get_listdata Gets all of the list metadata =cut sub get_listdata { my $self = shift; return [ $self->{sortscheme}, $self->{keys}, $self->{sortinitdata}, $self->{extrayeardata}, $self->{extraalphadata} ]; } =head2 set_extrayeardata_for_key Saves extrayear field data for a key =cut sub set_extrayeardata_for_key { my ($self, $key, $ed) = @_; return unless defined($key); $self->{extrayeardata}{$key} = $ed; return; } =head2 set_extrayeardata Saves extrayear field data for all keys =cut sub set_extrayeardata { my ($self, $ed) = @_; $self->{extrayeardata} = $ed; return; } =head2 get_extrayeardata Gets the extrayear field data for a key =cut sub get_extrayeardata { my ($self, $key) = @_; return unless defined($key); return $self->{extrayeardata}{$key}; } =head2 set_extratitledata_for_key Saves extratitle field data for a key =cut sub set_extratitledata_for_key { my ($self, $key, $ed) = @_; return unless defined($key); $self->{extratitledata}{$key} = $ed; return; } =head2 set_extratitledata Saves extratitle field data for all keys =cut sub set_extratitledata { my ($self, $ed) = @_; $self->{extratitledata} = $ed; return; } =head2 get_extratitledata Gets the extratitle field data for a key =cut sub get_extratitledata { my ($self, $key) = @_; return unless defined($key); return $self->{extratitledata}{$key}; } =head2 set_extratitleyeardata_for_key Saves extratitleyear field data for a key =cut sub set_extratitleyeardata_for_key { my ($self, $key, $ed) = @_; return unless defined($key); $self->{extratitleyeardata}{$key} = $ed; return; } =head2 set_extratitleyeardata Saves extratitleyear field data for all keys =cut sub set_extratitleyeardata { my ($self, $ed) = @_; $self->{extratitleyeardata} = $ed; return; } =head2 get_extratitleyeardata Gets the extratitleyear field data for a key =cut sub get_extratitleyeardata { my ($self, $key) = @_; return unless defined($key); return $self->{extratitleyeardata}{$key}; } =head2 set_extraalphadata_for_key Saves extraalpha field data for a key =cut sub set_extraalphadata_for_key { my ($self, $key, $ed) = @_; return unless defined($key); $self->{extraalphadata}{$key} = $ed; return; } =head2 set_extraalphadata Saves extraalpha field data for all keys =cut sub set_extraalphadata { my ($self, $ed) = @_; $self->{extraalphadata} = $ed; return; } =head2 get_extraalphadata Gets the extraalpha field data for a key =cut sub get_extraalphadata { my ($self, $key) = @_; return unless defined($key); return $self->{extraalphadata}{$key}; } =head2 set_sortdata Saves sorting data in a list for a key =cut sub set_sortdata { my ($self, $key, $sd) = @_; return unless defined($key); $self->{sortdata}{$key} = $sd; return; } =head2 get_sortdata Gets the sorting data in a list for a key =cut sub get_sortdata { my ($self, $key) = @_; return unless defined($key); return $self->{sortdata}{$key}; } =head2 set_sortinitdata_for_key Saves sortinit data for a specific key =cut sub set_sortinitdata_for_key { my ($self, $key, $sid) = @_; return unless defined($key); $self->{sortinitdata}{$key} = $sid; return; } =head2 set_sortinitdata Saves sortinit data for all keys =cut sub set_sortinitdata { my ($self, $sid) = @_; $self->{sortinitdata} = $sid; return; } =head2 get_sortinitdata Gets the sortinit data in a list for a key =cut sub get_sortinitdata { my ($self, $key) = @_; return unless defined($key); return $self->{sortinitdata}{$key}; } =head2 set_sortscheme Sets the sortscheme of a list =cut sub set_sortscheme { my $self = shift; my $sortscheme = shift; $self->{sortscheme} = $sortscheme; return; } =head2 get_sortscheme Gets the sortscheme of a list =cut sub get_sortscheme { my $self = shift; return $self->{sortscheme}; } =head2 add_filter Adds a filter to a list object =cut sub add_filter { my $self = shift; my ($type, $values) = @_; # Disjunctive filters are not simple values if ($type eq 'orfilter') { $self->{filters}{$type} = $values; } else { $self->{filters}{$type} = [ split(/\s*,\s*/,$values) ]; } return; } =head2 get_filter Gets a specific filter from a list object =cut sub get_filter { my $self = shift; my $type = shift; return $self->{filters}{$type}; } =head2 get_filters Gets all filters for a list object =cut sub get_filters { my $self = shift; return $self->{filters}; } =head2 instantiate_entry Do any dynamic information replacement for information which varies in an entry between lists. This is information which needs to be output to the .bbl for an entry but which is a property of the sorting list and not the entry per se so it cannot be stored statically in the entry and must be pulled from the specific list when outputting the entry. Currently this means: * sortinit * extrayear * extraalpha =cut sub instantiate_entry { my $self = shift; my $entry = shift; my $key = shift; return '' unless $entry; my $entry_string = $$entry; # sortinit my $sid = $self->get_sortinitdata($key); if (defined($sid)) { my $si = "\\field{sortinit}{$sid}"; $entry_string =~ s|SORTINIT|$si|gxms; } # extrayear my $eys; if (my $e = $self->get_extrayeardata($key)) { $eys = " \\field{extrayear}{$e}\n"; $entry_string =~ s|^\s*EXTRAYEAR\n|$eys|gxms; } # extratitle my $ets; if (my $e = $self->get_extratitledata($key)) { $ets = " \\field{extratitle}{$e}\n"; $entry_string =~ s|^\s*EXTRATITLE\n|$ets|gxms; } # extratitle my $etys; if (my $e = $self->get_extratitleyeardata($key)) { $etys = " \\field{extratitleyear}{$e}\n"; $entry_string =~ s|^\s*EXTRATITLEYEAR\n|$etys|gxms; } # extraalpha my $eas; if (my $e = $self->get_extraalphadata($key)) { $eas = " \\field{extraalpha}{$e}\n"; $entry_string =~ s|^\s*EXTRAALPHA\n|$eas|gxms; } return $entry_string; } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Config.pm000444000000000000 13735312230324176 17101 0ustar00rootroot000000000000package Biber::Config; use v5.16; use Biber; use Biber::Constants; use IPC::Cmd qw( can_run ); use IPC::Run3; # This works with PAR::Packer and Windows. IPC::Run doesn't use Cwd qw( abs_path ); use Data::Compare; use Data::Dump; use Carp; use List::AllUtils qw(first max); use Log::Log4perl qw( :no_extra_logdie_message ); # To keep PAR::Packer happy, explicitly load these use Log::Log4perl::Appender::Screen; use Log::Log4perl::Appender::File; use Log::Log4perl::Layout::SimpleLayout; use Log::Log4perl::Layout::PatternLayout; our $VERSION = '1.8'; our $BETA_VERSION = 0; # Is this a beta version? our $logger = Log::Log4perl::get_logger('main'); our $screen = Log::Log4perl::get_logger('screen'); our $logfile = Log::Log4perl::get_logger('logfile'); =encoding utf-8 =head1 NAME Biber::Config - Configuration items which need to be saved across the lifetime of a Biber object This class contains a static object and static methods to access configuration and state data. There are several classes of data in here which have separate accessors: * Biber options * Biblatex options * State information used by Biber as it processes entries * displaymode date =cut # Static (class) data our $CONFIG; $CONFIG->{state}{crossrefkeys} = {}; $CONFIG->{state}{seenwork} = {}; # Set tracking, parent->child and child->parent $CONFIG->{state}{set}{pc} = {}; $CONFIG->{state}{set}{cp} = {}; # Citekeys which refer to the same entry $CONFIG->{state}{citkey_aliases} = {}; # Disambiguation data for labelalpha. Used for labelalphatemplate autoinc method $CONFIG->{state}{ladisambiguation} = {}; # Record of which entries have inherited from other fields. Used for loop detection. $CONFIG->{state}{crossref} = []; $CONFIG->{state}{xdata} = []; # Record of which entries have inherited what from whom, with the fields inherited. # Used for generating inheritance trees $CONFIG->{state}{graph} = {}; # For the uniquelist feature. Records the number of times a name list occurs in all entries $CONFIG->{state}{uniquelistcount} = {}; # Boolean to say whether uniquename/uniquelist information has changed # Default is true so that uniquename/uniquelist processing starts $CONFIG->{state}{unulchanged} = 1; # uniquenamecount holds a hash of lastnames and lastname/initials $CONFIG->{state}{uniquenamecount} = {}; # Same as uniquenamecount but for all names, regardless of visibility. Needed to track # uniquelist $CONFIG->{state}{uniquenamecount_all} = {}; # Counter for tracking name/year combinations for extrayear $CONFIG->{state}{seen_nameyear} = {}; # Counter for the actual extrayear value $CONFIG->{state}{seen_extrayear} = {}; # Counter for tracking name/title combinations for extratitle $CONFIG->{state}{seen_nametitle} = {}; # Counter for the actual extratitle value $CONFIG->{state}{seen_extratitle} = {}; # Counter for tracking title/year combinations for extratitleyear $CONFIG->{state}{seen_titleyear} = {}; # Counter for the actual extratitleyear value $CONFIG->{state}{seen_extratitleyear} = {}; # Counter for the actual extraalpha value $CONFIG->{state}{seen_extraalpha} = {}; $CONFIG->{state}{seenkeys} = {}; # Track the order of keys as cited. Keys cited in the same \cite*{} get the same order # Used for sorting schemes which use \citeorder $CONFIG->{state}{keyorder} = {}; # Location of the control file $CONFIG->{state}{control_file_location} = ''; # Data files per section being used by biber $CONFIG->{state}{datafiles} = []; =head2 _init Reset internal hashes to defaults. =cut sub _init { $CONFIG->{options}{biblatex}{PER_ENTRY} = {}; $CONFIG->{state}{unulchanged} = 1; $CONFIG->{state}{control_file_location} = ''; $CONFIG->{state}{seenwork} = {}; $CONFIG->{state}{crossrefkeys} = {}; $CONFIG->{state}{ladisambiguation} = {}; $CONFIG->{state}{uniquenamecount} = {}; $CONFIG->{state}{uniquenamecount_all} = {}; $CONFIG->{state}{uniquelistcount} = {}; $CONFIG->{state}{seen_nameyear} = {}; $CONFIG->{state}{seen_extrayear} = {}; $CONFIG->{state}{seen_nametitle} = {}; $CONFIG->{state}{seen_extratitle} = {}; $CONFIG->{state}{seen_titleyear} = {}; $CONFIG->{state}{seen_extratitleyear} = {}; $CONFIG->{state}{seen_extrayearalpha} = {}; $CONFIG->{state}{seenkeys} = {}; $CONFIG->{state}{datafiles} = []; $CONFIG->{state}{crossref} = []; $CONFIG->{state}{xdata} = []; $CONFIG->{state}{set}{pc} = {}; $CONFIG->{state}{set}{cp} = {}; return; } =head2 _initopts Initialise default options, optionally with config file as argument =cut sub _initopts { shift; # class method so don't care about class name my $opts = shift; my $userconf; # For testing, need to be able to force ignore of conf file in case user # already has one which interferes with test settings. unless (defined($opts->{noconf})) { # if a config file was given as cmd-line arg, it overrides all other # config file locations unless ( defined($opts->{configfile}) and -f $opts->{configfile} ) { $opts->{configfile} = config_file(); } } # Set hard-coded biber option defaults while (my ($k, $v) = each %$CONFIG_DEFAULT_BIBER) { if (exists($v->{content})) { # simple option Biber::Config->setoption($k, $v->{content}); } # mildly complex options elsif (lc($k) eq 'dot_include' or lc($k) eq 'collate_options' or lc($k) eq 'nosort' or lc($k) eq 'noinit' ) { Biber::Config->setoption($k, $v->{option}); } } # Set hard-coded biblatex option defaults foreach (keys %CONFIG_DEFAULT_BIBLATEX) { Biber::Config->setblxoption($_, $CONFIG_DEFAULT_BIBLATEX{$_}); } # There is a special default config file for tool mode # Referring to as yet unprocessed cmd-line tool option as it isn't processed until below if ($opts->{tool}) { (my $vol, my $dir, undef) = File::Spec->splitpath( $INC{"Biber/Config.pm"} ); $dir =~ s/\/$//; # splitpath sometimes leaves a trailing '/' _config_file_set(File::Spec->catpath($vol, "$dir", 'biber-tool.conf')); } # Normal user config file - overrides tool mode defaults, if any _config_file_set($opts->{configfile}); # Command-line overrides everything else foreach my $copt (keys %$opts) { # This is a tricky option as we need to keep non-overriden defaults # If we don't we can get errors when contructing the sorting call to eval() later if (lc($copt) eq 'collate_options') { my $collopts = Biber::Config->getoption('collate_options'); my $copt_h = eval "{ $opts->{$copt} }" or croak('Bad command-line collation options'); # Override defaults with any cmdline settings foreach my $co (keys %$copt_h) { $collopts->{$co} = $copt_h->{$co}; } Biber::Config->setconfigfileoption('collate_options', $collopts); } else { Biber::Config->setcmdlineoption($copt, $opts->{$copt}); } } # Set control file name. In a conditional as @ARGV might not be set in tests if (my $bcf = $ARGV[0]) { # ARGV is ok even in a module $bcf .= '.bcf' unless $bcf =~ m/\.bcf$/; Biber::Config->setoption('bcf', $bcf); # only referenced in biber program } # Set log file name my $biberlog; if (my $log = Biber::Config->getoption('logfile')) { # user specified logfile name # Sanitise user-specified log name $log =~ s/\.blg\z//xms; $biberlog = $log . '.blg'; } elsif (not @ARGV) { # default if no .bcf file specified - mainly in tests Biber::Config->setoption('nolog', 1); } else { # set log to \jobname.blg my $bcf = $ARGV[0]; # ARGV is ok even in a module # Sanitise control file name $bcf =~ s/\.bcf\z//xms; $biberlog = $bcf . '.blg'; } # prepend output directory for log, if specified if (my $outdir = Biber::Config->getoption('output_directory')) { $biberlog = File::Spec->catfile($outdir, $biberlog); } # Setting up Log::Log4perl my $LOGLEVEL; if (Biber::Config->getoption('trace')) { $LOGLEVEL = 'TRACE' } elsif (Biber::Config->getoption('debug')) { $LOGLEVEL = 'DEBUG' } elsif (Biber::Config->getoption('quiet') == 1) { $LOGLEVEL = 'ERROR' } elsif (Biber::Config->getoption('quiet') > 1) { $LOGLEVEL = 'FATAL' } else { $LOGLEVEL = 'INFO' } my $LOGLEVEL_F; my $LOG_MAIN; if (Biber::Config->getoption('nolog')) { $LOG_MAIN = 'Screen'; $LOGLEVEL_F = 'OFF' } else { $LOG_MAIN = 'Logfile, Screen'; $LOGLEVEL_F = $LOGLEVEL } my $LOGLEVEL_S; if (Biber::Config->getoption('onlylog')) { $LOGLEVEL_S = 'OFF' } else { # Max screen loglevel is INFO if (Biber::Config->getoption('quiet') == 1) { $LOGLEVEL_S = 'ERROR'; } elsif (Biber::Config->getoption('quiet') > 1) { $LOGLEVEL_S = 'FATAL' } else { $LOGLEVEL_S = 'INFO'; } } # configuration "file" for Log::Log4perl my $l4pconf = qq| log4perl.category.main = $LOGLEVEL, $LOG_MAIN log4perl.category.screen = $LOGLEVEL_S, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.utf8 = 1 log4perl.appender.Screen.Threshold = $LOGLEVEL_S log4perl.appender.Screen.stderr = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout |; # Only want a logfile appender if --nolog isn't set if ($LOGLEVEL_F ne 'OFF') { $l4pconf .= qq| log4perl.category.logfile = $LOGLEVEL_F, Logfile log4perl.appender.Logfile = Log::Log4perl::Appender::File log4perl.appender.Logfile.utf8 = 1 log4perl.appender.Logfile.Threshold = $LOGLEVEL_F log4perl.appender.Logfile.filename = $biberlog log4perl.appender.Logfile.mode = clobber log4perl.appender.Logfile.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.Logfile.layout.ConversionPattern = [%r] %F{1}:%L> %p - %m%n |; } Log::Log4perl->init(\$l4pconf); my $vn = $VERSION; $vn .= ' (beta)' if $BETA_VERSION; my $tool = ' running in TOOL mode' if Biber::Config->getoption('tool'); $logger->info("This is Biber $vn$tool") unless Biber::Config->getoption('nolog'); $logger->info("Config file is '" . $opts->{configfile} . "'") if $opts->{configfile}; $logger->info("Logfile is '$biberlog'") unless Biber::Config->getoption('nolog'); if (Biber::Config->getoption('debug')) { $screen->info("DEBUG mode: all messages are logged to '$biberlog'") } return; } # read a config file and set options from it sub _config_file_set { my $conf = shift; my $userconf; # Can't use logcroak here because logging isn't initialised yet if (defined($conf)) { require XML::LibXML::Simple; $userconf = XML::LibXML::Simple::XMLin($conf, 'ForceContent' => 1, 'ForceArray' => [ qr/\Aoption\z/, qr/\Amaps\z/, qr/\Amap\z/, qr/\Amap_step\z/, qr/\Aper_type\z/, qr/\Aper_datasource\z/, qr/\Atype_pair\z/, qr/\Ainherit\z/, qr/\Afieldor\z/, qr/\Afieldxor\z/, qr/\Afield\z/, qr/\Aalias\z/, qr/\Aalsoset\z/, qr/\Aconstraints\z/, qr/\Aconstraint\z/, qr/\Aentrytype\z/, qr/\Adatetype\z/, qr/\Acondition\z/, qr/\A(?:or)?filter\z/, qr/\Asortexclusion\z/, qr/\Aexclusion\z/, qr/\Asort\z/, qr/\Asortitem\z/, qr/\Apresort\z/, ], 'NsStrip' => 1, 'KeyAttr' => []) or croak("Failed to read biber config file '$conf'\n $@"); } # Set options from config file. while (my ($k, $v) = each %$userconf) { if (exists($v->{content})) { # simple option Biber::Config->setconfigfileoption($k, $v->{content}); } # mildly complex options - nosort/collate_options elsif (lc($k) eq 'nosort' or lc($k) eq 'noinit' ) { Biber::Config->setconfigfileoption($k, $v->{option}); } # rather complex options elsif (lc($k) eq 'collate_options') { my $collopts = Biber::Config->getoption('collate_options'); # Override defaults with any user settings foreach my $co (@{$v->{option}}) { $collopts->{$co->{name}} = $co->{value}; } Biber::Config->setconfigfileoption($k, $collopts); } elsif (lc($k) eq 'sourcemap') { my $sms; foreach my $sm (@{$v->{maps}}) { if (defined($sm->{level}) and $sm->{level} eq 'driver') { carp("You can't set driver level sourcemaps via biber - use \\DeclareDriverSourcemap in biblatex. Ignoring map."); } elsif (defined($sm->{level}) and $sm->{level} eq 'style') { carp("You can't set style level sourcemaps via biber - use \\DeclareStyleSourcemap in biblatex. Ignoring map."); } else { push @$sms, $sm; } } Biber::Config->setconfigfileoption($k, $sms); } elsif (lc($k) eq 'inheritance') {# This is a biblatex option Biber::Config->setblxoption($k, $v); } elsif (lc($k) eq 'sorting') {# This is a biblatex option # sorting excludes foreach my $sex (@{$v->{sortexclusion}}) { my $excludes; foreach my $ex (@{$sex->{exclusion}}) { $excludes->{$ex->{content}} = 1; } Biber::Config->setblxoption('sortexclusion', $excludes, 'PER_TYPE', $sex->{type}); } # presort defaults foreach my $presort (@{$v->{presort}}) { # Global presort default unless (exists($presort->{type})) { Biber::Config->setblxoption('presort', $presort->{content}); } # Per-type default else { Biber::Config->setblxoption('presort', $presort->{content}, 'PER_TYPE', $presort->{type}); } } Biber::Config->setblxoption('sorting', Biber::_parse_sort($v)); } elsif (lc($k) eq 'datamodel') {# This is a biblatex option Biber::Config->setblxoption('datamodel', $v); } } } =head2 config_file Returns the full path of the B configuration file. If returns the first file found among: =over 4 =item * C in the current directory =item * C<$HOME/.biber.conf> =item * C<$ENV{XDG_CONFIG_HOME}/biber/biber.conf> =item * C<$HOME/Library/biber/biber.conf> (Mac OSX only) =item * C<$ENV{APPDATA}/biber.conf> (Windows only) =item * the output of C (if available on the system). =back If no file is found, it returns C. =cut sub config_file { my $biberconf; if ( -f $BIBER_CONF_NAME ) { $biberconf = abs_path($BIBER_CONF_NAME); } elsif ( -f File::Spec->catfile($ENV{HOME}, ".$BIBER_CONF_NAME" ) ) { $biberconf = File::Spec->catfile($ENV{HOME}, ".$BIBER_CONF_NAME" ); } elsif ( defined $ENV{XDG_CONFIG_HOME} and -f File::Spec->catfile($ENV{XDG_CONFIG_HOME}, "biber", $BIBER_CONF_NAME) ) { $biberconf = File::Spec->catfile($ENV{XDG_CONFIG_HOME}, "biber", $BIBER_CONF_NAME); } elsif ( $^O =~ /(?:Mac|darwin)/ and -f File::Spec->catfile($ENV{HOME}, "Library", "biber", $BIBER_CONF_NAME) ) { $biberconf = File::Spec->catfile($ENV{HOME}, "Library", "biber", $BIBER_CONF_NAME); } elsif ( $^O =~ /Win/ and defined $ENV{APPDATA} and -f File::Spec->catfile($ENV{APPDATA}, "biber", $BIBER_CONF_NAME) ) { $biberconf = File::Spec->catfile($ENV{APPDATA}, "biber", $BIBER_CONF_NAME); } elsif ( can_run('kpsewhich') ) { my $err; run3 [ 'kpsewhich', $BIBER_CONF_NAME ], \undef, \$biberconf, \$err, { return_if_system_error => 1}; if ($? == -1) { biber_error("Error running kpsewhich to look for config file: $err"); } chomp $biberconf; $biberconf =~ s/\cM\z//xms; # kpsewhich in cygwin sometimes returns ^M at the end $biberconf = undef unless $biberconf; # sanitise just in case it's an empty string } else { $biberconf = undef; } return $biberconf; } ############################## # Biber options static methods ############################## =head2 get_unul_done Return a boolean saying whether uniquenename+uniquelist processing is finished =cut sub get_unul_done { shift; # class method so don't care about class name return $CONFIG->{state}{unulchanged} ? 0 : 1; } =head2 set_unul_changed Set a boolean saying whether uniquename+uniquelist has changed =cut sub set_unul_changed { shift; # class method so don't care about class name my $val = shift; $CONFIG->{state}{unulchanged} = $val; return; } =head2 postprocess_biber_opts Place to postprocess biber options when they have been gathered from all the possible places that set them =cut sub postprocess_biber_opts { shift; # class method so don't care about class name # Turn sortcase, sortupper, sortfirstinits into booleans if they are not already # They are not booleans on the command-line/config file so that they # mirror biblatex option syntax for users, for example foreach my $opt ('sortfirstinits', 'sortcase', 'sortupper') { if (exists($CONFIG->{options}{biber}{$opt})) { if ($CONFIG->{options}{biber}{$opt} eq 'true') { $CONFIG->{options}{biber}{$opt} = 1; } elsif ($CONFIG->{options}{biber}{$opt} eq 'false') { $CONFIG->{options}{biber}{$opt} = 0; } unless ($CONFIG->{options}{biber}{$opt} eq '1' or $CONFIG->{options}{biber}{$opt} eq '0') { biber_error("Invalid value for option '$opt'"); } } } } =head2 set_dm Sets the data model information object =cut sub set_dm { shift; my $obj = shift; $CONFIG->{dm} = $obj; return; } =head2 get_dm Gets the data model information object =cut sub get_dm { shift; return $CONFIG->{dm}; } =head2 set_ctrlfile_path Stores the path to the control file =cut sub set_ctrlfile_path { shift; $CONFIG->{control_file_location} = shift; return; } =head2 get_ctrlfile_path Retrieved the path to the control file =cut sub get_ctrlfile_path { shift; return $CONFIG->{control_file_location}; } =head2 setoption Store a Biber config option =cut sub setoption { shift; # class method so don't care about class name my ($opt, $val) = @_; $CONFIG->{options}{biber}{$opt} = $val; return; } =head2 getoption Get a Biber option =cut sub getoption { shift; # class method so don't care about class name my $opt = shift; return $CONFIG->{options}{biber}{$opt}; } =head2 setcmdlineoption Store a Biber command-line option =cut sub setcmdlineoption { shift; # class method so don't care about class name my ($opt, $val) = @_; # Command line options are also options ... $CONFIG->{options}{biber}{$opt} = $CONFIG->{cmdlineoptions}{$opt} = $val; return; } =head2 setconfigfileoption Store a Biber config-file option =cut sub setconfigfileoption { shift; # class method so don't care about class name my ($opt, $val) = @_; # Config file options are also options ... $CONFIG->{options}{biber}{$opt} = $CONFIG->{configfileoptions}{$opt} = $val; return; } =head2 iscmdlineoption Check if an option is explicitly set by user on the command line =cut sub iscmdlineoption { shift; # class method so don't care about class name my $opt = shift; return 1 if defined($CONFIG->{cmdlineoptions}{$opt}); return 0; } =head2 isconfigfileoption Check if an option is explicitly set by user in their config file =cut sub isconfigfileoption { shift; # class method so don't care about class name my $opt = shift; return 1 if defined($CONFIG->{configfileoptions}{$opt}); return 0; } =head2 isexplicitoption Check if an option is explicitly set by user on the command line or in the config file =cut sub isexplicitoption { my $self = shift; my $opt = shift; return 1 if ($self->iscmdlineoption($opt) || $self->isconfigfileoption($opt)); return 0; } ################################# # BibLaTeX options static methods ################################# =head2 setblxoption Set a biblatex option on the appropriate scope =cut sub setblxoption { shift; # class method so don't care about class name my ($opt, $val, $scope, $scopeval) = @_; if (not defined($scope)) { # global is the default if ($CONFIG_SCOPE_BIBLATEX{$opt}->{GLOBAL}) { $CONFIG->{options}{biblatex}{GLOBAL}{$opt} = $val; } } else { # Per-type/entry options need to specify type/entry too if ($CONFIG_SCOPE_BIBLATEX{$opt}->{$scope}) { $CONFIG->{options}{biblatex}{$scope}{$scopeval}{$opt} = $val; } } return; } =head2 getblxoption Get a biblatex option from the global or per entry-type scope getblxoption('option', ['entrytype'], ['citekey']) Returns the value of option. In order of decreasing preference, returns: 1. Biblatex option defined for entry 2. Biblatex option defined for entry type 3. Biblatex option defined globally =cut sub getblxoption { shift; # class method so don't care about class name my ($opt, $entrytype, $citekey) = @_; if ( defined($citekey) and $CONFIG_SCOPE_BIBLATEX{$opt}->{PER_ENTRY} and defined $CONFIG->{options}{biblatex}{PER_ENTRY}{$citekey} and defined $CONFIG->{options}{biblatex}{PER_ENTRY}{$citekey}{$opt}) { return $CONFIG->{options}{biblatex}{PER_ENTRY}{$citekey}{$opt}; } elsif (defined($entrytype) and $CONFIG_SCOPE_BIBLATEX{$opt}->{PER_TYPE} and defined $CONFIG->{options}{biblatex}{PER_TYPE}{lc($entrytype)} and defined $CONFIG->{options}{biblatex}{PER_TYPE}{lc($entrytype)}{$opt}) { return $CONFIG->{options}{biblatex}{PER_TYPE}{lc($entrytype)}{$opt}; } elsif ($CONFIG_SCOPE_BIBLATEX{$opt}->{GLOBAL}) { return $CONFIG->{options}{biblatex}{GLOBAL}{$opt}; } } ############################## # Inheritance state methods ############################## =head2 set_graph Record node and arc connection types for .dot output =cut sub set_graph { shift; # class method so don't care about class name my $type = shift; if ($type eq 'set') { my ($source_key, $target_key) = @_; $logger->debug("Saving DOT graph information type 'set' with SOURCEKEY=$source_key, TARGETKEY=$target_key"); $CONFIG->{state}{graph}{$type}{settomem}{$source_key}{$target_key} = 1; $CONFIG->{state}{graph}{$type}{memtoset}{$target_key} = $source_key; } elsif ($type eq 'xref') { my ($source_key, $target_key) = @_; $logger->debug("Saving DOT graph information type 'xref' with SOURCEKEY=$source_key, TARGETKEY=$target_key"); $CONFIG->{state}{graph}{$type}{$source_key} = $target_key; } elsif ($type eq 'related') { my ($clone_key, $related_key, $target_key) = @_; $logger->debug("Saving DOT graph information type 'related' with CLONEKEY=$clone_key, RELATEDKEY=$related_key, TARGETKEY=$target_key"); $CONFIG->{state}{graph}{$type}{reltoclone}{$related_key}{$clone_key} = 1; $CONFIG->{state}{graph}{$type}{clonetotarget}{$clone_key}{$target_key} = 1; } else { my ($source_key, $target_key, $source_field, $target_field) = @_; $logger->debug("Saving DOT graph information type '$type' with SOURCEKEY=$source_key, TARGETKEY=$target_key, SOURCEFIELD=$source_field, TARGETFIELD=$target_field"); $CONFIG->{state}{graph}{$type}{$source_key}{$source_field}{$target_key} = $target_field; } return; } =head2 get_graph Return an inheritance graph data structure for an inheritance type =cut sub get_graph { shift; # class method so don't care about class name my $type = shift; return $CONFIG->{state}{graph}{$type}; } =head2 set_set_pc Record a parent->child set relationship =cut sub set_set_pc { shift; # class method so don't care about class name my ($parent, $child) = @_; $CONFIG->{state}{set}{pc}{$parent}{$child} = 1; return; } =head2 set_set_cp Record a child->parent set relationship =cut sub set_set_cp { shift; # class method so don't care about class name my ($child, $parent) = @_; $CONFIG->{state}{set}{cp}{$child}{$parent} = 1; return; } =head2 get_set_pc Return a boolean saying if there is a parent->child set relationship =cut sub get_set_pc { shift; # class method so don't care about class name my ($parent, $child) = @_; return exists($CONFIG->{state}{set}{pc}{$parent}{$child}) ? 1 : 0; } =head2 get_set_cp Return a boolean saying if there is a child->parent set relationship =cut sub get_set_cp { shift; # class method so don't care about class name my ($child, $parent) = @_; return exists($CONFIG->{state}{set}{cp}{$child}{$parent}) ? 1 : 0; } =head2 get_set_children Return a list of children for a parent set =cut sub get_set_children { shift; # class method so don't care about class name my $parent = shift; if (exists($CONFIG->{state}{set}{pc}{$parent})) { return (keys %{$CONFIG->{state}{set}{pc}{$parent}}); } else { return (); } } =head2 get_set_parents Return a list of parents for a child of a set =cut sub get_set_parents { shift; # class method so don't care about class name my $child = shift; if (exists($CONFIG->{state}{set}{cp}{$child})) { return (keys %{$CONFIG->{state}{set}{cp}{$child}}); } else { return (); } } =head2 set_inheritance Record that $target inherited information from $source Can be used for crossrefs and xdata. This just records that an entry inherited from another entry, for loop detection. =cut sub set_inheritance { shift; # class method so don't care about class name my ($type, $source, $target) = @_; push @{$CONFIG->{state}{$type}}, {s => $source, t => $target}; return; } =head2 get_inheritance Check if $target directly inherited information from $source Can be used for crossrefs and xdata =cut sub get_inheritance { shift; # class method so don't care about class name my ($type, $source, $target) = @_; return first {$_->{s} eq $source and $_->{t} eq $target} @{$CONFIG->{state}{$type}}; } =head2 is_inheritance_path Checks for an inheritance path from entry $e1 to $e2 Can be used for crossrefs and xdata [ {s => 'A', t => 'B'}, {s => 'A', t => 'E'}, {s => 'B', t => 'C'}, {s => 'C', t => 'D'} ]; =cut sub is_inheritance_path { my ($self, $type, $e1, $e2) = @_; foreach my $dps (grep {$_->{s} eq $e1} @{$CONFIG->{state}{$type}}) { return 1 if $dps->{t} eq $e2; return 1 if is_inheritance_path($self, $type, $dps->{t}, $e2); } return 0; } =head1 labelalpha disambiguation =head2 incr_la_disambiguation Increment a counter to say we have seen this labelalpha =cut sub incr_la_disambiguation { shift; # class method so don't care about class name my $la = shift; $CONFIG->{state}{ladisambiguation}{$la}++; return; } =head2 get_la_disambiguation Get the disambiguation counter for this labelalpha. Return a 0 for undefs to avoid spurious errors. =cut sub get_la_disambiguation { shift; # class method so don't care about class name my $la = shift; return $CONFIG->{state}{ladisambiguation}{$la} // 0; } =head1 keyorder =head2 set_keyorder Set some key order information =cut sub set_keyorder { shift; # class method so don't care about class name my ($section, $key, $keyorder) = @_; $CONFIG->{state}{keyorder}{$section}{$key} = $keyorder; return; } =head2 get_keyorder Get some key order information =cut sub get_keyorder { shift; # class method so don't care about class name my ($section, $key) = @_; return $CONFIG->{state}{keyorder}{$section}{$key}; } =head2 get_keyorder_max Get maximum key order number for a section =cut sub get_keyorder_max { shift; # class method so don't care about class name my $section = shift; return (max values %{$CONFIG->{state}{keyorder}{$section}}) || 0; } =head2 reset_keyorder Reset keyorder - for use in tests where we switch to allkeys =cut sub reset_keyorder { shift; # class method so don't care about class name my $section = shift; delete $CONFIG->{state}{keyorder}{$section}; return; } =head1 seenkey =head2 get_seenkey Get the count of a key =cut sub get_seenkey { shift; # class method so don't care about class name my $key = shift; my $section = shift; # If passed, return count for just this section if (defined($section)) { return $CONFIG->{state}{seenkeys}{$section}{$key}; } else { my $count; foreach my $section (keys %{$CONFIG->{state}{seenkeys}}) { $count += $CONFIG->{state}{seenkeys}{$section}{$key}; } return $count; } } =head2 incr_seenkey Increment the seen count of a key =cut sub incr_seenkey { shift; # class method so don't care about class name my $key = shift; my $section = shift; $CONFIG->{state}{seenkeys}{$section}{$key}++; return; } =head2 get_seenwork Get the count of occurences of a labelname or labeltitle =cut sub get_seenwork { shift; # class method so don't care about class name my $identifier = shift; return $CONFIG->{state}{seenwork}{$identifier}; } =head2 incr_seenwork Increment the count of occurences of a labelname or labeltitle =cut sub incr_seenwork { shift; # class method so don't care about class name my $identifier = shift; $CONFIG->{state}{seenwork}{$identifier}++; return; } =head2 reset_seen_extra Reset the counters for extra* =cut sub reset_seen_extra { shift; # class method so don't care about class name my $ay = shift; $CONFIG->{state}{seen_extrayear} = {}; $CONFIG->{state}{seen_extratitle} = {}; $CONFIG->{state}{seen_extratitleyear} = {}; $CONFIG->{state}{seen_extraalpha} = {}; return; } =head2 incr_seen_extrayear Increment and return the counter for extrayear =cut sub incr_seen_extrayear { shift; # class method so don't care about class name my $ey = shift; return ++$CONFIG->{state}{seen_extrayear}{$ey}; } =head2 incr_seen_extratitle Increment and return the counter for extratitle =cut sub incr_seen_extratitle { shift; # class method so don't care about class name my $et = shift; return ++$CONFIG->{state}{seen_extratitle}{$et}; } =head2 incr_seen_extratitleyear Increment and return the counter for extratitleyear =cut sub incr_seen_extratitleyear { shift; # class method so don't care about class name my $ety = shift; return ++$CONFIG->{state}{seen_extratitleyear}{$ety}; } =head2 incr_seen_extraalpha Increment and return the counter for extraalpha =cut sub incr_seen_extraalpha { shift; # class method so don't care about class name my $ea = shift; return ++$CONFIG->{state}{seen_extraalpha}{$ea}; } =head2 get_seen_nameyear Get the count of an labelname/labelyear combination for tracking extrayear. It uses labelyear plus name as we need to disambiguate entries with different labelyear (like differentiating 1984--1986 from just 1984) =cut sub get_seen_nameyear { shift; # class method so don't care about class name my $ny = shift; return $CONFIG->{state}{seen_nameyear}{$ny}; } =head2 incr_seen_nameyear Increment the count of an labelname/labelyear combination for extrayear We pass in the name and year strings seperately as we have to be careful and only increment this counter beyond 1 if there is a name component. Otherwise, extrayear gets defined for all entries with no name but the same year etc. =cut sub incr_seen_nameyear { shift; # class method so don't care about class name my ($ns, $ys) = @_; my $tmp = "$ns,$ys"; # We can always increment this to 1 unless ($CONFIG->{state}{seen_nameyear}{$tmp}) { $CONFIG->{state}{seen_nameyear}{$tmp}++; } # But beyond that only if we have a labelname in the entry since # this counter is used to create extrayear which doesn't mean anything for # entries with no name # We allow empty year so that we generate extrayear for the same name with no year # so we can do things like "n.d.-a", "n.d.-b" etc. else { if ($ns) { $CONFIG->{state}{seen_nameyear}{$tmp}++; } } return; } =head2 get_seen_nametitle Get the count of an labelname/labeltitle combination for tracking extratitle. =cut sub get_seen_nametitle { shift; # class method so don't care about class name my $nt = shift; return $CONFIG->{state}{seen_nametitle}{$nt}; } =head2 incr_seen_nametitle Increment the count of an labelname/labeltitle combination for extratitle We pass in the name and year strings seperately as we have to be careful and only increment this counter beyond 1 if there is a title component. Otherwise, extratitle gets defined for all entries with no title. =cut sub incr_seen_nametitle { shift; # class method so don't care about class name my ($ns, $ts) = @_; my $tmp = "$ns,$ts"; # We can always increment this to 1 unless ($CONFIG->{state}{seen_nametitle}{$tmp}) { $CONFIG->{state}{seen_nametitle}{$tmp}++; } # But beyond that only if we have a labeltitle in the entry since # this counter is used to create extratitle which doesn't mean anything for # entries with no title else { if ($ts) { $CONFIG->{state}{seen_nametitle}{$tmp}++; } } return; } =head2 get_seen_titleyear Get the count of an labeltitle/labelyear combination for tracking extratitleyear =cut sub get_seen_titleyear { shift; # class method so don't care about class name my $ty = shift; return $CONFIG->{state}{seen_titleyear}{$ty}; } =head2 incr_seen_titleyear Increment the count of an labeltitle/labelyear combination for extratitleyear We pass in the title and year strings seperately as we have to be careful and only increment this counter beyond 1 if there is a title component. Otherwise, extratitleyear gets defined for all entries with no title. =cut sub incr_seen_titleyear { shift; # class method so don't care about class name my ($ts, $ys) = @_; my $tmp = "$ts,$ys"; # We can always increment this to 1 unless ($CONFIG->{state}{seen_titleyear}{$tmp}) { $CONFIG->{state}{seen_titleyear}{$tmp}++; } # But beyond that only if we have a labeltitle in the entry since # this counter is used to create extratitleyear which doesn't mean anything for # entries with no title else { if ($ts) { $CONFIG->{state}{seen_titleyear}{$tmp}++; } } return; } =head1 uniquelistcount =head2 get_uniquelistcount Get the number of uniquelist entries for a (possibly partial) list =cut sub get_uniquelistcount { shift; # class method so don't care about class name my $namelist = shift; return $CONFIG->{state}{uniquelistcount}{global}{join("\x{10FFFD}", @$namelist)}; } =head2 add_uniquelistcount Incremenent the count for a list part to the data for a name =cut sub add_uniquelistcount { shift; # class method so don't care about class name my $namelist = shift; $CONFIG->{state}{uniquelistcount}{global}{join("\x{10FFFD}", @$namelist)}++; return; } =head2 add_uniquelistcount_final Incremenent the count for a complete list to the data for a name =cut sub add_uniquelistcount_final { shift; # class method so don't care about class name my $namelist = shift; $CONFIG->{state}{uniquelistcount}{global}{final}{join("\x{10FFFD}", @$namelist)}++; return; } =head2 add_uniquelistcount_minyear Incremenent the count for a list and year to the data for a name Used to track uniquelist = minyear =cut sub add_uniquelistcount_minyear { shift; # class method so don't care about class name my ($minyearnamelist, $year, $namelist) = @_; # Allow year a default in case labelname is undef $CONFIG->{state}{uniquelistcount}{minyear}{join("\x{10FFFD}", @$minyearnamelist)}{$year // '0'}{join("\x{10FFFD}", @$namelist)}++; return; } =head2 get_uniquelistcount_minyear Get the count for a list and year to the data for a name Used to track uniquelist = minyear =cut sub get_uniquelistcount_minyear { shift; # class method so don't care about class name my ($minyearnamelist, $year) = @_; return scalar keys %{$CONFIG->{state}{uniquelistcount}{minyear}{join("\x{10FFFD}", @$minyearnamelist)}{$year}}; } =head2 get_uniquelistcount_final Get the number of uniquelist entries for a full list =cut sub get_uniquelistcount_final { shift; # class method so don't care about class name my $namelist = shift; my $c = $CONFIG->{state}{uniquelistcount}{global}{final}{join("\x{10FFFD}", @$namelist)}; return $c // 0; } =head2 reset_uniquelistcount Reset the count for list parts and complete lists =cut sub reset_uniquelistcount { shift; # class method so don't care about class name $CONFIG->{state}{uniquelistcount} = {}; return; } =head2 list_differs_nth Returns true if some other list differs at passed nth place and is at least as long list_differs_nth([a, b, c, d, e], 3) = 1 if there is another list like any of these: [a, b, d, e, f] [a, b, e, z, z, y] =cut sub list_differs_nth { shift; # class method so don't care about class name my ($list, $n) = @_; my @list_one = @$list; # Loop over all final lists, looking for ones which match: # * up to n - 1 # * differ at $n # * are at least as long foreach my $l_s (keys %{$CONFIG->{state}{uniquelistcount}{global}{final}}) { my @l = split("\x{10FFFD}", $l_s); # If list is shorter than the list we are checking, it's irrelevant next unless $#l >= $#$list; # If list matches at $n, it's irrelevant; next if ($list_one[$n-1] eq $l[$n-1]); # If list doesn't match up to $n - 1, it's irrelevant next unless Compare([@list_one[0 .. $n-2]], [@l[0 .. $n-2]]); $logger->trace("list_differs_nth() returning true: " . join(',', @list_one) . " vs " . join(',', @l)); return 1; } return 0; } =head2 list_differs_last Returns true if some list differs from passed list in its last place list_differs_last([a, b, c]) = 1 if there is another list like any of these: [a, b, d] [a, b, d, e] =cut sub list_differs_last { shift; # class method so don't care about class name my $list = shift; my @list_one = @$list; my $list_last = pop @list_one; # Loop over all final lists, looking for ones which match up to # length of list to check minus 1 but which differ in the last place of the # list to check. foreach my $l_s (keys %{$CONFIG->{state}{uniquelistcount}{global}{final}}) { my @l = split("\x{10FFFD}", $l_s); # If list is shorter than the list we are checking, it's irrelevant next unless $#l >= $#$list; # get the list elements up to length of the list we are checking my @ln = @l[0 .. $#$list]; # pop off the last element which is the potential point of difference my $ln_last = pop @ln; if (Compare(\@list_one, \@ln) and ($list_last ne $ln_last)) { $logger->trace("list_differs_last() returning true: (" . join(',', @list_one) . " vs " . join(',', @ln) . " -> $list_last vs $ln_last)"); return 1; } } return 0; } =head2 list_differs_superset Returns true if some list differs from passed list by being identical to the list up to the end of the list but also by having extra elements after this list_differs_superset([a, b, c]) = 1 if there is another list like any of these: [a, b, c, d] [a, b, c, d, e] =cut sub list_differs_superset { shift; # class method so don't care about class name my $list = shift; # Loop over all final lists, looking for ones which match up to # length of list to check but which differ after this length foreach my $l_s (keys %{$CONFIG->{state}{uniquelistcount}{global}{final}}) { my @l = split("\x{10FFFD}", $l_s); # If list is not longer than the list we are checking, it's irrelevant next unless $#l > $#$list; # get the list elements up to length of the list we are checking my @ln = @l[0 .. $#$list]; if (Compare($list, \@ln)) { $logger->trace("list_differs_superset() returning true: (" . join(',', @$list) . " vs " . join(',', @l) . ")"); return 1; } } return 0; } =head1 uniquenamecount =head2 get_numofuniquenames Get the number of uniquenames entries for a visible name =cut sub get_numofuniquenames { shift; # class method so don't care about class name my ($name, $namecontext) = @_; my $return = scalar keys %{$CONFIG->{state}{uniquenamecount}{$name}{$namecontext}}; $logger->trace("get_numofuniquenames() returning $return for NAME='$name' and NAMECONTEXT='$namecontext'"); return $return; } =head2 get_numofuniquenames_all Get the number of uniquenames entries for a name =cut sub get_numofuniquenames_all { shift; # class method so don't care about class name my ($name, $namecontext) = @_; my $return = scalar keys %{$CONFIG->{state}{uniquenamecount_all}{$name}{$namecontext}}; $logger->trace("get_numofuniquenames_all() returning $return for NAME='$name' and NAMECONTEXT='$namecontext'"); return $return; } =head2 add_uniquenamecount Add a name to the list of name contexts which have the name in it (only called for visible names) =cut sub add_uniquenamecount { shift; # class method so don't care about class name my ($name, $namecontext, $key) = @_; $CONFIG->{state}{uniquenamecount}{$name}{$namecontext}{$key}++; return; } =head2 add_uniquenamecount_all Add a name to the list of name contexts which have the name in it (called for all names) =cut sub add_uniquenamecount_all { shift; # class method so don't care about class name my ($name, $namecontext, $key) = @_; $CONFIG->{state}{uniquenamecount_all}{$name}{$namecontext}{$key}++; return; } =head2 reset_uniquenamecount Reset the list of names which have the name part in it =cut sub reset_uniquenamecount { shift; # class method so don't care about class name $CONFIG->{state}{uniquenamecount} = {}; $CONFIG->{state}{uniquenamecount_all} = {}; return; } =head2 _get_uniquename Get the list of name contexts which contain a name Mainly for use in tests =cut sub _get_uniquename { shift; # class method so don't care about class name my ($name, $namecontext) = @_; my @list = sort keys %{$CONFIG->{state}{uniquenamecount}{$name}{$namecontext}}; return \@list; } =head1 crossrefkeys =head2 get_crossrefkeys Return ref to array of keys which are crossref targets =cut sub get_crossrefkeys { shift; # class method so don't care about class name return [ keys %{$CONFIG->{state}{crossrefkeys}} ]; } =head2 get_crossrefkey Return an integer representing the number of times a crossref target key has been ref'ed =cut sub get_crossrefkey { shift; # class method so don't care about class name my $k = shift; return $CONFIG->{state}{crossrefkeys}{$k}; } =head2 del_crossrefkey Remove a crossref target key from the crossrefkeys state =cut sub del_crossrefkey { shift; # class method so don't care about class name my $k = shift; if (exists($CONFIG->{state}{crossrefkeys}{$k})) { delete $CONFIG->{state}{crossrefkeys}{$k}; } return; } =head2 incr_crossrefkey Increment the crossreferences count for a target crossref key =cut sub incr_crossrefkey { shift; # class method so don't care about class name my $k = shift; $CONFIG->{state}{crossrefkeys}{$k}++; return; } ############################ # Displaymode static methods ############################ =head2 set_displaymode Set the display mode for a field. setdisplaymode(['entrytype'], ['field'], ['citekey'], $value) This sets the desired displaymode to use for some data in the bib. Of course, this is entirey seperate semantically from the displaymodes *defined* in the bib which just tell you what to return for a particular displaymode request for some data. =cut sub set_displaymode { shift; # class method so don't care about class name my ($val, $entrytype, $fieldtype, $citekey) = @_; if ($citekey) { if ($fieldtype) { $CONFIG->{displaymodes}{PER_FIELD}{$citekey}{$fieldtype} = $val; } else { $CONFIG->{displaymodes}{PER_ENTRY}{$citekey} = $val; } } elsif ($fieldtype) { $CONFIG->{displaymodes}{PER_FIELDTYPE}{$fieldtype} = $val; } elsif ($entrytype) { $CONFIG->{displaymodes}{PER_ENTRYTYPE}{$entrytype} = $val; } else { $CONFIG->{displaymodes}{GLOBAL} = $val ; } } =head2 get_displaymode Get the display mode for a field. getdisplaymode(['entrytype'], ['field'], ['citekey']) Returns the displaymode. In order of decreasing preference, returns: 1. Mode defined for a specific field in a specific citekey 2. Mode defined for a citekey 3. Mode defined for a fieldtype (any citekey) 4. Mode defined for an entrytype (any citekey) 5. Mode defined globally (any citekey) =cut sub get_displaymode { shift; # class method so don't care about class name my ($entrytype, $fieldtype, $citekey) = @_; my $dm; if ($citekey) { if ($fieldtype and defined($CONFIG->{displaymodes}{PER_FIELD}) and defined($CONFIG->{displaymodes}{PER_FIELD}{$citekey}) and defined($CONFIG->{displaymodes}{PER_FIELD}{$citekey}{$fieldtype})) { $dm = $CONFIG->{displaymodes}{PER_FIELD}{$citekey}{$fieldtype}; } elsif (defined($CONFIG->{displaymodes}{PER_ENTRY}) and defined($CONFIG->{displaymodes}{PER_ENTRY}{$citekey})) { $dm = $CONFIG->{displaymodes}{PER_ENTRY}{$citekey}; } } elsif ($fieldtype and defined($CONFIG->{displaymodes}{PER_FIELDTYPE}) and defined($CONFIG->{displaymodes}{PER_FIELDTYPE}{$fieldtype})) { $dm = $CONFIG->{displaymodes}{PER_FIELDTYPE}{$fieldtype}; } elsif ($entrytype and defined($CONFIG->{displaymodes}{PER_ENTRYTYPE}) and defined($CONFIG->{displaymodes}{PER_ENTRYTYPE}{$entrytype})) { $dm = $CONFIG->{displaymodes}{PER_ENTRYTYPE}{$entrytype}; } $dm = $CONFIG->{displaymodes}{'*'} unless $dm; # Global if nothing else; return $dm; } =head2 dump Dump config information (for debugging) =cut sub dump { shift; # class method so don't care about class name dd($CONFIG); } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/DataModel.pm000444000000000000 5400412230324176 17475 0ustar00rootroot000000000000package Biber::DataModel; use v5.16; use strict; use warnings; use List::Util qw( first ); use Biber::Utils; use Biber::Constants; use Data::Dump qw( pp ); use Date::Simple; =encoding utf-8 =head1 NAME Biber::DataModel =cut my $logger = Log::Log4perl::get_logger('main'); =head2 new Initialize a Biber::DataModel object =cut sub new { my $class = shift; my $dm = shift; my $self; $self = bless {}, $class; # Pull out legal entrytypes, fields and constraints and make lookup hash # for quick tests later foreach my $f (@{$dm->{fields}{field}}) { # In case of conflicts, we need to remove the previous definitions since # later overrides earlier if (my $previous = $self->{fieldsbyname}{$f->{content}}) { if ($f->{format}) { @{$self->{fieldsbytype}{$previous->{fieldtype}}{$previous->{datatype}}{$previous->{format}}} = grep {$_ ne $f->{content}} @{$self->{fieldsbytype}{$previous->{fieldtype}}{$previous->{datatype}}{$previous->{format}}}; } @{$self->{fieldsbytype}{$previous->{fieldtype}}{$previous->{datatype}}{'*'}} = grep {$_ ne $f->{content}} @{$self->{fieldsbytype}{$previous->{fieldtype}}{$previous->{datatype}}{'*'}}; @{$self->{fieldsbyfieldtype}{$previous->{fieldtype}}} = grep {$_ ne $f->{content}} @{$self->{fieldsbyfieldtype}{$previous->{fieldtype}}}; @{$self->{fieldsbydatatype}{$previous->{datatype}}} = grep {$_ ne $f->{content}} @{$self->{fieldsbydatatype}{$previous->{datatype}}}; @{$self->{fieldsbyformat}{$previous->{'format'}}} = grep {$_ ne $f->{content}} @{$self->{fieldsbyformat}{$previous->{format}}}; delete $self->{fieldsbyname}{$f->{content}}; } $self->{fieldsbyname}{$f->{content}} = {'fieldtype' => $f->{fieldtype}, 'datatype' => $f->{datatype}, 'format' => $f->{format} || 'default'}; if ($f->{format}) { push @{$self->{fieldsbytype}{$f->{fieldtype}}{$f->{datatype}}{$f->{format}}}, $f->{content}; } push @{$self->{fieldsbytype}{$f->{fieldtype}}{$f->{datatype}}{'*'}}, $f->{content}; push @{$self->{fieldsbyfieldtype}{$f->{fieldtype}}}, $f->{content}; push @{$self->{fieldsbydatatype}{$f->{datatype}}}, $f->{content}; push @{$self->{fieldsbyformat}{$f->{format} || 'default'}}, $f->{content}; # check null_ok if ($f->{nullok}) { $self->{fieldsbyname}{$f->{content}}{nullok} = 1; } # check skips - fields we don't want to output to BBL if ($f->{skip_output}) { $self->{fieldsbyname}{$f->{content}}{skipout} = 1; } } my $leg_ents; foreach my $et (@{$dm->{entrytypes}{entrytype}}) { my $es = $et->{content}; # Skip output flag for certain entrytypes if ($et->{skip_output}) { $leg_ents->{$es}{skipout} = 1; } # fields for entrytypes my $lfs; foreach my $ef (@{$dm->{entryfields}}) { # Found a section describing legal fields for entrytype if (not exists($ef->{entrytype}) or grep {$_->{content} eq $es} @{$ef->{entrytype}}) { foreach my $f (@{$ef->{field}}) { $lfs->{$f->{content}} = 1; } } } # constraints my $constraints; foreach my $cd (@{$dm->{constraints}}) { # Found a section describing constraints for entrytype if (not exists($cd->{entrytype}) or grep {$_->{content} eq $es} @{$cd->{entrytype}}) { foreach my $c (@{$cd->{constraint}}) { if ($c->{type} eq 'mandatory') { # field foreach my $f (@{$c->{field}}) { push @{$constraints->{mandatory}}, $f->{content}; } # xor set of fields # [ XOR, field1, field2, ... , fieldn ] foreach my $fxor (@{$c->{fieldxor}}) { my $xorset; foreach my $f (@{$fxor->{field}}) { push @$xorset, $f->{content}; } unshift @$xorset, 'XOR'; push @{$constraints->{mandatory}}, $xorset; } # or set of fields # [ OR, field1, field2, ... , fieldn ] foreach my $for (@{$c->{fieldor}}) { my $orset; foreach my $f (@{$for->{field}}) { push @$orset, $f->{content}; } unshift @$orset, 'OR'; push @{$constraints->{mandatory}}, $orset; } } # Conditional constraints # [ ANTECEDENT_QUANTIFIER # [ ANTECEDENT LIST ] # CONSEQUENT_QUANTIFIER # [ CONSEQUENT LIST ] # ] elsif ($c->{type} eq 'conditional') { my $cond; $cond->[0] = $c->{antecedent}{quant}; $cond->[1] = [ map { $_->{content} } @{$c->{antecedent}{field}} ]; $cond->[2] = $c->{consequent}{quant}; $cond->[3] = [ map { $_->{content} } @{$c->{consequent}{field}} ]; push @{$constraints->{conditional}}, $cond; } # data constraints elsif ($c->{type} eq 'data') { my $data; $data->{fields} = [ map { $_->{content} } @{$c->{field}} ]; $data->{datatype} = $c->{datatype}; $data->{rangemin} = $c->{rangemin}; $data->{rangemax} = $c->{rangemax}; $data->{pattern} = $c->{pattern}; push @{$constraints->{data}}, $data; } } } } $leg_ents->{$es}{legal_fields} = $lfs; $leg_ents->{$es}{constraints} = $constraints; } $self->{entrytypesbyname} = $leg_ents; # use Data::Dump;dd($self);exit 0; return $self; } =head2 is_field Returns boolean to say if a field is a legal field Allows intermediate temp custom fields which are used when a driver source field doesn't have an obvious 1:1 mapping to a datamodel field. Such intermediates are defined in the target field mapping of a sourcemap. Also allows for fields with script form and optional lang suffix =cut sub is_field { my $self = shift; my $field = shift; my $S = Biber::Config->getoption('mssplit'); if ($field =~ m/^BIBERCUSTOM/o) { return 1; } elsif ($field =~ m/^([^$S]+)$S(?:original|translated|romanised|uniform)$S?.*$/) { return $self->{fieldsbyname}{$1} ? 1 : 0; } else { return $self->{fieldsbyname}{$field} ? 1 : 0; } } =head2 is_entrytype Returns boolean to say if an entrytype is a legal entrytype =cut sub is_entrytype { my $self = shift; my $type = shift; return $self->{entrytypesbyname}{$type} ? 1 : 0; } =head2 is_field_for_entrytype Returns boolean to say if a field is legal for an entrytype =cut sub is_field_for_entrytype { my $self = shift; my ($type, $field) = @_; if ($self->{entrytypesbyname}{$type}{legal_fields}{$field}) { return 1; } else { return 0; } } =head2 entrytype_is_skipout Returns boolean depending on whether an entrytype is to be skipped on output =cut sub entrytype_is_skipout { my ($self, $type) = @_; return $self->{entrytypesbyname}{$type}{skipout} // 0; } =head2 get_fields_of_fieldtype Retrieve fields of a certain biblatex fieldtype from data model Return in sorted order so that bbl order doesn't change when changing .bcf. This really messes up tests otherwise. =cut sub get_fields_of_fieldtype { my ($self, $fieldtype) = @_; my $f = $self->{fieldsbyfieldtype}{$fieldtype}; return $f ? [ sort @$f ] : []; } =head2 get_fields_of_fieldformat Retrieve fields of a certain format from data model Return in sorted order so that bbl order doesn't change when changing .bcf. This really messes up tests otherwise. =cut sub get_fields_of_fieldformat { my ($self, $format) = @_; my $f = $self->{fieldsbyformat}{$format}; return $f ? [ sort @$f ] : []; } =head2 get_fields_of_datatype Retrieve fields of a certain biblatex datatype from data model Return in sorted order so that bbl order doesn't change when changing .bcf. This really messes up tests otherwise. =cut sub get_fields_of_datatype { my ($self, $datatype) = @_; my $f = $self->{fieldsbydatatype}{$datatype}; return $f ? [ sort @$f ] : []; } =head2 get_fields_of_type Retrieve fields of a certain biblatex type from data model Return in sorted order so that bbl order doesn't change when changing .bcf. This really messes up tests otherwise. =cut sub get_fields_of_type { my ($self, $fieldtype, $datatype, $format) = @_; my $f; if ($format) { $f = $self->{fieldsbytype}{$fieldtype}{$datatype}{$format}; } else { $f = $self->{fieldsbytype}{$fieldtype}{$datatype}{'*'}; } return $f ? [ sort @$f ] : []; } =head2 get_fieldtype Returns the fieldtype of a field =cut sub get_fieldtype { my ($self, $field) = @_; return $self->{fieldsbyname}{$field}{fieldtype}; } =head2 get_datatype Returns the datatype of a field =cut sub get_datatype { my ($self, $field) = @_; return $self->{fieldsbyname}{$field}{datatype}; } =head2 get_fieldformat Returns the format of a field =cut sub get_fieldformat { my ($self, $field) = @_; return $self->{fieldsbyname}{$field}{format}; } =head2 get_dm_for_field Returns the fieldtype and datatype of a field =cut sub get_dm_for_field { my ($self, $field) = @_; return ($self->{fieldsbyname}{$field}{fieldtype}, $self->{fieldsbyname}{$field}{datatype}); } =head2 field_is_fieldtype Returns boolean depending on whether a field is a certain biblatex fieldtype =cut sub field_is_fieldtype { my ($self, $fieldtype, $field) = @_; return $self->{fieldsbyname}{$field}{fieldtype} eq $fieldtype ? 1 : 0; } =head2 field_is_datatype Returns boolean depending on whether a field is a certain biblatex datatype =cut sub field_is_datatype { my ($self, $datatype, $field) = @_; return $self->{fieldsbyname}{$field}{datatype} eq $datatype ? 1 : 0; } =head2 field_is_nullok Returns boolean depending on whether a field is ok to be null =cut sub field_is_nullok { my ($self, $field) = @_; return $self->{fieldsbyname}{$field}{nullok} // 0; } =head2 field_is_skipout Returns boolean depending on whether a field is to be skipped on output =cut sub field_is_skipout { my ($self, $field) = @_; return $self->{fieldsbyname}{$field}{skipout} // 0; } =head2 check_mandatory_constraints Checks constraints of type "mandatory" on entry and returns an arry of warnings, if any =cut sub check_mandatory_constraints { my $self = shift; my $be = shift; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my @warnings; my $et = $be->get_field('entrytype'); my $key = $be->get_field('citekey'); my $ds = $section->get_keytods($key); foreach my $c (@{$self->{entrytypesbyname}{$et}{constraints}{mandatory}}) { if (ref($c) eq 'ARRAY') { # Exactly one of a set is mandatory if ($c->[0] eq 'XOR') { my @fs = @$c[1,-1]; # Lose the first element which is the 'XOR' my $flag = 0; my $xorflag = 0; foreach my $of (@fs) { if ($be->field_exists($of)) { if ($xorflag) { push @warnings, "Datamodel: Entry '$key' ($ds): Mandatory fields - only one of '" . join(', ', @fs) . "' must be defined - ignoring field '$of'"; $be->del_field($of); } $flag = 1; $xorflag = 1; } } unless ($flag) { push @warnings, "Datamodel: Entry '$key' ($ds): Missing mandatory field - one of '" . join(', ', @fs) . "' must be defined"; } } # One or more of a set is mandatory elsif ($c->[0] eq 'OR') { my @fs = @$c[1,-1]; # Lose the first element which is the 'OR' my $flag = 0; foreach my $of (@fs) { if ($be->field_exists($of)) { $flag = 1; last; } } unless ($flag) { push @warnings, "Datamodel: Entry '$key' ($ds): Missing mandatory field - one of '" . join(', ', @fs) . "' must be defined"; } } } # Simple mandatory field else { unless ($be->field_exists($c)) { push @warnings, "Datamodel: Entry '$key' ($ds): Missing mandatory field '$c'"; } } } return @warnings; } =head2 check_conditional_constraints Checks constraints of type "conditional" on entry and returns an arry of warnings, if any =cut sub check_conditional_constraints { my $self = shift; my $be = shift; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my @warnings; my $et = $be->get_field('entrytype'); my $key = $be->get_field('citekey'); my $ds = $section->get_keytods($key); foreach my $c (@{$self->{entrytypesbyname}{$et}{constraints}{conditional}}) { my $aq = $c->[0]; # Antecedent quantifier my $afs = $c->[1]; # Antecedent fields my $cq = $c->[2]; # Consequent quantifier my $cfs = $c->[3]; # Consequent fields my @actual_afs = (grep {$be->field_exists($_)} @$afs); # antecedent fields in entry # check antecedent if ($aq eq 'all') { next unless $#$afs == $#actual_afs; # ALL -> ? not satisfied } elsif ($aq eq 'none') { next if @actual_afs; # NONE -> ? not satisfied } elsif ($aq eq 'one') { next unless @actual_afs; # ONE -> ? not satisfied } # check consequent my @actual_cfs = (grep {$be->field_exists($_)} @$cfs); if ($cq eq 'all') { unless ($#$cfs == $#actual_cfs) { # ? -> ALL not satisfied push @warnings, "Datamodel: Entry '$key' ($ds): Constraint violation - $cq of fields (" . join(', ', @$cfs) . ") must exist when $aq of fields (" . join(', ', @$afs). ") exist"; } } elsif ($cq eq 'none') { if (@actual_cfs) { # ? -> NONE not satisfied push @warnings, "Datamodel: Entry '$key' ($ds): Constraint violation - $cq of fields (" . join(', ', @actual_cfs) . ") must exist when $aq of fields (" . join(', ', @$afs). ") exist. Ignoring them."; # delete the offending fields foreach my $f (@actual_cfs) { $be->del_field($f); } } } elsif ($cq eq 'one') { unless (@actual_cfs) { # ? -> ONE not satisfied push @warnings, "Datamodel: Entry '$key' ($ds): Constraint violation - $cq of fields (" . join(', ', @$cfs) . ") must exist when $aq of fields (" . join(', ', @$afs). ") exist"; } } } return @warnings; } =head2 check_data_constraints Checks constraints of type "data" on entry and returns an array of warnings, if any =cut sub check_data_constraints { my $self = shift; my $be = shift; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my @warnings; my $et = $be->get_field('entrytype'); my $key = $be->get_field('citekey'); my $ds = $section->get_keytods($key); foreach my $c (@{$self->{entrytypesbyname}{$et}{constraints}{data}}) { # This is the datatype of the constraint, not the field! if ($c->{datatype} eq 'isbn') { foreach my $f (@{$c->{fields}}) { if (my $fv = $be->get_field($f)) { (my $vol, my $dir, undef) = File::Spec->splitpath( $INC{"Biber.pm"} ); $dir =~ s/\/$//; # splitpath sometimes leaves a trailing '/' $ENV{ISBN_RANGE_MESSAGE} = File::Spec->catpath($vol, "$dir/Business/ISBN/", 'RangeMessage.xml'); require Business::ISBN; # Treat as a list field just in case someone has made it so in a custom datamodel unless ($self->get_fieldtype($f) eq 'list') { $fv = [$fv]; } foreach (@$fv) { my $isbn = Business::ISBN->new($_); if (not $isbn) { push @warnings, "Datamodel: Entry '$key' ($ds): Invalid ISBN in value of field '$f'"; } # Business::ISBN has an error() method so we might get more information elsif (not $isbn->is_valid) { push @warnings, "Datamodel: Entry '$key' ($ds): Invalid ISBN in value of field '$f' (" . $isbn->error. ')'; } } } } } elsif ($c->{datatype} eq 'issn') { foreach my $f (@{$c->{fields}}) { if (my $fv = $be->get_field($f)) { require Business::ISSN; # Treat as a list field just in case someone has made it so in a custom datamodel unless ($self->get_fieldtype($f) eq 'list') { $fv = [$fv]; } foreach (@$fv) { my $issn = Business::ISSN->new($_); unless ($issn and $issn->is_valid) { push @warnings, "Datamodel: Entry '$key' ($ds): Invalid ISSN in value of field '$f'"; } } } } } elsif ($c->{datatype} eq 'ismn') { foreach my $f (@{$c->{fields}}) { if (my $fv = $be->get_field($f)) { require Business::ISMN; # Treat as a list field just in case someone has made it so in a custom datamodel unless ($self->get_fieldtype($f) eq 'list') { $fv = [$fv]; } foreach (@$fv) { my $ismn = Business::ISMN->new($_); unless ($ismn and $ismn->is_valid) { push @warnings, "Datamodel: Entry '$key' ($ds): Invalid ISMN in value of field '$f'"; } } } } } elsif ($c->{datatype} eq 'integer' or $c->{datatype} eq 'datepart') { my $dt = $DM_DATATYPES{$c->{datatype}}; foreach my $f (@{$c->{fields}}) { if (my $fv = $be->get_field($f)) { unless ( $fv =~ /$dt/ ) { push @warnings, "Datamodel: Entry '$key' ($ds): Invalid format (" . $c->{datatype}. ") of field '$f' - ignoring field"; $be->del_field($f); next; } if (my $fmin = $c->{rangemin}) { unless ($fv >= $fmin) { push @warnings, "Datamodel: Entry '$key' ($ds): Invalid value of field '$f' must be '>=$fmin' - ignoring field"; $be->del_field($f); next; } } if (my $fmax = $c->{rangemax}) { unless ($fv <= $fmax) { push @warnings, "Datamodel: Entry '$key' ($ds): Invalid value of field '$f' must be '<=$fmax' - ignoring field"; $be->del_field($f); next; } } } } } elsif ($c->{datatype} eq 'date') { # Perform content validation checks on date components by trying to # instantiate a Date::Simple object. foreach my $f (@{$self->get_fields_of_type('field', 'date')}) { my $d = $f =~ s/date\z//xmsr; # Don't bother unless this type of date is defined (has a year) next unless $be->get_datafield($d . 'year'); # When checking date components not split from date fields, have ignore the value # of an explicit YEAR field as it is allowed to be an arbitrary string # so we just set it to any valid value for the test my $byc; my $byc_d; # Display value for errors so as not to confuse people if ($d eq '' and not $be->get_field('datesplit')) { $byc = '1900'; # Any valid value is fine $byc_d = 'YYYY'; } else { $byc = $be->get_datafield($d . 'year') } # Begin date if ($byc) { my $bm = $be->get_datafield($d . 'month') || 'MM'; my $bmc = $bm eq 'MM' ? '01' : $bm; my $bd = $be->get_datafield($d . 'day') || 'DD'; my $bdc = $bd eq 'DD' ? '01' : $bd; $logger->debug("Checking '${d}date' date value '$byc/$bmc/$bdc' for key '$key'"); unless (Date::Simple->new("$byc$bmc$bdc")) { push @warnings, "Datamodel: Entry '$key' ($ds): Invalid date value '" . ($byc_d || $byc) . "/$bm/$bd' - ignoring its components"; $be->del_datafield($d . 'year'); $be->del_datafield($d . 'month'); $be->del_datafield($d . 'day'); next; } } # End date # defined and some value - end*year can be empty but defined in which case, # we don't need to validate if (my $eyc = $be->get_datafield($d . 'endyear')) { my $em = $be->get_datafield($d . 'endmonth') || 'MM'; my $emc = $em eq 'MM' ? '01' : $em; my $ed = $be->get_datafield($d . 'endday') || 'DD'; my $edc = $ed eq 'DD' ? '01' : $ed; $logger->debug("Checking '${d}date' date value '$eyc/$emc/$edc' for key '$key'"); unless (Date::Simple->new("$eyc$emc$edc")) { push @warnings, "Datamodel: Entry '$key' ($ds): Invalid date value '$eyc/$em/$ed' - ignoring its components"; $be->del_datafield($d . 'endyear'); $be->del_datafield($d . 'endmonth'); $be->del_datafield($d . 'endday'); next; } } } } elsif ($c->{datatype} eq 'pattern') { my $patt; unless ($patt = $c->{pattern}) { push @warnings, "Datamodel: Pattern constraint has no pattern!"; } foreach my $f (@{$c->{fields}}) { if (my $fv = $be->get_field($f)) { unless (imatch($fv, $patt)) { push @warnings, "Datamodel: Entry '$key' ($ds): Invalid value (pattern match fails) for field '$f'"; } } } } } return @warnings; } =head2 dump Dump Biber::DataModel object =cut sub dump { my $self = shift; return pp($self); } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Sections.pm000444000000000000 360712230324175 17414 0ustar00rootroot000000000000package Biber::Sections; use v5.16; use strict; use warnings; =encoding utf-8 =head1 NAME Biber::Sections =head2 new Initialize a Biber::Sections object =cut sub new { my ($class) = @_; my $self = bless {}, $class; return $self; } =head2 get_num_sections Gets the number of Biber::Section objects =cut sub get_num_sections { my $self = shift; my @keys = keys %$self; return $#keys + 1; } =head2 get_section Gets a Biber::Section by number from the Biber::Sections object =cut sub get_section { my $self = shift; my $number = shift; return $self->{$number}; } =head2 get_sections Gets an sorted array ref of all Biber::Section objects =cut sub get_sections { my $self = shift; return [ sort {$a->number <=> $b->number} values %$self ]; } =head2 add_section Adds a Biber::Section to the Biber::Sections object =cut sub add_section { my $self = shift; my $section = shift; my $number = $section->number; $self->{$number} = $section; return; } =head2 delete_section Deletes a section Mainly used in test scripts =cut sub delete_section { my $self = shift; my $section = shift; my $number = $section->number; delete $self->{$number}; return; } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Entries.pm000444000000000000 420712230324177 17235 0ustar00rootroot000000000000package Biber::Entries; use v5.16; use strict; use warnings; =encoding utf-8 =head1 NAME Biber::Entries =head2 new Initialize a Biber::Entries object =cut sub new { my ($class) = @_; my $self = bless {}, $class; return $self; } =head2 notnull Test for an empty object =cut sub notnull { my $self = shift; my @arr = keys %$self; return $#arr > -1 ? 1 : 0; } =head2 entry_exists Boolean values sub to tell if there is an entry for the passed citation key. =cut sub entry_exists { my ($self, $citekey) = @_; return defined($self->{$citekey}) ? 1 : 0; } =head2 entry Returns a Biber::Entry object for a given citekey =cut sub entry { my ($self, $citekey) = @_; return $self->{$citekey}; } =head2 entries Returns an array of all Biber::Entry objects =cut sub entries { my $self = shift; return values %$self; } =head2 del_entries Deletes all Biber::Entry objects =cut sub del_entries { my $self = shift; foreach my $e (keys %$self) { delete($self->{$e}); } return; } =head2 add_entry Adds a Biber::Entry to the Biber::Entries object =cut sub add_entry { my $self = shift; my ($key, $entry) = @_; $self->{$key} = $entry; return; } =head2 del_entry Deletes a Biber::Entry object for a given citekey. Only used in tests in order to reset data before regeneration with different options. =cut sub del_entry { my ($self, $citekey) = @_; delete($self->{$citekey}); return; } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Constants.pm000444000000000000 2714512230324176 17625 0ustar00rootroot000000000000package Biber::Constants; use v5.16; use strict; use warnings; use Encode::Alias; use base 'Exporter'; our @EXPORT = qw{ $CONFIG_DEFAULT_BIBER %CONFIG_DEFAULT_BIBLATEX %CONFIG_SCOPE_BIBLATEX %CONFIG_BIBLATEX_PER_ENTRY_OPTIONS %NOSORT_TYPES %DM_DATATYPES $BIBER_CONF_NAME $BCF_VERSION $BBL_VERSION $BIBER_SORT_FINAL $BIBER_SORT_NULL $LABEL_FINAL }; # Version of biblatex control file which this release expects. Matched against version # passed in control file. Used when checking the .bcf our $BCF_VERSION = '2.5'; # Format version of the .bbl. Used when writing the .bbl our $BBL_VERSION = '2.3'; # Global flags needed for sorting our $BIBER_SORT_FINAL = 0; our $BIBER_SORT_NULL = 0; # the name of the Biber configuration file, which should be # either returned by kpsewhich or located at "$HOME/.$BIBER_CONF_NAME" our $BIBER_CONF_NAME = 'biber.conf'; ## Biber CONFIGURATION DEFAULTS # Locale - first try environment ... my $locale; if ($ENV{LC_COLLATE}) { $locale = $ENV{LC_COLLATE}; } elsif ($ENV{LANG}) { $locale = $ENV{LANG}; } elsif ($ENV{LC_ALL}) { $locale = $ENV{LC_ALL}; } # ... if nothing, set a default unless ($locale) { if ( $^O =~ /Win/) { $locale = 'English_United States.1252'; } else { $locale = 'en_US.UTF-8'; } } # nosort type category shortcuts our %NOSORT_TYPES = ( type_name => { author => 1, afterword => 1, annotator => 1, bookauthor => 1, commentator => 1, editor => 1, editora => 1, editorb => 1, editorc => 1, foreword => 1, holder => 1, introduction => 1, namea => 1, nameb => 1, namec => 1, shortauthor => 1, shorteditor => 1, translator => 1 }, type_title => { booktitle => 1, eventtitle => 1, issuetitle => 1, journaltitle => 1, maintitle => 1, origtitle => 1, title => 1 } ); # datatypes for data model validation our %DM_DATATYPES = ( integer => qr/\A\d+\z/xms, datepart => qr/\A\d+\z/xms ); # Biber option defaults. Mostly not needed outside of tool mode since they are passed by .bcf our $CONFIG_DEFAULT_BIBER = { clrmacros => { content => 0 }, collate => { content => 1 }, collate_options => { option => { level => 4, variable => 'non-ignorable' }}, graph => { content => 0 }, debug => { content => 0 }, decodecharsset => { content => 'base' }, dot_include => { option => {section => 1, xdata => 1, crossref => 1, xref => 1 }}, fastsort => { content => 0 }, fixinits => { content => 0 }, input_encoding => { content => 'UTF-8' }, input_format => { content => 'bibtex' }, listsep => { content => 'and' }, mincrossrefs => { content => 2 }, mssplit => { content => '_' }, namesep => { content => 'and' }, nodieonerror => { content => 0 }, noinit => { option => [ {value => q/\b\p{Ll}{2}\p{Pd}/}, {value => q/[\x{2bf}\x{2018}]/} ] }, nolog => { content => 0 }, nostdmacros => { content => 0 }, nosort => { option => [ { name => 'type_name', value => q/\A\p{L}{2}\p{Pd}/ }, { name => 'type_name', value => q/[\x{2bf}\x{2018}]/ } ] }, onlylog => { content => 0 }, others_string => { content => 'others' }, output_align => { content => 1 }, output_encoding => { content => 'UTF-8' }, output_format => { content => 'bbl' }, output_indent => { content => '2' }, output_fieldcase => { content => 'upper' }, output_resolve => { content => 0 }, output_safechars => { content => 0 }, output_safecharsset => { content => 'base' }, quiet => { content => 0 }, sortcase => { content => 1 }, sortfirstinits => { content => 0 }, sortlocale => { content => $locale }, sortupper => { content => 1 }, tool => { content => 0 }, trace => { content => 0 }, validate_config => { content => 0 }, validate_control => { content => 0 }, validate_datamodel => { content => 0 }, wraplines => { content => 0 }, }; # default global options for biblatex # Used to set: # * Some tool-mode defaults (as there is no .bcf and some biblatex options # cannot be set in a biber config file) our %CONFIG_DEFAULT_BIBLATEX = ( sortscheme => 'none', ); # Set up some encoding aliases to map \inputen{c,x} encoding names to Encode # It seems that inputen{c,x} has a different idea of nextstep than Encode # so we push it to MacRoman define_alias('ansinew' => 'cp1252'); # inputenc alias for cp1252 define_alias('applemac' => 'MacRoman'); define_alias('applemacce' => 'MacCentralEurRoman'); define_alias('next' => 'MacRoman'); define_alias('x-mac-roman' => 'MacRoman'); define_alias('x-mac-centeuro' => 'MacCentralEurRoman'); define_alias('x-mac-cyrillic' => 'MacCyrillic'); define_alias('x-nextstep' => 'MacRoman'); define_alias('x-ascii' => 'ascii'); # Encode doesn't resolve this one by default define_alias('lutf8' => 'UTF-8'); # Luatex define_alias('utf8x' => 'UTF-8'); # UCS (old) # Defines the scope of each of the BibLaTeX configuration options # # PRESORT is not a "real" biblatex option passed by biblatex. It is defined # by the biblatex \DeclarePresort macro and is stored in here as it # can be global/per-type or per-entry and therefore it's natural to store it here. our %CONFIG_SCOPE_BIBLATEX = ( alphaothers => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 0}, controlversion => {GLOBAL => 1, PER_TYPE => 0, PER_ENTRY => 0}, debug => {GLOBAL => 1, PER_TYPE => 0, PER_ENTRY => 0}, datamodel => {GLOBAL => 1, PER_TYPE => 0, PER_ENTRY => 0}, dataonly => {GLOBAL => 0, PER_TYPE => 0, PER_ENTRY => 1}, inheritance => {GLOBAL => 1, PER_TYPE => 0, PER_ENTRY => 0}, labelalpha => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 0}, labelalphatemplate => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 0}, labelnamefield => {GLOBAL => 0, PER_TYPE => 0, PER_ENTRY => 1}, labelnameform => {GLOBAL => 0, PER_TYPE => 0, PER_ENTRY => 1}, labelnamelang => {GLOBAL => 0, PER_TYPE => 0, PER_ENTRY => 1}, labelnamespec => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 0}, labelnumber => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 0}, labeltitle => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 0}, labeltitlefield => {GLOBAL => 0, PER_TYPE => 0, PER_ENTRY => 1}, labeltitleform => {GLOBAL => 0, PER_TYPE => 0, PER_ENTRY => 1}, labeltitlelang => {GLOBAL => 0, PER_TYPE => 0, PER_ENTRY => 1}, labeltitlespec => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 0}, labeltitleyear => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 0}, labeldate => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 0}, labeldatespec => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 0}, maxalphanames => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, maxbibnames => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, maxcitenames => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, maxitems => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, minalphanames => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, minbibnames => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, mincitenames => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, minitems => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, presort => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, singletitle => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 0}, skipbib => {GLOBAL => 0, PER_TYPE => 1, PER_ENTRY => 1}, skiplab => {GLOBAL => 0, PER_TYPE => 1, PER_ENTRY => 1}, skiplos => {GLOBAL => 0, PER_TYPE => 1, PER_ENTRY => 1}, sortalphaothers => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 0}, sortexclusion => {GLOBAL => 0, PER_TYPE => 1, PER_ENTRY => 0}, sorting => {GLOBAL => 1, PER_TYPE => 0, PER_ENTRY => 0}, sortscheme => {GLOBAL => 1, PER_TYPE => 0, PER_ENTRY => 0}, uniquelist => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, uniquename => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, useauthor => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, useeditor => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, useprefix => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, usetranslator => {GLOBAL => 1, PER_TYPE => 1, PER_ENTRY => 1}, ); # For per-entry options, what should be set when we find them and # what should be output to the .bbl for biblatex. # Basically, here we have to emulate relevant parts of biblatex's options processing # for local entry-specific options, note therefore the presence here of some # options like max/mincitenames which are not passed in the .bcf our %CONFIG_BIBLATEX_PER_ENTRY_OPTIONS = ( dataonly => {OUTPUT => 1, INPUT => {'skiplab' => 1, 'skiplos' => 1, 'uniquename' => 0, 'uniquelist' => 0}}, maxitems => {OUTPUT => 1}, minitems => {OUTPUT => 1}, maxbibnames => {OUTPUT => 1}, minbibnames => {OUTPUT => 1}, maxcitenames => {OUTPUT => 1}, mincitenames => {OUTPUT => 1}, maxalphanames => {OUTPUT => 0}, minalphanames => {OUTPUT => 0}, maxnames => {OUTPUT => ['maxcitenames', 'maxbibnames'], INPUT => ['maxcitenames', 'maxbibnames']}, minnames => {OUTPUT => ['mincitenames', 'minbibnames'], INPUT => ['mincitenames', 'minbibnames']}, presort => {OUTPUT => 0}, skipbib => {OUTPUT => 1}, skiplab => {OUTPUT => 1}, skiplos => {OUTPUT => 1}, uniquelist => {OUTPUT => 0}, useauthor => {OUTPUT => 1}, useeditor => {OUTPUT => 1}, useprefix => {OUTPUT => 1}, usetranslator => {OUTPUT => 1}, ); 1; __END__ =pod =encoding utf-8 =head1 NAME Biber::Constants - global constants for biber =head1 AUTHOR François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Entry.pm000444000000000000 5732112230324176 16751 0ustar00rootroot000000000000package Biber::Entry; use v5.16; use strict; use warnings; use Biber::Utils; use Biber::Internals; use Biber::Constants; use Data::Dump qw( pp ); use Digest::MD5 qw( md5_hex ); use Log::Log4perl qw( :no_extra_logdie_message ); use List::Util qw( first ); use Storable qw( dclone ); my $logger = Log::Log4perl::get_logger('main'); =encoding utf-8 =head1 NAME Biber::Entry =head2 new Initialize a Biber::Entry object There are three types of field possible in an entry: * raw - These are direct copies of input fields with no processing performed on them. Such fields are used for tool mode where we don't want to alter the fields as they need to go back into the output as they are * data - These are fields which derive directly from or are themselves fields in the data souce. Things like YEAR, MONTH, DAY etc. are such fields which are derived from, for example, the DATE field (which is itself a "raw" field). They are part of the original data implicitly, derived from a "raw" field. * other - These are fields, often meta-information like labelname, labelalpha etc. which are more removed from the data fields. The reason for this division is largely the entry cloning required for the related entry and inheritance features. When we clone an entry or copy some fields from one entry to another we generally don't want the "other" category as such derived meta-fields will often need to be re-created or ignored so we need to know which are the actual "data" fields to copy/clone. "raw" fields are important when we are writing bibtex format output (in tool mode for example) since in such cases, we don't want to derive implicit fields like YEAR/MONTH from DATE. =cut sub new { my $class = shift; my $obj = shift; my $self; if (defined($obj) and ref($obj) eq 'HASH') { $self = bless $obj, $class; } else { $self = bless {}, $class; } return $self; } =head2 relclone Recursively create related entry clones starting with an entry =cut sub relclone { my $self = shift; my $citekey = $self->get_field('citekey'); my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); if (my $relkeys = $self->get_field('related')) { $logger->debug("Found RELATED field in '$citekey' with contents " . join(',', @$relkeys)); my @clonekeys; foreach my $relkey (@$relkeys) { # Resolve any alias my $nrelkey = $section->get_citekey_alias($relkey) // $relkey; $logger->debug("Resolved RELATED key alias '$relkey' to '$nrelkey'") if $relkey ne $nrelkey; $relkey = $nrelkey; $logger->debug("Looking at RELATED key '$relkey'"); # Loop avoidance, in case we are back in an entry again in the guise of a clone # We can record the related clone but don't create it again if (my $ck = $section->get_keytorelclone($relkey)) { $logger->debug("Found RELATED key '$relkey' already has clone '$ck'"); push @clonekeys, $ck; # Save graph information if requested if (Biber::Config->getoption('output_format') eq 'dot') { Biber::Config->set_graph('related', $ck, $relkey, $citekey); } } else { my $relentry = $section->bibentry($relkey); my $clonekey = md5_hex($relkey); push @clonekeys, $clonekey; my $relclone = $relentry->clone($clonekey); $logger->debug("Created new related clone for '$relkey' with clone key '$clonekey'"); # Set related clone options if (my $relopts = $self->get_field('relatedoptions')) { process_entry_options($clonekey, $relopts); $relclone->set_datafield('options', $relopts); } else { process_entry_options($clonekey, [ 'skiplab', 'skiplos', 'uniquename=0', 'uniquelist=0' ]); $relclone->set_datafield('options', [ 'dataonly' ]); } $section->bibentries->add_entry($clonekey, $relclone); $section->keytorelclone($relkey, $clonekey); # Save graph information if requested if (Biber::Config->getoption('output_format') eq 'dot') { Biber::Config->set_graph('related', $clonekey, $relkey, $citekey); } # recurse so we can do cascading related entries $logger->debug("Recursing into RELATED entry '$clonekey'"); $relclone->relclone; } } # point to clone keys and add to citekeys # We have to add the citekeys as we need these clones in the .bbl # but the dataonly will cause biblatex not to print them in the bib $section->add_citekeys(@clonekeys); $self->set_datafield('related', [ @clonekeys ]); } } =head2 clone Clone a Biber::Entry object and return a copy Accepts optionally a key for the copy =cut sub clone { my $self = shift; my $newkey = shift; my $new = new Biber::Entry; while (my ($k, $v) = each(%{$self->{datafields}})) { $new->{datafields}{$k} = dclone($v); } while (my ($k, $v) = each(%{$self->{rawfields}})) { $new->{rawfields}{$k} = dclone($v); } while (my ($k, $v) = each(%{$self->{origfields}})) { $new->{origfields}{$k} = dclone($v); } # Need to add entrytype and datatype $new->{derivedfields}{entrytype}{original}{default} = $self->{derivedfields}{entrytype}{original}{default}; $new->{derivedfields}{datatype}{original}{default} = $self->{derivedfields}{datatype}{original}{default}; # put in key if specified if ($newkey) { $new->{derivedfields}{citekey}{original}{default} = $newkey; } # Record the key of the source of the clone in the clone. Useful for loop detection etc. # in biblatex $new->{derivedfields}{clonesourcekey}{original}{default} = $self->get_field('citekey'); return $new; } =head2 notnull Test for an empty object =cut sub notnull { my $self = shift; my @arr = keys %$self; return $#arr > -1 ? 1 : 0; } =head2 set_labelname_info Record the labelname information. This is special meta-information so we have a seperate method for this Takes a hash ref with the information. =cut sub set_labelname_info { my $self = shift; my $data = shift; $data->{form} = $data->{form} || 'original'; $data->{lang} = $data->{lang} || 'default'; $self->{labelnameinfo} = $data; return; } =head2 get_labelname_info Retrieve the labelname information. This is special meta-information so we have a seperate method for this Returns a hash ref with the information. =cut sub get_labelname_info { my $self = shift; return $self->{labelnameinfo}; } =head2 set_labelnamefh_info Record the fullhash labelname information. This is special meta-information so we have a seperate method for this Takes a hash ref with the information. =cut sub set_labelnamefh_info { my $self = shift; my $data = shift; $data->{form} = $data->{form} || 'original'; $data->{lang} = $data->{lang} || 'default'; $self->{labelnamefhinfo} = $data; return; } =head2 get_labelnamefh_info Retrieve the fullhash labelname information. This is special meta-information so we have a seperate method for this Returns a hash ref with the information. =cut sub get_labelnamefh_info { my $self = shift; return $self->{labelnamefhinfo}; } =head2 set_labeltitle_info Record the labeltitle information. This is special meta-information so we have a seperate method for this Takes a hash ref with the information. =cut sub set_labeltitle_info { my $self = shift; my $data = shift; $data->{form} = $data->{form} || 'original'; $data->{lang} = $data->{lang} || 'default'; $self->{labeltitleinfo} = $data; return; } =head2 get_labeltitle_info Retrieve the labeltitle information. This is special meta-information so we have a seperate method for this Returns a hash ref with the information. =cut sub get_labeltitle_info { my $self = shift; return $self->{labeltitleinfo}; } =head2 set_labeldate_info Record the labeldate information. This is special meta-information so we have a seperate method for this Takes a hash ref with the information. =cut sub set_labeldate_info { my $self = shift; my $data = shift; $data->{form} = $data->{form} || 'original'; $data->{lang} = $data->{lang} || 'default'; $self->{labeldateinfo} = $data; return; } =head2 get_labeldate_info Retrieve the labeldate information. This is special meta-information so we have a seperate method for this Returns a hash ref with the information. =cut sub get_labeldate_info { my $self = shift; return $self->{labeldateinfo}; } =head2 set_field Set a derived field for a Biber::Entry object, that is, a field which was not an actual bibliography field =cut sub set_field { my $self = shift; my ($key, $val, $form, $lang) = @_; $form = $form || 'original'; $lang = $lang || 'default'; # All derived fields can be null $self->{derivedfields}{$key}{$form}{$lang} = $val; return; } =head2 get_field Get a field for a Biber::Entry object Uses // as fields can be null (end dates etc). =cut sub get_field { no autovivification; my $self = shift; my ($key, $form, $lang) = @_; return undef unless $key; $form = $form || 'original'; $lang = $lang || 'default'; # Override for special fields whose form and langs are assumed to be already resolved. if ( first {$key eq $_} ( 'labelname', 'labeltitle', 'labelyear', 'labelmonth', 'labelday' )) { $form = 'original'; $lang = 'default'; } return $self->{datafields}{$key}{$form}{$lang} // $self->{derivedfields}{$key}{$form}{$lang} // $self->{rawfields}{$key}; } =head2 get_field_forms Get all field forms for a Biber::Entry object field =cut sub get_field_forms { no autovivification; my $self = shift; my $key = shift; return undef unless $key; return $self->{datafields}{$key} || $self->{derivedfields}{$key}; } =head2 get_field_form_names Get all field form names for a Biber::Entry object field =cut sub get_field_form_names { no autovivification; my $self = shift; my $key = shift; return undef unless $key; return sort keys %{$self->{datafields}{$key} || $self->{derivedfields}{$key} || {}}; } =head2 get_field_form_lang_names Get all field lang names for a Biber::Entry object field and form =cut sub get_field_form_lang_names { no autovivification; my $self = shift; my ($key, $form) = @_; return undef unless $key; return undef unless $form; return sort keys %{$self->{datafields}{$key}{$form} || $self->{derivedfields}{$key}{$form} || {}}; } =head2 set_datafield Set a field which is in the .bib data file =cut sub set_datafield { my $self = shift; my ($key, $val, $form, $lang) = @_; $form = $form || 'original'; $lang = $lang || 'default'; $self->{datafields}{$key}{$form}{$lang} = $val; return; } =head2 set_datafield_forms Set all forms of a field which is in the bib data file =cut sub set_datafield_forms { my $self = shift; my ($key, $val) = @_; $self->{datafields}{$key} = $val; return; } =head2 set_rawfield Save a copy of the raw field from the datasource =cut sub set_rawfield { my $self = shift; my ($key, $val) = @_; $self->{rawfields}{$key} = $val; return; } =head2 get_rawfield Get a raw field =cut sub get_rawfield { no autovivification; my $self = shift; my $key = shift; return $self->{rawfields}{$key}; } =head2 get_datafield Get a field that was in the original data file =cut sub get_datafield { no autovivification; my $self = shift; my ($key, $form, $lang) = @_; $form = $form || 'original'; $lang = $lang || 'default'; return $self->{datafields}{$key}{$form}{$lang}; } =head2 del_field Delete a field in a Biber::Entry object =cut sub del_field { my $self = shift; my $key = shift; delete $self->{datafields}{$key}; delete $self->{derivedfields}{$key}; delete $self->{rawfields}{$key}; return; } =head2 del_datafield Delete an original data source data field in a Biber::Entry object =cut sub del_datafield { my $self = shift; my $key = shift; delete $self->{datafields}{$key}; return; } =head2 field_exists Check whether a field exists (even if null) =cut sub field_exists { no autovivification; my $self = shift; my $key = shift; return ($self->{datafields}{$key} || $self->{derivedfields}{$key} || $self->{rawfields}{$key}) ? 1 : 0; } =head2 field_form_exists Check whether a representation form for a field exists (even if null) =cut sub field_form_exists { no autovivification; my $self = shift; my ($key, $form) = @_; $form = $form || 'original'; return ($self->{datafields}{$key}{$form} || $self->{derivedfields}{$key}{$form}) ? 1 : 0; } =head2 datafields Returns a sorted array of the fields which came from the data source =cut sub datafields { my $self = shift; use locale; return sort keys %{$self->{datafields}}; } =head2 rawfields Returns a sorted array of the raw fields and contents =cut sub rawfields { my $self = shift; use locale; return sort keys %{$self->{rawfields}}; } =head2 count_datafields Returns the number of datafields =cut sub count_datafields { my $self = shift; return keys %{$self->{datafields}}; } =head2 fields Returns a sorted array of all field names, including ones added during processing which are not necessarily fields which came from the data file =cut sub fields { my $self = shift; use locale; my %keys = (%{$self->{derivedfields}}, %{$self->{datafields}}); return sort keys %keys; } =head2 count_fields Returns the number of fields =cut sub count_fields { my $self = shift; my %keys = (%{$self->{derivedfields}}, %{$self->{datafields}}); return keys %keys; } =head2 has_keyword Check if a Biber::Entry object has a particular keyword in in the KEYWORDS field. =cut sub has_keyword { no autovivification; my $self = shift; my ($keyword, $form, $lang) = @_; $form = $form || 'original'; $lang = $lang || 'default'; if (my $keywords = $self->{datafields}{keywords}{$form}{$lang}) { return (first {$_ eq $keyword} @$keywords) ? 1 : 0; } else { return 0; } return undef; # shouldn't get here } =head2 add_warning Append a warning to a Biber::Entry object =cut sub add_warning { my $self = shift; my $warning = shift; push @{$self->{derivedfields}{warnings}{original}{default}}, $warning; return; } =head2 set_inherit_from Inherit fields from parent entry $entry->set_inherit_from($parententry); Takes a second Biber::Entry object as argument Tailored for set inheritance which is a straight 1:1 inheritance, excluding certain fields for backwards compatibility =cut sub set_inherit_from { my $self = shift; my $parent = shift; # Data source fields foreach my $field ($parent->datafields) { next if $self->field_exists($field); # Don't overwrite existing fields $self->set_datafield_forms($field, dclone($parent->get_field_forms($field))); } # Datesplit is a special non datafield and needs to be inherited for any # validation checks which may occur later if (my $ds = $parent->get_field('datesplit')) { $self->set_field('datesplit', $ds); } return; } =head2 resolve_xdata Recursively resolve XDATA fields in an entry $entry->resolve_xdata($xdata_entry); =cut sub resolve_xdata { my ($self, $xdata) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $entry_key = $self->get_field('citekey'); foreach my $xdatum (@$xdata) { unless (my $xdatum_entry = $section->bibentry($xdatum)) { biber_warn("Entry '$entry_key' references XDATA entry '$xdatum' which does not exist in section $secnum"); next; } else { # Skip xdata inheritance if we've already done it # This will only ever be between two XDATA entrytypes since we # always start at a non-XDATA entrytype, which we'll not look at again # and recursion is always between XDATA entrytypes. next if Biber::Config->get_inheritance('xdata', $xdatum, $entry_key); # record the XDATA resolve between these entries to prevent loops Biber::Config->set_inheritance('xdata', $xdatum, $entry_key); # Detect XDATA loops unless (Biber::Config->is_inheritance_path('xdata', $entry_key, $xdatum)) { if (my $recurse_xdata = $xdatum_entry->get_field('xdata')) { # recurse $xdatum_entry->resolve_xdata($recurse_xdata); } # For tool mode with bibtex output we need to copy the raw fields if (Biber::Config->getoption('tool') and Biber::Config->getoption('output_format') eq 'bibtex') { foreach my $field ($xdatum_entry->rawfields()) { # set raw fields next if $field eq 'ids'; # Never inherit aliases $self->set_rawfield($field, $xdatum_entry->get_rawfield($field)); $logger->debug("Setting field '$field' in entry '$entry_key' via XDATA"); } } else { foreach my $field ($xdatum_entry->datafields()) { # set fields next if $field eq 'ids'; # Never inherit aliases $self->set_datafield_forms($field, $xdatum_entry->get_field_forms($field)); # Record graphing information if required if (Biber::Config->getoption('output_format') eq 'dot') { Biber::Config->set_graph('xdata', $xdatum_entry->get_field('citekey'), $entry_key, $field, $field); } $logger->debug("Setting field '$field' in entry '$entry_key' via XDATA"); } } } else { biber_error("Circular XDATA inheritance between '$xdatum'<->'$entry_key'"); } } } } =head2 inherit_from Inherit fields from parent entry (as indicated by the crossref field) $entry->inherit_from($parententry); Takes a second Biber::Entry object as argument Uses the crossref inheritance specifications from the .bcf =cut sub inherit_from { my ($self, $parent) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $target_key = $self->get_field('citekey'); # target/child key my $source_key = $parent->get_field('citekey'); # source/parent key # record the inheritance between these entries to prevent loops and repeats. Biber::Config->set_inheritance('crossref', $source_key, $target_key); # Detect crossref loops unless (Biber::Config->is_inheritance_path('crossref', $target_key, $source_key)) { # cascading crossrefs if (my $ppkey = $parent->get_field('crossref')) { $parent->inherit_from($section->bibentry($ppkey)); } } else { biber_error("Circular inheritance between '$source_key'<->'$target_key'"); } my $type = $self->get_field('entrytype'); my $parenttype = $parent->get_field('entrytype'); my $inheritance = Biber::Config->getblxoption('inheritance'); my %processed; # get defaults my $defaults = $inheritance->{defaults}; # global defaults ... my $inherit_all = $defaults->{inherit_all}; my $override_target = $defaults->{override_target}; # override with type_pair specific defaults if they exist ... foreach my $type_pair (@{$defaults->{type_pair}}) { if (($type_pair->{source} eq '*' or $type_pair->{source} eq $parenttype) and ($type_pair->{target} eq '*' or $type_pair->{target} eq $type)) { $inherit_all = $type_pair->{inherit_all} if $type_pair->{inherit_all}; $override_target = $type_pair->{override_target} if $type_pair->{override_target}; } } # First process any fields that have special treatment foreach my $inherit (@{$inheritance->{inherit}}) { # Match for this combination of entry and crossref parent? foreach my $type_pair (@{$inherit->{type_pair}}) { if (($type_pair->{source} eq '*' or $type_pair->{source} eq $parenttype) and ($type_pair->{target} eq '*' or $type_pair->{target} eq $type)) { foreach my $field (@{$inherit->{field}}) { next unless $parent->field_exists($field->{source}); $processed{$field->{source}} = 1; # localise defaults according to field, if specified my $field_override_target = $field->{override_target} // 'false'; # Skip this field if requested if ($field->{skip}) { $processed{$field->{source}} = 1; } # Set the field if it doesn't exist or override is requested elsif (not $self->field_exists($field->{target}) or $field_override_target eq 'true') { $logger->debug("Entry '$target_key' is inheriting field '" . $field->{source}. "' as '" . $field->{target} . "' from entry '$source_key'"); # For tool mode with bibtex output we need to copy the raw fields if (Biber::Config->getoption('tool') and Biber::Config->getoption('output_format') eq 'bibtex') { $self->set_rawfield($field->{target}, $parent->get_rawfield($field->{source})); } else { $self->set_datafield_forms($field->{target}, $parent->get_field_forms($field->{source})); } # Record graphing information if required if (Biber::Config->getoption('output_format') eq 'dot') { Biber::Config->set_graph('crossref', $source_key, $target_key, $field->{source}, $field->{target}); } } } } } } # Now process the rest of the (original data only) fields, if necessary if ($inherit_all eq 'true') { my @fields; if (Biber::Config->getoption('tool')) { @fields = $parent->rawfields; } else { @fields = $parent->datafields; } foreach my $field (@fields) { next if $processed{$field}; # Skip if we have already dealt with this field above # Set the field if it doesn't exist or override is requested if (not $self->field_exists($field) or $override_target eq 'true') { $logger->debug("Entry '$target_key' is inheriting field '$field' from entry '$source_key'"); # For tool mode with bibtex output we need to copy the raw fields if (Biber::Config->getoption('tool') and Biber::Config->getoption('output_format') eq 'bibtex') { $self->set_rawfield($field, $parent->get_rawfield($field)); } else { $self->set_datafield_forms($field, $parent->get_field_forms($field)); } # Record graphing information if required if (Biber::Config->getoption('output_format') eq 'dot') { Biber::Config->set_graph('crossref', $source_key, $target_key, $field, $field); } } } } # Datesplit is a special non datafield and needs to be inherited for any # validation checks which may occur later if (my $ds = $parent->get_field('datesplit')) { $self->set_field('datesplit', $ds); } return; } =head2 dump Dump Biber::Entry object =cut sub dump { my $self = shift; return pp($self); } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Section.pm000444000000000000 3014012230324176 17242 0ustar00rootroot000000000000package Biber::Section; use v5.16; use strict; use warnings; use Biber::Entries; use Biber::Utils; use List::Util qw( first ); =encoding utf-8 =head1 NAME Biber::Section =head2 new Initialize a Biber::Section object =cut sub new { my ($class, %params) = @_; my $self = bless {%params}, $class; $self->{bibentries} = new Biber::Entries; $self->{keytorelclone} = {}; $self->{relclonetokey} = {}; $self->{relkeys} = {}; $self->{allkeys} = 0; $self->{citekeys} = []; $self->{citekeys_h} = {}; # For faster hash-based lookup of individual keys $self->{labelcache_l} = {}; $self->{everykey} = {}; $self->{everykey_lc} = {}; $self->{bcfkeycache} = {}; $self->{labelcache_v} = {}; $self->{sortcache} = []; $self->{dkeys} = {}; $self->{keytods} = {}; $self->{orig_order_citekeys} = []; $self->{undef_citekeys} = []; $self->{citekey_alias} = {}; return $self; } =head2 reset_caches Reset section caches which need it =cut sub reset_caches { my $self = shift; $self->{sortcache} = []; $self->{labelcache_l} = {}; $self->{labelcache_v} = {}; $self->{bcfkeycache} = {}; return; } =head2 set_keytods Save information about citekey->datasource name mapping. Used for error reporting. =cut sub set_keytods { my ($self, $key, $ds) = @_; $self->{keytods}{$key} = $ds; return; } =head2 get_keytods Get information about citekey->datasource name mapping. Used for error reporting. =cut sub get_keytods { my ($self, $key) = @_; return $self->{keytods}{$key}; } =head2 has_badcasekey Returns a value to say if we've seen a key differing only in case before - we've seen a differently cased variant of this key so we can warn about this undef - Not seen this key at all in any case variant before =cut sub has_badcasekey { my ($self, $key) = @_; my $ckey = $self->{everykey_lc}{lc($key)}; return undef unless $ckey; return $ckey ne $key ? $ckey : undef; } =head2 add_related Record that a key is used as a related entry =cut sub add_related { my ($self, $key) = @_; $self->{relkeys}{$key} = 1; return; } =head2 is_related Check if a key is used as a related entry key =cut sub is_related { my ($self, $key) = @_; return $self->{relkeys}{$key}; } =head2 keytorelclone Record a key<->clone key mapping. =cut sub keytorelclone { my ($self, $key, $clonekey) = @_; $self->{keytorelclone}{$key} = $clonekey; $self->{relclonetokey}{$clonekey} = $key; return; } =head2 get_keytorelclone Fetch a related entry clone key, given a cite key =cut sub get_keytorelclone { my ($self, $key) = @_; return $self->{keytorelclone}{$key}; } =head2 get_relclonetokey Fetch a related entry key, given a clone key =cut sub get_relclonetokey { my ($self, $key) = @_; return $self->{relclonetokey}{$key}; } =head2 has_keytorelclone Return boolean saying if a cite key has a related entry clone in the current section =cut sub has_keytorelclone { my ($self, $key) = @_; return defined($self->{keytorelclone}{$key}) ? 1 : 0; } =head2 has_relclonetokey Return boolean saying if a related clone key has a citekey in the current section =cut sub has_relclonetokey { my ($self, $key) = @_; return defined($self->{relclonetokey}{$key}) ? 1 : 0; } =head2 add_everykey Adds a datasource key to the section list of all datasource keys =cut sub add_everykey { my ($self, $key) = @_; $self->{everykey}{$key} = 1; $self->{everykey_lc}{lc($key)} = $key; return; } =head2 del_everykeys Delete everykey cache. For use in tests. =cut sub del_everykeys { my $self = shift; $self->{everykey} = undef $self->{everykey_lc} = undef; return; } =head2 has_everykey Returns a boolean to say if we've seen a key in any datasource for this section. This used to be an array ref which was checked using first() and it was twenty times slower. =cut sub has_everykey { my ($self, $key) = @_; return $self->{everykey}{$key} ? 1 : 0; } =head2 set_allkeys Sets flag to say citekey '*' occurred in citekeys We allow setting it to false too because it's useful in tests =cut sub set_allkeys { my ($self, $val) = @_; $self->{allkeys} = $val; return; } =head2 is_allkeys Checks flag which says citekey '*' occurred in citekeys =cut sub is_allkeys { my $self = shift; return $self->{allkeys}; } =head2 bibentry Returns a Biber::Entry object for the given citation key Understands citekey aliases =cut sub bibentry { my ($self, $key) = @_; if (my $realkey = $self->get_citekey_alias($key)) { return $self->bibentries->entry($realkey); } else { return $self->bibentries->entry($key); } } =head2 bibentries Return Biber::Entries object for this section =cut sub bibentries { my $self = shift; return $self->{bibentries}; } =head2 del_bibentries Delete all Biber::Entry objects from the Biber::Section object =cut sub del_bibentries { my $self = shift; $self->{bibentries} = new Biber::Entries; return; } =head2 set_citekeys Sets the citekeys in a Biber::Section object =cut sub set_citekeys { my $self = shift; my $keys = shift; map { $self->{citekeys_h}{$_} = 1} @$keys; $self->{citekeys} = $keys; return; } =head2 set_orig_order_citekeys Sets the original order of citekeys in a Biber::Section object =cut sub set_orig_order_citekeys { my $self = shift; my $keys = shift; $self->{orig_order_citekeys} = $keys; return; } =head2 get_citekeys Gets the citekeys of a Biber::Section object Returns a normal array =cut sub get_citekeys { my $self = shift; return @{$self->{citekeys}}; } =head2 get_static_citekeys Gets the citekeys of a Biber::Section object excluding dynamic set entry keys Returns a normal array =cut sub get_static_citekeys { my $self = shift; return reduce_array($self->{citekeys}, $self->dynamic_set_keys); } =head2 add_undef_citekey Adds a citekey to the Biber::Section object as an undefined key. This allows us to output this information to the .bbl and so biblatex can do better reporting to external utils like latexmk =cut sub add_undef_citekey { my $self = shift; my $key = shift; push @{$self->{undef_citekeys}}, $key; return; } =head2 get_undef_citekeys Gets the list of undefined citekeys of a Biber::Section object Returns a normal array =cut sub get_undef_citekeys { my $self = shift; return @{$self->{undef_citekeys}}; } =head2 get_orig_order_citekeys Gets the citekeys of a Biber::Section object in their original order This is just to ensure we have a method that will return this, just in case we mess about with the order at some point. This is needed by citeorder sorting. =cut sub get_orig_order_citekeys { my $self = shift; return @{$self->{orig_order_citekeys}}; } =head2 has_citekey Returns true when $key is in the Biber::Section object Understands key alaises =cut sub has_citekey { my $self = shift; my $key = shift; return $self->{citekeys_h}{$self->get_citekey_alias($key) || $key} ? 1 : 0; } =head2 del_citekey Deletes a citekey from a Biber::Section object =cut sub del_citekey { my $self = shift; my $key = shift; return unless $self->has_citekey($key); $self->{citekeys} = [ grep {$_ ne $key} @{$self->{citekeys}} ]; $self->{orig_order_citekeys} = [ grep {$_ ne $key} @{$self->{orig_order_citekeys}} ]; delete $self->{citekeys_h}{$key}; return; } =head2 del_citekeys Deletes all citekeys from a Biber::Section object =cut sub del_citekeys { my $self = shift; $self->{citekeys} = []; $self->{citekeys_h} = {}; $self->{orig_order_citekeys} = []; return; } =head2 add_citekeys Adds citekeys to the Biber::Section object =cut sub add_citekeys { my $self = shift; my @keys = @_; foreach my $key (@keys) { next if $self->has_citekey($key); $self->{citekeys_h}{$key} = 1; push @{$self->{citekeys}}, $key; push @{$self->{orig_order_citekeys}}, $key; } return; } =head2 set_citekey_alias Set citekey alias information =cut sub set_citekey_alias { my $self = shift; my ($alias, $key) = @_; $self->{citekey_alias}{$alias} = $key; return; } =head2 get_citekey_alias Get citekey alias information =cut sub get_citekey_alias { my $self = shift; my $alias = shift; return $self->{citekey_alias}{$alias}; } =head2 del_citekey_alias Delete citekey alias =cut sub del_citekey_alias { my $self = shift; my $alias = shift; delete($self->{citekey_alias}{$alias}); return; } =head2 get_citekey_aliases Get a list of all citekey aliases for the section =cut sub get_citekey_aliases { my $self = shift; return ( keys %{$self->{citekey_alias}} ); } =head2 set_labelcache_v Sets the variable label disambiguation cache for a field =cut sub set_labelcache_v { my ($self, $field, $cache) = @_; $self->{labelcache_v}{$field} = $cache; return; } =head2 get_labelcache_v Gets the variable label disambiguation cache for a field =cut sub get_labelcache_v { my ($self, $field) = @_; return $self->{labelcache_v}{$field}; } =head2 set_labelcache_l Sets the list label disambiguation cache for a field =cut sub set_labelcache_l { my ($self, $field, $cache) = @_; $self->{labelcache_l}{$field} = $cache; return; } =head2 get_labelcache_l Gets the list label disambiguation cache for a field =cut sub get_labelcache_l { my ($self, $field) = @_; return $self->{labelcache_l}{$field}; } =head2 is_dynamic_set Test if a key is a dynamic set =cut sub is_dynamic_set { my $self = shift; my $dkey = shift; return defined($self->{dkeys}{$dkey}) ? 1 : 0; } =head2 set_dynamic_set Record a mapping of dynamic key to member keys =cut sub set_dynamic_set { my $self = shift; my $dkey = shift; my @members = @_; $self->{dkeys}{$dkey} = \@members; return; } =head2 get_dynamic_set Retrieve member keys for a dynamic set key Check that reference returning anything to stop spurious warnings about empty dereference in return. =cut sub get_dynamic_set { my $self = shift; my $dkey = shift; if (my $set_members = $self->{dkeys}{$dkey}) { return @$set_members; } else { return (); } } =head2 dynamic_set_keys Retrieve all dynamic set keys =cut sub dynamic_set_keys { my $self = shift; return [keys %{$self->{dkeys}}]; } =head2 add_datasource Adds a data source to a section =cut sub add_datasource { my $self = shift; my $source = shift; push @{$self->{datasources}}, $source; return; } =head2 set_datasources Sets the data sources for a section =cut sub set_datasources { my $self = shift; my $sources = shift; $self->{datasources} = $sources; return; } =head2 get_datasources Gets an array of data sources for this section =cut sub get_datasources { my $self = shift; if (exists($self->{datasources})) { return $self->{datasources}; } else { return undef; } } =head2 add_sort_cache Adds a scheme/keys pair to the sort cache: [$scheme, $keys, $sortinitdata, $extraalphadata, $extrayeardata ] =cut sub add_sort_cache { my $self = shift; my $cacheitem = shift; push @{$self->{sortcache}}, $cacheitem; return; } =head2 get_sort_cache Retrieves the sort cache =cut sub get_sort_cache { my $self = shift; return $self->{sortcache}; } =head2 number Gets the section number of a Biber::Section object =cut sub number { my $self = shift; return $self->{number}; } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/LaTeX000755000000000000 012230324177 16103 5ustar00rootroot000000000000biblatex-biber-1.8/lib/Biber/LaTeX/recode_data.xml000444000000000000 16344212230324177 21266 0ustar00rootroot000000000000 `̀ '́ ^̂ ~̃ =̄ .̇ "̈ textquotedbl " textdollar $ textpercent % textampersand & textquotesingle ' textasteriskcentered * textless < textequals = textgreater > textbackslash \ textasciicircum ^ textunderscore _ textasciigrave ` textg g textbraceleft { textbar | textbraceright } textasciitilde ~ nobreakspace   textexclamdown ¡ textcent ¢ textsterling £ pounds £ textcurrency ¤ textyen ¥ textbrokenbar ¦ textsection § S § textasciidieresis ¨ textcopyright © copyright © textordfeminine ª guillemotleft « textminus textregistered ® textasciimacron ¯ textdegree ° texttwosuperior ² textthreesuperior ³ textasciiacute ´ textparagraph P textcentereddot · textperiodcentered · textasciicedilla ¸ textonesuperior ¹ textordmasculine º guillemotright » textonequarter ¼ textonehalf ½ textthreequarters ¾ textquestiondown ¿ AA Å AE Æ DH Ð O Ø Thorn Þ TH Þ ss ß aa å ae æ dh ð o ø textthorn þ textthornvari þ textthornvarii þ textthornvariii þ textthornvariv þ th þ DJ Đ dj đ textcrd đ textHbar Ħ textcrh ħ texthbar ħ i ı IJ IJ ij ij textkra ĸ L Ł textbarl ł l ł NG Ŋ ng ŋ OE Œ oe œ textTbar Ŧ textTstroke Ŧ texttbar ŧ texttstroke ŧ textcrb ƀ textBhook Ɓ textOopen Ɔ textChook Ƈ textchook ƈ texthtc ƈ textDafrican Ɖ textDhook Ɗ textEreversed Ǝ textEopen Ɛ textFhook Ƒ textflorin ƒ textGammaafrican Ɣ texthvlig ƕ hv ƕ textIotaafrican Ɩ textKhook Ƙ textkhook ƙ texthtk ƙ textcrlambda ƛ textNhookleft Ɲ OHORN Ơ ohorn ơ textPhook Ƥ textphook ƥ texthtp ƥ textEsh Ʃ ESH Ʃ textlooptoprevesh ƪ textpalhookbelow ƫ textThook Ƭ textthook ƭ texthtt ƭ textTretroflexhook Ʈ UHORN Ư uhorn ư textVhook Ʋ textYhook Ƴ textyhook ƴ textEzh Ʒ texteturned ǝ textturna ɐ textscripta ɑ textturnscripta ɒ textbhook ɓ texthtb ɓ textoopen ɔ textopeno ɔ textctc ɕ textdtail ɖ textrtaild ɖ textdhook ɗ texthtd ɗ textreve ɘ textschwa ə textrhookschwa ɚ texteopen ɛ textepsilon ɛ textrevepsilon ɜ textrhookrevepsilon ɝ textcloserevepsilon ɞ textbardotlessj ɟ texthtg ɠ textscriptg ɡ textscg ɢ textgammalatinsmall ɣ textgamma ɣ textramshorns ɤ textturnh ɥ texthth ɦ texththeng ɧ textbari ɨ textiotalatin ɩ textiota ɩ textsci ɪ textltilde ɫ textbeltl ɬ textrtaill ɭ textlyoghlig ɮ textturnm ɯ textturnmrleg ɰ textltailm ɱ textltailn ɲ textnhookleft ɲ textrtailn ɳ textscn ɴ textbaro ɵ textscoelig ɶ textcloseomega ɷ textphi ɸ textturnr ɹ textturnlonglegr ɺ textturnrrtail ɻ textlonglegr ɼ textrtailr ɽ textfishhookr ɾ textlhti ɿ textscr ʀ textinvscr ʁ textrtails ʂ textesh ʃ texthtbardotlessj ʄ textraisevibyi ʅ textctesh ʆ textturnt ʇ textrtailt ʈ texttretroflexhook ʈ textbaru ʉ textupsilon ʊ textscriptv ʋ textvhook ʋ textturnv ʌ textturnw ʍ textturny ʎ textscy ʏ textrtailz ʐ textctz ʑ textezh ʒ textyogh ʒ textctyogh ʓ textglotstop ʔ textrevglotstop ʕ textinvglotstop ʖ textstretchc ʗ textbullseye ʘ textscb ʙ textcloseepsilon ʚ texthtscg ʛ textsch ʜ textctj ʝ textturnk ʞ textscl ʟ texthtq ʠ textbarglotstop ʡ textbarrevglotstop ʢ textdzlig ʣ textdyoghlig ʤ textdctzlig ʥ texttslig ʦ textteshlig ʧ texttesh ʧ texttctclig ʨ hamza ʾ ain ʿ ayn ʿ textprimstress ˈ textlengthmark ː r ̊ H ̋ u ̆ v ̌ G ̏ M ̢ d ̣ c ̧ k ̨ b ̱ B ̵ t ̑ textvbaraccent ̍ textdoublevbaraccent ̎ textdotbreve ̐ textturncommaabove ̒ textcommaabove ̓ textrevcommaabove ̔ textcommaabover ̕ textsubgrave ̖ textsubacute ̗ textadvancing ̘ textretracting ̙ textlangleabove ̚ textrighthorn ̛ textsublhalfring ̜ textraising ̝ textlowering ̞ textsubplus ̟ textsubbar ̠ textsubminus ̠ textpalhookbelow ̡ textsubumlaut ̤ textsubring ̥ textcommabelow ̦ textsyllabic ̩ textsubbridge ̪ textsubw ̫ textsubwedge ̬ textsubcircnum ̭ textsubbreve ̮ textundertie ̮ textsubarch ̯ textsubtilde ̰ subdoublebar ̳ textsuperimposetilde ̴ textlstrokethru ̶ textsstrikethru ̷ textlstrikethru ̸ textsubrhalfring ̹ textinvsubbridge ̺ textsubsquare ̻ textseagull ̼ textovercross ̽ overbridge ͆ subdoublebar ͇ subdoublevert ͈ subcorner ͉ crtilde ͊ textoverw ͊ dottedtilde ͋ doubletilde ͌ spreadlips ͍ whistle ͎ textrightarrowhead ͐ textlefthalfring ͑ sublptr ͔ subrptr ͕ textrightuparrowhead ͖ textrighthalfring ͗ textdoublebreve ͝ textdoublemacron ͞ textdoublemacronbelow ͟ textdoubletilde ͠ texttoptiebar ͡ sliding ͢ textendash textemdash textquoteleft textquoteright quotesinglbase textquotedblleft textquotedblright quotedblbase dag ddag textbullet dots textperthousand textpertenthousand guilsinglleft guilsinglright textreferencemark textinterrobang textoverline langle rangle textdiv ÷ div ÷ texttimes × times × textmu µ mu µ textpm ± pm ± textlogicalnot ¬ lnot ¬ textcolonmonetary textlira textnaira textwon textdong euro texteuro textnumero texttrademark leftarrow uparrow rightarrow downarrow leftrightarrow updownarrow leadsto rightleftharpoons Rightarrow Leftrightarrow forall complement partial exists nexists set Delta nabla in notin ni prod coprod sum mp dotplus setminus ast circ bullet surd propto infty angle measuredangle sphericalangle mid nmid parallel nparallel wedge vee cap cup int iint iiint oint therefore because sim backsim wr nsim simeq cong ncong approx approxeq asymp Bumpeq bumpeq doteq doteqdot fallingdotseq risingdotseq eqcirc circeq triangleq neq equiv leq geq leqq geqq lneqq gneqq ll gg between nless ngtr nleq ngeq lesssim gtrsim lessgtr gtrless prec succ preccurlyeq succcurlyeq precsim succsim nprec nsucc subset supset subseteq supseteq nsubseteq nsupseteq subsetneq supsetneq uplus sqsubset sqsupset sqsubseteq sqsupseteq sqcap sqcup oplus ominus otimes oslash odot circledcirc circledast circleddash boxplus boxminus boxtimes boxdot vdash dashv top bot Vdash Vvdash nVdash lhd rhd unlhd unrhd multimap intercal veebar barwedge bigwedge bigvee bigcap bigcup diamond cdot star divideontimes bowtie ltimes rtimes leftthreetimes rightthreetimes backsimeq curlyvee curlywedge Subset Supset Cap Cup pitchfork lessdot gtrdot lll ggg lesseqgtr gtreqless curlyeqprec curlyeqsucc lnsim gnsim precnsim succnsim ntriangleleft ntriangleright ntrianglelefteq ntrianglerighteq vdots cdots ddots lceil rceil lfloor rfloor Box spadesuit heartsuit diamondsuit clubsuit flat natural sharp tone5 ˥ tone4 ˦ tone3 ˧ tone2 ˨ tone1 ˩ asymp lesssim gtrsim subset supset ni simeq approx equiv preccurlyeq succcurlyeq sqsubseteq sqsupseteq 0 i 4 5 6 7 8 9 + - = ( ) n SM h ʰ j ʲ r ʳ w ʷ y ʸ texthth ʱ textturnr ʴ textturnrrtail ʵ textinvscr ʶ 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E A1 A2 A3 A4 A5 A6 A7 A9 AA AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE alpha α beta β gamma γ delta δ varepsilon ε zeta ζ eta η vartheta θ iota ι kappa κ lambda λ mu μ nu ν xi ξ omicron ο pi π varrho ρ varsigma ς sigma σ tau τ upsilon υ varphi φ chi χ psi ψ omega ω Alpha Α Beta Β Gamma Γ Delta Δ Epsilon Ε Zeta Ζ Eta Η Theta Θ Iota Ι Kappa Κ Lambda Λ Mu Μ Nu Ν Xi Ξ Omicron Ο Pi Π Rho Ρ Sigma Σ Tau Τ Upsilon Υ Phi Φ Chi Χ Psi Ψ Omega Ω " # $ % & ' * < = > [ ] \ ^ _ ` g { | } ~   £ ± biblatex-biber-1.8/lib/Biber/LaTeX/Recode.pm000444000000000000 3204212230324175 20016 0ustar00rootroot000000000000package Biber::LaTeX::Recode; use v5.16; use strict; use warnings; use base qw(Exporter); use Biber::Config; use IPC::Cmd qw( can_run ); use IPC::Run3; # This works with PAR::Packer and Windows. IPC::Run doesn't use Unicode::Normalize; use List::AllUtils qw (first); use Log::Log4perl qw(:no_extra_logdie_message); use XML::LibXML::Simple; use Carp; our @EXPORT = qw(latex_encode latex_decode); my $logger = Log::Log4perl::get_logger('main'); =encoding utf-8 =head1 NAME Biber::LaTeX::Recode - Encode/Decode chars to/from UTF-8/lacros in LaTeX =head1 SYNOPSIS use Biber::LaTeX:Recode my $string = 'Muḥammad ibn Mūsā al-Khwārizmī'; my $latex_string = latex_encode($string); # => 'Mu\d{h}ammad ibn M\=us\=a al-Khw\=arizm\={\i}' my $string = 'Mu\d{h}ammad ibn M\=us\=a al-Khw\=arizm\={\i}'; my $utf8_string = latex_decode($string); # => 'Muḥammad ibn Mūsā al-Khwārizmī' =head1 DESCRIPTION Allows conversion between Unicode chars and LaTeX macros. =head1 GLOBAL OPTIONS Possible values for the encoding/decoding scheme to use are 'base' and 'full'; default value is 'base'. base => Most common macros and diacritics (sufficient for Western languages and common symbols) full => Also converts punctuation, larger range of diacritics and macros (e.g. for IPA, Latin Extended Additional, etc.), symbols, Greek letters, dingbats, negated symbols, and superscript characters and symbols ... =cut use vars qw( $remaps $r_remaps $scheme_d $scheme_e ); =head2 init_schemes(, ) Initialise schemes. We can't do this on loading the module as we don't have the config information to do this yet =cut sub init_schemes { shift; # class method ($scheme_d, $scheme_e) = @_; my $mapdata; # User-defined recode data file if (my $rdata = Biber::Config->getoption('recodedata')) { my $err; if ( can_run('kpsewhich') ) { run3 [ 'kpsewhich', $rdata ], \undef, \$mapdata, \$err, { return_if_system_error => 1}; if ($? == -1) { biber_error("Error running kpsewhich to look for output_safechars data file: $err"); } chomp $mapdata; $mapdata =~ s/\cM\z//xms; # kpsewhich in cygwin sometimes returns ^M at the end $mapdata = undef unless $mapdata; # sanitise just in case it's an empty string } else { biber_error("Can't run kpsewhich to look for output_safechars data file: $err"); } $logger->info("Using user-defined recode data file '$mapdata'"); } else { # we assume that the data file is in the same dir as the module (my $vol, my $data_path, undef) = File::Spec->splitpath( $INC{'Biber/LaTeX/Recode.pm'} ); # Deal with the strange world of Par::Packer paths, see similar code in Biber.pm if ($data_path =~ m|/par\-| and $data_path !~ m|/inc|) { # a mangled PAR @INC path $mapdata = File::Spec->catpath($vol, "$data_path/inc/lib/Biber/LaTeX/recode_data.xml"); } else { $mapdata = File::Spec->catpath($vol, $data_path, 'recode_data.xml'); } } # Read driver config file my $dataxml = XML::LibXML::Simple::XMLin($mapdata, 'ForceContent' => 1, 'ForceArray' => [ qr/\Amaps\z/, qr/\Amap\z/, qr/\Achar\z/, ] ); # Careful about converting to NFD on reading the file foreach my $map (@{$dataxml->{maps}}) { my @set = split(/\s*,\s*/, $map->{set}); my $type = $map->{type}; my $map = $map->{map}; next unless first {$scheme_d eq @_} @set or first {$scheme_e eq $_} @set; foreach my $set (@set) { $remaps->{$set}{$type}{map} = { map {NFD($_->{from}{content}) => NFD($_->{to}{content})} @$map }; $r_remaps->{$set}{$type}{map} = { reverse %{$remaps->{$set}{$type}{map}} }; # There are some duplicates in the hash. reverse() doesn't predictably deal with this. # Force specific prefered reverse mapping to override unpredictable reverse() # We still use reverse() and just correct it afterwards as it's fast foreach my $r (@$map) { next unless exists($r->{from}{preferred}); $r_remaps->{$set}{$type}{map}{NFD($r->{to}{content})} = NFD($r->{from}{content}); } # Things we don't want to change when encoding as this would break LaTeX foreach my $e (map {NFD($_->{content})} @{$dataxml->{encode_exclude}{char}}) { delete($r_remaps->{$set}{$type}{map}{$e}); } # Now populate the regexps if ($type eq 'accents') { $remaps->{$set}{$type}{re} = '[' . join('', sort keys %{$remaps->{$set}{$type}{map}}) . ']'; $remaps->{$set}{$type}{re} = qr/$remaps->{$set}{$type}{re}/; $r_remaps->{$set}{$type}{re} = '[' . join('', sort keys %{$r_remaps->{$set}{$type}{map}}) . ']'; $r_remaps->{$set}{$type}{re} = qr/$r_remaps->{$set}{$type}{re}/; } elsif ($type eq 'superscripts') { $remaps->{$set}{$type}{re} = join('|', map { /[\+\-\)\(]/ ? '\\' . $_ : $_ } sort keys %{$remaps->{$set}{$type}{map}}); $remaps->{$set}{$type}{re} = qr|$remaps->{$set}{$type}{re}|; $r_remaps->{$set}{$type}{re} = join('|', map { /[\+\-\)\(]/ ? '\\' . $_ : $_ } sort keys %{$r_remaps->{$set}{$type}{map}}); $r_remaps->{$set}{$type}{re} = qr|$r_remaps->{$set}{$type}{re}|; } else { $remaps->{$set}{$type}{re} = join('|', sort keys %{$remaps->{$set}{$type}{map}}); $remaps->{$set}{$type}{re} = qr|$remaps->{$set}{$type}{re}|; $r_remaps->{$set}{$type}{re} = join('|', sort keys %{$r_remaps->{$set}{$type}{map}}); $r_remaps->{$set}{$type}{re} = qr|$r_remaps->{$set}{$type}{re}|; } } } } =head2 latex_decode($text, @options) Converts LaTeX macros in the $text to Unicode characters. The function accepts a number of options: * normalize => $bool (default 1) whether the output string should be normalized with Unicode::Normalize * normalization => (default 'NFD') and if yes, the normalization form to use (see the Unicode::Normalize documentation) * strip_outer_braces => $bool (default 0) whether the outer curly braces around letters+combining marks should be stripped off. By default "fut{\\'e}" becomes fut{é}, to prevent something like '\\textuppercase{\\'e}' from becoming '\\textuppercaseé'. Setting this option to TRUE can be useful for instance when converting BibTeX files. =cut sub latex_decode { my $text = shift; # Optimisation - if there are no macros, no point doing anything return $text unless $text =~ m/\\/; $logger->trace("String before latex_decode() -> '$text'"); my %opts = @_; my $norm = exists $opts{normalize} ? $opts{normalize} : 1; my $norm_form = exists $opts{normalization} ? $opts{normalization} : 'NFD'; my $strip_outer_braces = exists $opts{strip_outer_braces} ? $opts{strip_outer_braces} : 0; # Deal with raw TeX \char macros. $text =~ s/\\char"(\p{ASCII_Hex_Digit}+)/"chr(0x$1)"/gee; # hex chars $text =~ s/\\char'(\d+)/"chr(0$1)"/gee; # octal chars $text =~ s/\\char(\d+)/"chr($1)"/gee; # decimal chars my $mainmap; foreach my $type (sort keys %{$remaps->{$scheme_d}}) { my $map = $remaps->{$scheme_d}{$type}{map}; my $re = $remaps->{$scheme_d}{$type}{re}; if ($type eq 'negatedsymbols') { $text =~ s/\\not\\($re)/$map->{$1}/ge if $re; } elsif ($type eq 'superscripts') { $text =~ s/\\textsuperscript{($re)}/$map->{$1}/ge if $re; } elsif ($type eq 'cmssuperscripts') { $text =~ s/\\textsuperscript{\\($re)}/$map->{$1}/ge if $re; } elsif ($type eq 'dings') { $text =~ s/\\ding{([2-9AF][0-9A-F])}/$map->{$1}/ge; } } $text =~ s/(\\[a-zA-Z]+)\\(\s+)/$1\{\}$2/g; # \foo\ bar -> \foo{} bar $text =~ s/([^{]\\\w)([;,.:%])/$1\{\}$2/g; #} Aaaa\o, -> Aaaa\o{}, my $d_re = $remaps->{$scheme_d}{diacritics}{re} || ''; my $a_re = $remaps->{$scheme_d}{accents}{re} || ''; # special cases such as '\={\i}' -> '\={i}' -> "i\x{304}" $text =~ s/(\\(?:$d_re|$a_re)){\\i}/$1\{i\}/g; foreach my $type (sort keys %{$remaps->{$scheme_d}}) { my $map = $remaps->{$scheme_d}{$type}{map}; my $re = $remaps->{$scheme_d}{$type}{re}; next unless $re; if (first {$type eq $_} ('wordmacros', 'punctuation', 'symbols', 'greek')) { ## remove {} around macros that print one character ## by default we skip that, as it would break constructions like \foo{\i} if ($strip_outer_braces) { $text =~ s/ \{\\($re)\} / $map->{$1} /gxe; } $text =~ s/\\($re)(?: \{\} | \s+ | \b) / $map->{$1} /gxe; } if ($type eq 'accents') { $text =~ s/\\($re)\{(\p{L}\p{M}*)\}/$2 . $map->{$1}/ge; $text =~ s/\\($re)(\p{L}\p{M}*)/$2 . $map->{$1}/ge; $text =~ s/\\($re)\{(\p{L}\p{M}*)\}/$2 . $map->{$1}/ge; $text =~ s/\\($re)(\p{L}\p{M}*)/$2 . $map->{$1}/ge; } if ($type eq 'diacritics') { $text =~ s/\\($re)\s*\{(\p{L}\p{M}*)\}/$2 . $map->{$1}/ge; $text =~ s/\\($re)\s+(\p{L}\p{M}*)/$2 . $map->{$1}/ge; $text =~ s/\\($re)\s*\{(\p{L}\p{M}*)\}/$2 . $map->{$1}/ge; $text =~ s/\\($re)\s+(\p{L}\p{M}*)/$2 . $map->{$1}/ge; } } ## remove {} around letter+combining mark(s) ## by default we skip that, as it would destroy constructions like \foo{\`e} if ($strip_outer_braces) { $text =~ s/{(\PM\pM+)}/$1/g; } $logger->trace("String in latex_decode() now -> '$text'"); if ($norm) { return Unicode::Normalize::normalize( $norm_form, $text ); } else { return $text; } } =head2 latex_encode($text, @options) Converts UTF-8 to LaTeX =cut sub latex_encode { my $text = shift; foreach my $type (sort keys %{$r_remaps->{$scheme_e}}) { my $map = $r_remaps->{$scheme_e}{$type}{map}; my $re = $r_remaps->{$scheme_e}{$type}{re}; if ($type eq 'negatedsymbols') { $text =~ s/($re)/"{\$\\not\\" . $map->{$1} . '$}'/ge; } elsif ($type eq 'superscripts') { $text =~ s/($re)/"\\textsuperscript{" . $map->{$1} . "}"/ge; } elsif ($type eq 'cmdsuperscripts') { $text =~ s/($re)/"\\textsuperscript{\\" . $map->{$1} . "}"/ge; } elsif ($type eq 'dings') { $text =~ s/($re)/"\\ding{" . $map->{$1} . "}"/ge; } } foreach my $type (sort keys %{$r_remaps->{$scheme_e}}) { my $map = $r_remaps->{$scheme_e}{$type}{map}; my $re = $r_remaps->{$scheme_e}{$type}{re}; if ($type eq 'accents') { # Accents # special case such as "i\x{304}" -> '\={\i}' - "i" needs the dot removing for accents $text =~ s/i($re)/"\\" . $map->{$1} . "{\\i}"/ge; $text =~ s/\{(\p{L}\p{M}*)\}($re)/"\\" . $map->{$2} . "{$1}"/ge; $text =~ s/(\p{L}\p{M}*)($re)/"\\" . $map->{$2} . "{$1}"/ge; } if ($type eq 'diacritics') { # Diacritics $text =~ s{ (\P{M})($re)($re)($re) }{ "\\" . $map->{$4} . "{\\" . $map->{$3} . "{\\" . $map->{$2} . _get_diac_last_r($1,$2) . '}}' }gex; $text =~ s{ (\P{M})($re)($re) }{ "\\" . $map->{$3} . "{\\" . $map->{$2} . _get_diac_last_r($1,$2) . '}' }gex; $text =~ s{ (\P{M})($re) }{ "\\" . $map->{$2} . _get_diac_last_r($1,$2) }gex; } } foreach my $type (sort keys %{$r_remaps->{$scheme_e}}) { my $map = $r_remaps->{$scheme_e}{$type}{map}; my $re = $r_remaps->{$scheme_e}{$type}{re}; if ($type eq 'wordmacros') { # General macros (excluding special encoding excludes) $text =~ s/($re)/"{\\" . $map->{$1} . '}'/ge; } if (first {$type eq $_} ('punctuation', 'symbols', 'greek')) { # Math mode macros (excluding special encoding excludes) $text =~ s/($re)/"{\$\\" . $map->{$1} . '$}'/ge; } } return $text; } # Helper subroutines sub _get_diac_last_r { my ($a,$b) = @_; my $re = $r_remaps->{$scheme_e}{accents}{re}; if ( $b =~ /$re/) { return $a eq 'i' ? '{\\i}' : $a } else { return "{$a}" } } 1; __END__ =head1 AUTHOR François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Output000755000000000000 012230324177 16426 5ustar00rootroot000000000000biblatex-biber-1.8/lib/Biber/Output/test.pm000444000000000000 3264012230324177 20125 0ustar00rootroot000000000000package Biber::Output::test; use v5.16; use strict; use warnings; use base 'Biber::Output::base'; use Biber::Config; use Biber::Constants; use Biber::Entry; use Biber::Utils; use IO::File; use Log::Log4perl qw( :no_extra_logdie_message ); my $logger = Log::Log4perl::get_logger('main'); =encoding utf-8 =head1 NAME Biber::Output::test - Output class for loopback testing Essentially, this outputs to a string so we can look at it internally in tests =cut =head2 _printfield Add the .bbl for a text field to the output accumulator. =cut sub _printfield { my ($be, $field, $str) = @_; my $field_type = 'field'; # crossref and xref are of type 'strng' in the .bbl if (lc($field) eq 'crossref' or lc($field) eq 'xref') { $field_type = 'strng'; } # auto-escase TeX special chars if: # * The entry is not a bibtex entry (no auto-escaping for bibtex data) # * It's not a strng field if ($field_type ne 'strng' and $be->get_field('datatype') ne 'bibtex') { $str =~ s/(?getoption('wraplines')) { ## 16 is the length of ' \field{}{}' if ( 16 + Unicode::GCString->new($field)->length + Unicode::GCString->new($str)->length > 2*$Text::Wrap::columns ) { return " \\${field_type}{$field}{%\n" . wrap(' ', ' ', $str) . "%\n }\n"; } elsif ( 16 + Unicode::GCString->new($field)->length + Unicode::GCString->new($str)->length > $Text::Wrap::columns ) { return wrap(' ', ' ', "\\${field_type}{$field}{$str}" ) . "\n"; } else { return " \\${field_type}{$field}{$str}\n"; } } else { return " \\${field_type}{$field}{$str}\n"; } return; } =head2 set_output_entry Set the .bbl output for an entry. This is the meat of the .bbl output =cut sub set_output_entry { my $self = shift; my $be = shift; # Biber::Entry object my $bee = $be->get_field('entrytype'); my $section = shift; # Section the entry occurs in my $dm = shift; # Structure object my $acc = ''; my $secnum = $section->number; my $key = $be->get_field('citekey'); $acc .= "% sortstring = " . $be->get_field('sortstring') . "\n" if (Biber::Config->getoption('debug') || Biber::Config->getblxoption('debug')); $acc .= " \\entry{$key}{$bee}{" . join(',', @{filter_entry_options($be->get_field('options'))}) . "}\n"; # Generate set information if ( $be->get_field('entrytype') eq 'set' ) { # Set parents get \set entry ... $acc .= " \\set{" . join(',', @{$be->get_field('entryset')}) . "}\n"; } else { # Everything else that isn't a set parent ... if (my $es = $be->get_field('entryset')) { # ... gets a \inset if it's a set member $acc .= " \\inset{" . join(',', @$es) . "}\n"; } } # Output name fields # first output copy in labelname # This is essentially doing the same thing twice but in the future, # labelname may have different things attached than the raw name my $lni = $be->get_labelname_info; my $name_others_deleted = ''; my $plo; # per-list options if (my $ln = $be->get_field('labelname')) { my @plo; # Add uniquelist, if defined if (my $ul = $ln->get_uniquelist){ push @plo, "uniquelist=$ul"; } $plo =join(',', @plo); # Did we have "and others" in the data? if ( $ln->get_morenames ) { $acc .= " \\true{morelabelname}\n"; } my $total = $ln->count_names; $acc .= " \\name{labelname}{$total}{$plo}{%\n"; foreach my $n (@{$ln->names}) { $acc .= $n->name_to_bbl; } $acc .= " }\n"; } # then names themselves foreach my $namefield (@{$dm->get_fields_of_type('list', 'name')}) { next if $dm->field_is_skipout($namefield); if ( my $nf = $be->get_field($namefield) ) { # Did we have "and others" in the data? if ( $nf->get_morenames ) { $acc .= " \\true{more$namefield}\n"; } my $total = $nf->count_names; # Copy perl-list options to the actual labelname too $plo = '' unless (defined($lni) and $namefield eq $lni->{field}); $acc .= " \\name{$namefield}{$total}{}{%\n"; foreach my $n (@{$nf->names}) { $acc .= $n->name_to_bbl; } $acc .= " }\n"; } } foreach my $listfield (@{$dm->get_fields_of_fieldtype('list')}) { next if $dm->field_is_datatype('name', $listfield); # name is a special list if ( my $lf = $be->get_field($listfield) ) { if ( lc($be->get_field($listfield)->[-1]) eq Biber::Config->getoption('others_string') ) { $acc .= " \\true{more$listfield}\n"; pop @$lf; # remove the last element in the array }; my $total = $#$lf + 1; $acc .= " \\list{$listfield}{$total}{%\n"; foreach my $f (@$lf) { $acc .= " {$f}%\n"; } $acc .= " }\n"; } } my $namehash = $be->get_field('namehash'); $acc .= " \\strng{namehash}{$namehash}\n" if $namehash; my $fullhash = $be->get_field('fullhash'); $acc .= " \\strng{fullhash}{$fullhash}\n" if $fullhash; if ( Biber::Config->getblxoption('labelalpha', $be->get_field('entrytype')) ) { # Might not have been set due to skiplab/dataonly if (my $label = $be->get_field('labelalpha')) { $acc .= " \\field{labelalpha}{$label}\n"; } } # This is special, we have to put a marker for sortinit and then replace this string # on output as it can vary between lists $acc .= " SORTINIT\n"; # The labeldate option determines whether "extrayear" is output # Skip generating extrayear for entries with "skiplab" set if ( Biber::Config->getblxoption('labeldate', $be->get_field('entrytype'))) { # Might not have been set due to skiplab/dataonly if (my $ey = $be->get_field('extrayear')) { my $nameyear_extra = $be->get_field('nameyear_extra'); if ( Biber::Config->get_seen_nameyear_extra($nameyear_extra) > 1) { $acc .= " EXTRAYEAR\n"; } } if (my $ly = $be->get_field('labelyear')) { $acc .= " \\field{labelyear}{$ly}\n"; } if (my $lm = $be->get_field('labelmonth')) { $acc .= " \\field{labelmonth}{$lm}\n"; } if (my $ld = $be->get_field('labelday')) { $acc .= " \\field{labelday}{$ld}\n"; } if ($be->field_exists('datelabelsource')) { $acc .= " \\field{datelabelsource}{" . $be->get_field('datelabelsource') . "}\n"; } } # The labeltitle option determines whether "extratitle" is output if ( Biber::Config->getblxoption('labeltitle', $bee)) { # Might not have been set due to skiplab/dataonly if (my $nametitle = $be->get_field('nametitle')) { if ( Biber::Config->get_seen_nametitle($nametitle) > 1) { $acc .= " EXTRATITLE\n"; } } } # The labeltitleyear option determines whether "extratitleyear" is output if ( Biber::Config->getblxoption('labeltitleyear', $bee)) { # Might not have been set due to skiplab/dataonly if (my $titleyear = $be->get_field('titleyear')) { if ( Biber::Config->get_seen_titleyear($titleyear) > 1) { $acc .= " EXTRATITLEYEAR\n"; } } } # labeltitle is always output if (my $lt = $be->get_field('labeltitle')) { $acc .= " \\field{labeltitle}{$lt}\n"; } # The labelalpha option determines whether "extraalpha" is output # Skip generating extraalpha for entries with "skiplab" set if ( Biber::Config->getblxoption('labelalpha', $be->get_field('entrytype'))) { # Might not have been set due to skiplab/dataonly if (my $ea = $be->get_field('extraalpha')) { my $nameyear_extra = $be->get_field('nameyear_extra'); if ( Biber::Config->get_seen_nameyear_extra($nameyear_extra) > 1) { $acc .= " EXTRAALPHA\n"; } } } if ( Biber::Config->getblxoption('labelnumber', $be->get_field('entrytype')) ) { if (my $sh = $be->get_field('shorthand')) { $acc .= " \\field{labelnumber}{$sh}\n"; } elsif (my $ln = $be->get_field('labelnumber')) { $acc .= " \\field{labelnumber}{$ln}\n"; } } if (defined($be->get_field('singletitle'))) { $acc .= " \\true{singletitle}\n"; } foreach my $field (sort @{$dm->get_fields_of_type('field', 'entrykey')}, @{$dm->get_fields_of_type('field', 'key')}, @{$dm->get_fields_of_type('field', 'integer')}, @{$dm->get_fields_of_type('field', 'datepart')}, @{$dm->get_fields_of_type('field', 'literal')}, @{$dm->get_fields_of_type('field', 'code')}) { next if $dm->field_is_skipout($field); next if $dm->get_fieldformat($field) eq 'csv'; if ( ($dm->field_is_nullok($field) and $be->field_exists($field)) or $be->get_field($field) ) { # we skip outputting the crossref or xref when the parent is not cited # (biblatex manual, section 2.2.3) # sets are a special case so always output crossref/xref for them since their # children will always be in the .bbl otherwise they make no sense. unless ( $be->get_field('entrytype') eq 'set') { next if ($field eq 'crossref' and not $section->has_citekey($be->get_field('crossref'))); next if ($field eq 'xref' and not $section->has_citekey($be->get_field('xref'))); } $acc .= _printfield($be, $field, $be->get_field($field) ); } } foreach my $field (sort @{$dm->get_fields_of_fieldformat('csv')}) { next if $dm->field_is_skipout($field); next if $dm->get_datatype($field) eq 'keyword';# This is special in .bbl if (my $f = $be->get_field($field)) { $acc .= _printfield($be, $field, join(',', @$f) ); } } foreach my $rfield (@{$dm->get_fields_of_datatype('range')}) { if ( my $rf = $be->get_field($rfield)) { $rf =~ s/[-–]+/\\bibrangedash /g; $acc .= " \\field{$rfield}{$rf}\n"; } } foreach my $vfield ((@{$dm->get_fields_of_datatype('verbatim')}, @{$dm->get_fields_of_datatype('uri')})) { if ( my $rf = $be->get_field($vfield) ) { $acc .= " \\verb{$vfield}\n"; $acc .= " \\verb $rf\n \\endverb\n"; } } if ( my $k = $be->get_field('keywords') ) { $acc .= " \\keyw{$k}\n"; } # Append any warnings to the entry, if any if (my $w = $be->get_field('warnings')) { foreach my $warning (@$w) { $acc .= " \\warn{\\item $warning}\n"; } } $acc .= " \\endentry\n"; # Create an index by keyname for easy retrieval $self->{output_data}{ENTRIES}{$secnum}{index}{$key} = \$acc; return; } =head2 create_output_misc Create the output for misc bits and pieces like preamble and closing macro call and add to output object. =cut sub create_output_misc { my $self = shift; if (my $pa = $Biber::MASTER->get_preamble) { $pa = join("%\n", @$pa); # Decode UTF-8 -> LaTeX macros if asked to if (Biber::Config->getoption('output_safechars')) { $pa = Biber::LaTeX::Recode::latex_encode($pa); } $self->{output_data}{HEAD} .= "\\preamble{%\n$pa%\n}\n\n"; } $self->{output_data}{TAIL} .= "\\endinput\n\n"; return; } =head2 output BBL output method - this takes care to output entries in the explicit order derived from the virtual order of the auxcitekeys after sortkey sorting. =cut sub output { my $self = shift; my $data = $self->{output_data}; my $target = $self->{output_target}; $logger->info("Writing output with encoding '" . Biber::Config->getoption('output_encoding') . "'"); $logger->info('Converting UTF-8 to TeX macros on output to .bbl') if Biber::Config->getoption('output_safechars'); foreach my $secnum (sort keys %{$data->{ENTRIES}}) { my $section = $self->get_output_section($secnum); foreach my $list (sort {$a->get_label cmp $b->get_label} @{$Biber::MASTER->sortlists->get_lists_for_section($secnum)}) { next unless $list->count_keys; # skip empty lists my $listlabel = $list->get_label; my $listtype = $list->get_type; foreach my $k ($list->get_keys) { if ($listtype eq 'entry') { my $entry = $data->{ENTRIES}{$secnum}{index}{$k}; # Instantiate any dynamic, list specific entry information my $entry_string = $list->instantiate_entry($entry, $k); # If requested to convert UTF-8 to macros ... if (Biber::Config->getoption('output_safechars')) { $entry_string = latex_recode_output($entry_string); } out($target, $entry_string); } elsif ($listtype eq 'shorthand') { next if Biber::Config->getblxoption('skiplos', $section->bibentry($k), $k); out($target, $k); } } } } close $target; return; } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Output/base.pm000444000000000000 2242412230324176 20056 0ustar00rootroot000000000000package Biber::Output::base; use v5.16; use strict; use warnings; use Biber::Entry; use IO::File; use Text::Wrap; $Text::Wrap::columns = 80; use Log::Log4perl qw( :no_extra_logdie_message ); use Unicode::Normalize; my $logger = Log::Log4perl::get_logger('main'); =encoding utf-8 =head1 NAME Biber::Output::base - base class for Biber output modules. =cut =head2 new Initialize a Biber::Output::base object =cut sub new { my $class = shift; my $obj = shift; my $self; if (defined($obj) and ref($obj) eq 'HASH') { $self = bless $obj, $class; } else { $self = bless {}, $class; } $self->{output_data}{HEAD} = ''; $self->{output_data}{TAIL} = ''; return $self; } =head2 set_output_target_file Set the output target file of a Biber::Output::base object A convenience around set_output_target so we can keep track of the filename =cut sub set_output_target_file { my $self = shift; my $file = shift; $self->{output_target_file} = $file; my $enc_out; if (Biber::Config->getoption('output_encoding')) { $enc_out = ':encoding(' . Biber::Config->getoption('output_encoding') . ')'; } my $TARGET = IO::File->new($file, ">$enc_out"); $self->set_output_target($TARGET); } =head2 set_output_target Set the output target of a Biber::Output::base object =cut sub set_output_target { my $self = shift; my $target = shift; $self->{output_target} = $target; return; } =head2 set_output_head Set the output head of a Biber::Output::base object $data could be anything - the caller is expected to know. =cut sub set_output_head { my $self = shift; my $data = shift; $self->{output_data}{HEAD} = $data; return; } =head2 set_output_tail Set the output tail of a Biber::Output::base object $data could be anything - the caller is expected to know. =cut sub set_output_tail { my $self = shift; my $data = shift; $self->{output_data}{TAIL} = $data; return; } =head2 get_output_head Get the output head of a Biber::Output object $data could be anything - the caller is expected to know. Mainly used in debugging =cut sub get_output_head { my $self = shift; return $self->{output_data}{HEAD}; } =head2 get_output_tail Get the output tail of a Biber::Output object $data could be anything - the caller is expected to know. Mainly used in debugging =cut sub get_output_tail { my $self = shift; return $self->{output_data}{TAIL}; } =head2 add_output_head Add to the head output data of a Biber::Output::base object The base class method just does a string append =cut sub add_output_head { my $self = shift; my $data = shift; $self->{output_data}{HEAD} .= $data; return; } =head2 add_output_tail Add to the tail output data of a Biber::Output::base object The base class method just does a string append =cut sub add_output_tail { my $self = shift; my $data = shift; $self->{output_data}{TAIL} .= $data; return; } =head2 set_output_section Records the section object in the output object We need some information from this when writing the .bbl =cut sub set_output_section { my $self = shift; my $secnum = shift; my $section = shift; $self->{section}{$secnum} = $section; return; } =head2 get_output_section Retrieve the output section object =cut sub get_output_section { my $self = shift; my $secnum = shift; return $self->{section}{$secnum}; } =head2 get_output_entries Get the sorted order output data for all entries in a list as array ref =cut sub get_output_entries { my $self = shift; my $section = shift; my $list = shift; return [ map {$self->{output_data}{ENTRIES}{$section}{index}{$_} || $self->{output_data}{MISSING_ENTRIES}{$section}{index}{$_} || $self->{output_data}{ALIAS_ENTRIES}{$section}{index}{$_}} @{$list->get_keys}]; } =head2 get_output_entry Get the output data for a specific entry. Used really only in tests as it instantiates list dynamic information so we can see it in tests. As a result, we have to NFC() the result to mimic real output since UTF-8 output is assumed in most tests. =cut sub get_output_entry { my $self = shift; my $key = shift; my $list = shift; # might not be set for, for example, tool mode tests my $section = shift; # defaults - mainly for tests if (not defined($section)) { if (Biber::Config->getoption('tool') or Biber::Config->getoption('output_format') eq 'bibtex') { $section = 99999; } else { $section = 0; } } # Force a return of undef if there is no output for this key to avoid # dereferencing errors in tests my $out = $self->{output_data}{ENTRIES}{$section}{index}{$key} || $self->{output_data}{MISSING_ENTRIES}{$section}{index}{$key} || $self->{output_data}{ALIAS_ENTRIES}{$section}{index}{$key}; my $out_string = $list ? $list->instantiate_entry($out, $key) : $out; # Sometimes $out_string might still be a scalar ref (tool mode, for example which doesn't use # sort lists) return $out ? (ref($out_string) eq 'SCALAR' ? NFC($$out_string) : NFC($out_string)) : undef; } =head2 set_los Set the output list of shorthands for a section =cut sub set_los { my $self = shift; my $shs = shift; my $section = shift; $self->{output_data}{LOS}{$section} = $shs; return; } =head2 get_los Get the output list of shorthands for a section as an array =cut sub get_los { my $self = shift; my $section = shift; return @{$self->{output_data}{LOS}{$section}} } =head2 set_output_entry Add an entry output to a Biber::Output::base object The base class method just does a dump =cut sub set_output_entry { my $self = shift; my $entry = shift; my $section = shift; my $struc = shift; $self->{output_data}{ENTRIES}{$section}{index}{$entry->get_field('citekey')} = $entry->dump; return; } =head2 create_output_misc Create the output for misc bits and pieces like preamble and closing macro call and add to output object. =cut sub create_output_misc { return; } =head2 create_output_section Create the output from the sections data and push it into the output object. =cut sub create_output_section { my $self = shift; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); # We rely on the order of this array for the order of the .bbl foreach my $k ($section->get_citekeys) { # Regular entry my $be = $section->bibentry($k) or biber_error("Cannot find entry with key '$k' to output"); $self->set_output_entry($be, $section, Biber::Config->get_dm); } # Make sure the output object knows about the output section $self->set_output_section($secnum, $section); # undef citekeys are global to a section # Missing citekeys foreach my $k ($section->get_undef_citekeys) { $self->set_output_undefkey($k, $section); } # alias citekeys are global to a section foreach my $k ($section->get_citekey_aliases) { my $realkey = $section->get_citekey_alias($k); $self->set_output_keyalias($k, $realkey, $section) } return; } =head2 set_output_keyalias Set the output for a key which is an alias to another key =cut sub set_output_keyalias { return; } =head2 set_output_undefkey Set the output for an undefined key =cut sub set_output_undefkey { return; } =head2 output Generic base output method =cut sub output { my $self = shift; my $data = $self->{output_data}; my $target = $self->{output_target}; my $target_string = "Target"; # Default if ($self->{output_target_file}) { $target_string = $self->{output_target_file}; } $logger->debug('Preparing final output using class ' . __PACKAGE__ . '...'); $logger->info("Writing '$target_string' with encoding '" . Biber::Config->getoption('output_encoding') . "'"); out($target, $data->{HEAD}); foreach my $secnum (sort keys %{$data->{ENTRIES}}) { out($target, "SECTION: $secnum\n\n"); my $section = $self->get_output_section($secnum); foreach my $list (@{$section->get_lists}) { my $listlabel = $list->get_label; my $listtype = $list->get_type; out($target, " LIST: $listlabel\n\n"); foreach my $k ($list->get_keys) { if ($listtype eq 'entry') { my $entry_string = $data->{ENTRIES}{$secnum}{index}{$k}; out($target, $entry_string); } elsif ($listtype eq 'shorthand') { next if Biber::Config->getblxoption('skiplos', $section->bibentry($k), $k); out($target, $k); } } } } out($target, $data->{TAIL}); $logger->info("Output to $target_string"); close $target; return; } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Output/dot.pm000444000000000000 3006212230324177 17730 0ustar00rootroot000000000000package Biber::Output::dot; use v5.16; use strict; use warnings; use base 'Biber::Output::base'; use Biber::Config; use Biber::Constants; use Biber::Entry; use Biber::Utils; use List::AllUtils qw( :all ); use IO::File; use Log::Log4perl qw( :no_extra_logdie_message ); my $logger = Log::Log4perl::get_logger('main'); =encoding utf-8 =head1 NAME Biber::Output::dot - class for Biber output of GraphViz .dot files =cut =head2 new Initialize a Biber::Output::dot object =cut my $graph; # accumulator for .dot string my $graph_edges = ''; # accumulator for .dot string. Initialise as can be empty my $state; # some state information for building output my $in; # indentation string my $i; # indentation level my $gopts = Biber::Config->getoption('dot_include'); my $linknode; # node to use to do cluster links sub new { my $class = shift; my $obj = shift; my $self = $class->SUPER::new($obj); $self->{output_data}{HEAD} = <{output_target_file} = $dotfile; my $enc_out; $enc_out = ':encoding(UTF-8)'; my $DOTFILE = IO::File->new($dotfile, ">$enc_out"); $self->set_output_target($DOTFILE); } =head2 set_output_entry We don't use this, we output everything in one go at the end =cut sub set_output_entry { return; } =head2 create_output_section We don't use this, we output everything in one go at the end =cut sub create_output_section { return; } =head2 output Create a graph of the required things and save to .dot format =cut sub output { my $self = shift; my $biber = $Biber::MASTER; my $data = $self->{output_data}; my $target = $self->{output_target}; my $target_string = "Target"; # Default if ($self->{output_target_file}) { $target_string = $self->{output_target_file}; } # for debugging mainly unless ($target) { $target = new IO::File '>-'; } $logger->debug('Preparing final output using class ' . __PACKAGE__ . '...'); $logger->info("Writing '$target_string' with encoding 'UTF-8'"); out($target, $data->{HEAD}); $in = 2; # indentation $i = ' '; # starting indentation # Loop over sections. foreach my $section (@{$biber->sections->get_sections}) { my $secnum = $section->number; if ($gopts->{section}) { $graph .= $i x $in . "subgraph \"cluster_section${secnum}\" {\n"; $in += 2; $graph .= $i x $in . "label=\"Section $secnum\";\n"; $graph .= $i x $in . "tooltip=\"Section $secnum\";\n"; $graph .= $i x $in . "fontsize=\"10\";\n"; $graph .= $i x $in . "fontname=serif;\n"; $graph .= $i x $in . "fillcolor=\"#fce3fa\";\n"; $graph .= "\n"; } # First create nodes/groups for entries foreach my $be ($section->bibentries->entries) { my $citekey = $be->get_field('citekey'); $state->{$secnum}{"${secnum}/${citekey}"} = 1; my $et = uc($be->get_field('entrytype')); # colour depends on whether cited, uncited, dataonly or key alias my $c = $section->has_citekey($citekey) ? '#a0d0ff' : '#deefff'; if (my $options = $be->get_field('options')) { $c = '#fdffd9' if $options =~ m/dataonly/o; } $c = '#a1edec' if $section->get_citekey_alias($citekey); # make a set subgraph if a set member # This will make identically named subgraph sections for # every element in a set but dot is clever enough to merge them by # ID. if (my $sets = Biber::Config->get_graph('set')) { if (my $set = $sets->{memtoset}{$citekey}) { # entry is a set member $graph .= $i x $in . "subgraph \"cluster_${secnum}/set_${set}\" {\n"; $in += 2; $graph .= $i x $in . "label=\"$set (SET)\";\n"; $graph .= $i x $in . "tooltip=\"$set (SET)\";\n"; $graph .= $i x $in . "fontsize=\"10\";\n"; $graph .= $i x $in . "fontname=serif;\n"; $graph .= $i x $in . "fillcolor=\"#e3dadc\";\n"; $graph .= "\n"; } next if $sets->{settomem}{$citekey}; # Don't make normal nodes for sets } # Citekey aliases my $aliases = ''; foreach my $alias ($section->get_citekey_aliases) { my $realkey = $section->get_citekey_alias($alias); if ($realkey eq $citekey) { $aliases .= "\\n$alias (alias)"; } } if ($gopts->{field}) { # If granularity is at the level of fields $graph .= $i x $in . "subgraph \"cluster_section${secnum}/${citekey}\" {\n"; $in += 2; $graph .= $i x $in . "fontsize=\"10\";\n"; $graph .= $i x $in . "label=\"$citekey ($et)$aliases\";\n"; $graph .= $i x $in . "tooltip=\"$citekey ($et)\";\n"; $graph .= $i x $in . "fillcolor=\"$c\";\n"; $graph .= "\n"; foreach my $field ($be->datafields) { $graph .= $i x $in . "\"section${secnum}/${citekey}/${field}\" [ label=\"" . uc($field) . "\" ]\n"; } $in -= 2; $graph .= $i x $in . "}\n\n"; # link node for cluster->cluster links my $middle = int($be->count_datafields / 2); $state->{$secnum}{$citekey}{linknode} = ($be->datafields)[$middle]; } else { # Granularity is at the level of entries $graph .= $i x $in . "\"section${secnum}/${citekey}\" [ label=\"$citekey ($et)$aliases\", fillcolor=\"$c\", tooltip=\"$citekey ($et)\" ]\n"; } # Close set subgraph if necessary if (my $sets = Biber::Config->get_graph('set')) { if ($sets->{memtoset}{$citekey}) { # entry is a set member $graph .= $i x $in . "}\n\n"; $in -= 2; } } } # Then add the requested links # crossrefs _graph_inheritance('crossref', $secnum) if $gopts->{crossref}; # xdata _graph_inheritance('xdata', $secnum) if $gopts->{xdata}; # xref _graph_xref($secnum) if $gopts->{xref}; # related _graph_related($secnum) if $gopts->{related}; # Close the section, if any if ($gopts->{section}) { $graph .= $i x $in . "}\n\n"; $in -= 2; } } $graph .= "\n\n${graph_edges}"; $graph .= "\n}\n"; out($target, $graph); $logger->info("Output to $target_string"); close $target; return; } # Graph related entries sub _graph_related { my $secnum = shift; if (my $gr = Biber::Config->get_graph('related')) { # related links while (my ($f_entry, $m) = each %{$gr->{clonetotarget}}) { foreach my $t_entry (keys %$m) { next unless $state->{$secnum}{"${secnum}/${f_entry}"}; next unless $state->{$secnum}{"${secnum}/${t_entry}"}; if ($gopts->{field}) { # links between clusters my $f_linknode = $state->{$secnum}{$f_entry}{linknode}; my $t_linknode = $state->{$secnum}{$t_entry}{linknode}; $graph_edges .= $i x $in . "\"section${secnum}/${f_entry}/${f_linknode}\" -> \"section${secnum}/${t_entry}/${t_linknode}\" [ penwidth=\"2.0\", color=\"#ad1741\", ltail=\"cluster_section${secnum}/${f_entry}\", lhead=\"cluster_section${secnum}/${t_entry}\", tooltip=\"${f_entry} is a related entry of ${t_entry}\" ]\n"; } else { # links between nodes $graph_edges .= $i x $in . "\"section${secnum}/${f_entry}\" -> \"section${secnum}/${t_entry}\" [ penwidth=\"2.0\", color=\"#ad1741\", tooltip=\"${f_entry} is a related entry of ${t_entry}\" ]\n"; } } } # clone links while (my ($f_entry, $m) = each %{$gr->{reltoclone}}) { foreach my $t_entry (keys %$m) { next unless $state->{$secnum}{"${secnum}/${f_entry}"}; next unless $state->{$secnum}{"${secnum}/${t_entry}"}; if ($gopts->{field}) { # links between clusters my $f_linknode = $state->{$secnum}{$f_entry}{linknode}; my $t_linknode = $state->{$secnum}{$t_entry}{linknode}; $graph_edges .= $i x $in . "\"section${secnum}/${f_entry}/${f_linknode}\" -> \"section${secnum}/${t_entry}/${t_linknode}\" [ style=\"dashed\", penwidth=\"2.0\", color=\"#ad1741\", ltail=\"cluster_section${secnum}/${f_entry}\", lhead=\"cluster_section${secnum}/${t_entry}\", tooltip=\"${t_entry} is a clone of ${f_entry}\" ]\n"; } else { # links between nodes $graph_edges .= $i x $in . "\"section${secnum}/${f_entry}\" -> \"section${secnum}/${t_entry}\" [ style=\"dashed\", penwidth=\"2.0\", color=\"#ad1741\", tooltip=\"${t_entry} is a clone of ${f_entry}\" ]\n"; } } } } } # Graph xrefs sub _graph_xref { my $secnum = shift; if (my $gr = Biber::Config->get_graph('xref')) { while (my ($f_entry, $t_entry) = each %$gr) { next unless $state->{$secnum}{"${secnum}/${f_entry}"}; next unless $state->{$secnum}{"${secnum}/${t_entry}"}; if ($gopts->{field}) { # links between clusters my $f_linknode = $state->{$secnum}{$f_entry}{linknode}; my $t_linknode = $state->{$secnum}{$t_entry}{linknode}; $graph_edges .= $i x $in . "\"section${secnum}/${f_entry}/${f_linknode}\" -> \"section${secnum}/${t_entry}/${t_linknode}\" [ penwidth=\"2.0\", style=\"dashed\", color=\"#7d7879\", ltail=\"cluster_section${secnum}/${f_entry}\", lhead=\"cluster_section${secnum}/${t_entry}\", tooltip=\"${f_entry} XREFS ${t_entry}\" ]\n"; } else { # links between nodes $graph_edges .= $i x $in . "\"section${secnum}/${f_entry}\" -> \"section${secnum}/${t_entry}\" [ penwidth=\"2.0\", style=\"dashed\", color=\"#7d7879\", tooltip=\"${f_entry} XREFS ${t_entry}\" ]\n"; } } } } # Graph crossrefs and xdata sub _graph_inheritance { my ($type, $secnum) = @_; my $edgecolor; if ($type eq 'crossref') { $edgecolor = '#7d7879'; } elsif ($type eq 'xdata') { $edgecolor = '#2ca314'; } if (my $gr = Biber::Config->get_graph($type)) { # Show fields if ($gopts->{field}) { while (my ($f_entry, $v) = each %$gr) { while (my ($f_field, $w) = each %$v) { while (my ($t_entry, $t_field) = each %$w) { next unless $state->{$secnum}{"${secnum}/${f_entry}"}; next unless $state->{$secnum}{"${secnum}/${t_entry}"}; $graph_edges .= $i x $in . "\"section${secnum}/${f_entry}/${f_field}\" -> \"section${secnum}/${t_entry}/${t_field}\" [ penwidth=\"2.0\", color=\"${edgecolor}\", tooltip=\"${t_entry}/" . uc($t_field) . " inherited via " . uc($type) . " from ${f_entry}/" . uc($f_field) . "\" ]\n"; } } } } # Just show the entries, no fields else { while (my ($f_entry, $v) = each %$gr) { while (my (undef, $w) = each %$v) { while (my ($t_entry, undef) = each %$w) { next unless $state->{$secnum}{"${secnum}/${f_entry}"}; next unless $state->{$secnum}{"${secnum}/${t_entry}"}; next if $state->{edges}{"section${secnum}/${f_entry}"}{"section${secnum}/${t_entry}"}; $graph_edges .= $i x $in . "\"section${secnum}/${f_entry}\" -> \"section${secnum}/${t_entry}\" [ penwidth=\"2.0\", color=\"${edgecolor}\", tooltip=\"${t_entry} inherits via $type from ${f_entry}\" ]\n"; $state->{edges}{"section${secnum}/${f_entry}"}{"section${secnum}/${t_entry}"} = 1; } } } } } } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Output/bbl.pm000444000000000000 4251312230324176 17704 0ustar00rootroot000000000000package Biber::Output::bbl; use v5.16; use strict; use warnings; use base 'Biber::Output::base'; use Biber::Config; use Biber::Constants; use Biber::Entry; use Biber::Utils; use List::AllUtils qw( :all ); use IO::File; use Log::Log4perl qw( :no_extra_logdie_message ); use Text::Wrap; $Text::Wrap::columns = 80; my $logger = Log::Log4perl::get_logger('main'); =encoding utf-8 =head1 NAME Biber::Output::bbl - class for Biber output of .bbl =cut =head2 new Initialize a Biber::Output::bbl object =cut sub new { my $class = shift; my $obj = shift; my $self = $class->SUPER::new($obj); $self->{output_data}{HEAD} = <get_preamble) { $pa = join("%\n", @$pa); # Decode UTF-8 -> LaTeX macros if asked to if (Biber::Config->getoption('output_safechars')) { $pa = Biber::LaTeX::Recode::latex_encode($pa); } $self->{output_data}{HEAD} .= "\\preamble{%\n$pa%\n}\n\n"; } $self->{output_data}{TAIL} .= "\\endinput\n\n"; return; } =head2 set_output_target_file Set the output target file of a Biber::Output::bbl object A convenience around set_output_target so we can keep track of the filename =cut sub set_output_target_file { my $self = shift; my $bblfile = shift; $self->{output_target_file} = $bblfile; my $enc_out; if (Biber::Config->getoption('output_encoding')) { $enc_out = ':encoding(' . Biber::Config->getoption('output_encoding') . ')'; } my $BBLFILE = IO::File->new($bblfile, ">$enc_out"); $self->set_output_target($BBLFILE); } =head2 _printfield Add the .bbl for a text field to the output accumulator. =cut sub _printfield { my ($be, $field, $str) = @_; my $field_type = 'field'; # crossref and xref are of type 'strng' in the .bbl if (lc($field) eq 'crossref' or lc($field) eq 'xref') { $field_type = 'strng'; } # auto-escape TeX special chars if: # * The entry is not a BibTeX entry (no auto-escaping for BibTeX data) # * It's not a string field if ($field_type ne 'strng' and $be->get_field('datatype') ne 'bibtex') { $str =~ s/(?getoption('wraplines')) { ## 16 is the length of ' \field{}{}' or ' \strng{}{}' if ( 16 + Unicode::GCString->new($field)->length + Unicode::GCString->new($str)->length > 2*$Text::Wrap::columns ) { return " \\${field_type}{$field}{%\n" . wrap(' ', ' ', $str) . "%\n }\n"; } elsif ( 16 + Unicode::GCString->new($field)->length + Unicode::GCString->new($str)->length > $Text::Wrap::columns ) { return wrap(' ', ' ', "\\${field_type}{$field}{$str}" ) . "\n"; } else { return " \\${field_type}{$field}{$str}\n"; } } else { return " \\${field_type}{$field}{$str}\n"; } return; } =head2 set_output_keyalias Set the output for a key which is an alias to another key =cut sub set_output_keyalias { my $self = shift; my $alias = shift; my $key = shift; my $section = shift; my $secnum = $section->number; my $acc = " \\keyalias{$alias}{$key}\n"; # Create an index by keyname for easy retrieval $self->{output_data}{ALIAS_ENTRIES}{$secnum}{index}{$alias} = \$acc; return; } =head2 set_output_undefkey Set the .bbl output for an undefined key =cut sub set_output_undefkey { my $self = shift; my $key = shift; # undefined key my $section = shift; # Section object the entry occurs in my $secnum = $section->number; my $acc = " \\missing{$key}\n"; # Create an index by keyname for easy retrieval $self->{output_data}{MISSING_ENTRIES}{$secnum}{index}{$key} = \$acc; return; } =head2 set_output_entry Set the .bbl output for an entry. This is the meat of the .bbl output =cut sub set_output_entry { my $self = shift; my $be = shift; # Biber::Entry object my $bee = $be->get_field('entrytype'); my $section = shift; # Section object the entry occurs in my $dm = shift; # Data Model object my $acc = ''; my $secnum = $section->number; my $key = $be->get_field('citekey'); # Skip entrytypes we don't want to output according to datamodel return if $dm->entrytype_is_skipout($bee); $acc .= " \\entry{$key}{$bee}{" . join(',', @{filter_entry_options($be->get_field('options'))}) . "}\n"; # Generate set information if ( $bee eq 'set' ) { # Set parents get \set entry ... $acc .= " \\set{" . join(',', @{$be->get_field('entryset')}) . "}\n"; } else { # Everything else that isn't a set parent ... if (my $es = $be->get_field('entryset')) { # ... gets a \inset if it's a set member $acc .= " \\inset{" . join(',', @$es) . "}\n"; } } # Output name fields # first output copy in labelname # This is essentially doing the same thing twice but in the future, # labelname may have different things attached than the raw name my $lni = $be->get_labelname_info; my $plo = ''; # per-list options if (my $ln = $be->get_field('labelname')) { my @plo; # Add uniquelist, if defined if (my $ul = $ln->get_uniquelist){ push @plo, "uniquelist=$ul"; } $plo = join(',', @plo); # Did we have "and others" in the data? if ( $ln->get_morenames ) { $acc .= " \\true{morelabelname}\n"; } my $total = $ln->count_names; $acc .= " \\name{labelname}{$total}{$plo}{%\n"; foreach my $n (@{$ln->names}) { $acc .= $n->name_to_bbl; } $acc .= " }\n"; } # then names themselves foreach my $namefield (@{$dm->get_fields_of_type('list', 'name')}) { next if $dm->field_is_skipout($namefield); if ( my $nf = $be->get_field($namefield) ) { # Did we have "and others" in the data? if ( $nf->get_morenames ) { $acc .= " \\true{more$namefield}\n"; } my $total = $nf->count_names; # Copy per-list options to the actual labelname too $plo = '' unless (defined($lni) and $namefield eq $lni->{field}); $acc .= " \\name{$namefield}{$total}{$plo}{%\n"; foreach my $n (@{$nf->names}) { $acc .= $n->name_to_bbl; } $acc .= " }\n"; } } # Output list fields foreach my $listfield (@{$dm->get_fields_of_fieldtype('list')}) { next if $dm->field_is_datatype('name', $listfield); # name is a special list next if $dm->field_is_skipout($listfield); if (my $lf = $be->get_field($listfield)) { if ( lc($lf->[-1]) eq Biber::Config->getoption('others_string') ) { $acc .= " \\true{more$listfield}\n"; pop @$lf; # remove the last element in the array } my $total = $#$lf + 1; $acc .= " \\list{$listfield}{$total}{%\n"; foreach my $f (@$lf) { $acc .= " {$f}%\n"; } $acc .= " }\n"; } } my $namehash = $be->get_field('namehash'); $acc .= " \\strng{namehash}{$namehash}\n" if $namehash; my $fullhash = $be->get_field('fullhash'); $acc .= " \\strng{fullhash}{$fullhash}\n" if $fullhash; if ( Biber::Config->getblxoption('labelalpha', $bee) ) { # Might not have been set due to skiplab/dataonly if (my $label = $be->get_field('labelalpha')) { $acc .= " \\field{labelalpha}{$label}\n"; } } # This is special, we have to put a marker for sortinit and then replace this string # on output as it can vary between lists $acc .= " SORTINIT\n"; # The labeldate option determines whether "extrayear" is output if ( Biber::Config->getblxoption('labeldate', $bee)) { # Might not have been set due to skiplab/dataonly if (my $nameyear = $be->get_field('nameyear')) { if ( Biber::Config->get_seen_nameyear($nameyear) > 1) { $acc .= " EXTRAYEAR\n"; } } if (my $ly = $be->get_field('labelyear')) { $acc .= " \\field{labelyear}{$ly}\n"; } if (my $lm = $be->get_field('labelmonth')) { $acc .= " \\field{labelmonth}{$lm}\n"; } if (my $ld = $be->get_field('labelday')) { $acc .= " \\field{labelday}{$ld}\n"; } if ($be->field_exists('datelabelsource')) { $acc .= " \\field{datelabelsource}{" . $be->get_field('datelabelsource') . "}\n"; } } # The labeltitle option determines whether "extratitle" is output if ( Biber::Config->getblxoption('labeltitle', $bee)) { # Might not have been set due to skiplab/dataonly if (my $nametitle = $be->get_field('nametitle')) { if ( Biber::Config->get_seen_nametitle($nametitle) > 1) { $acc .= " EXTRATITLE\n"; } } } # The labeltitleyear option determines whether "extratitleyear" is output if ( Biber::Config->getblxoption('labeltitleyear', $bee)) { # Might not have been set due to skiplab/dataonly if (my $titleyear = $be->get_field('titleyear')) { if ( Biber::Config->get_seen_titleyear($titleyear) > 1) { $acc .= " EXTRATITLEYEAR\n"; } } } # labeltitle is always output if (my $lt = $be->get_field('labeltitle')) { $acc .= " \\field{labeltitle}{$lt}\n"; } # The labelalpha option determines whether "extraalpha" is output if ( Biber::Config->getblxoption('labelalpha', $bee)) { # Might not have been set due to skiplab/dataonly if (my $la = $be->get_field('labelalpha')) { if (Biber::Config->get_la_disambiguation($la) > 1) { $acc .= " EXTRAALPHA\n"; } } } if ( Biber::Config->getblxoption('labelnumber', $bee) ) { if (my $sh = $be->get_field('shorthand')) { $acc .= " \\field{labelnumber}{$sh}\n"; } elsif (my $lnum = $be->get_field('labelnumber')) { $acc .= " \\field{labelnumber}{$lnum}\n"; } } if (defined($be->get_field('singletitle'))) { $acc .= " \\true{singletitle}\n"; } if (my $ck = $be->get_field('clonesourcekey')) { $acc .= " \\field{clonesourcekey}{$ck}\n"; } foreach my $field (sort @{$dm->get_fields_of_type('field', 'entrykey')}, @{$dm->get_fields_of_type('field', 'key')}, @{$dm->get_fields_of_type('field', 'integer')}, @{$dm->get_fields_of_type('field', 'datepart')}, @{$dm->get_fields_of_type('field', 'literal')}, @{$dm->get_fields_of_type('field', 'code')}) { next if $dm->field_is_skipout($field); next if $dm->get_fieldformat($field) eq 'csv'; if ( ($dm->field_is_nullok($field) and $be->field_exists($field)) or $be->get_field($field) ) { # we skip outputting the crossref or xref when the parent is not cited # (biblatex manual, section 2.2.3) # sets are a special case so always output crossref/xref for them since their # children will always be in the .bbl otherwise they make no sense. unless ($bee eq 'set') { next if ($field eq 'crossref' and not $section->has_citekey($be->get_field('crossref'))); next if ($field eq 'xref' and not $section->has_citekey($be->get_field('xref'))); } $acc .= _printfield($be, $field, $be->get_field($field) ); } } foreach my $field (sort @{$dm->get_fields_of_fieldformat('csv')}) { next if $dm->field_is_skipout($field); next if $dm->get_datatype($field) eq 'keyword';# This is special in .bbl if (my $f = $be->get_field($field)) { $acc .= _printfield($be, $field, join(',', @$f) ); } } foreach my $rfield (@{$dm->get_fields_of_datatype('range')}) { next if $dm->field_is_skipout($rfield); if ( my $rf = $be->get_field($rfield) ) { # range fields are an array ref of two-element array refs [range_start, range_end] # range_end can be be empty for open-ended range or undef my @pr; foreach my $f (@$rf) { if (defined($f->[1])) { push @pr, $f->[0] . '\bibrangedash' . ($f->[1] ? ' ' . $f->[1] : ''); } else { push @pr, $f->[0]; } } my $bbl_rf = join('\bibrangessep ', @pr); $acc .= " \\field{$rfield}{$bbl_rf}\n"; } } foreach my $vfield ((@{$dm->get_fields_of_datatype('verbatim')}, @{$dm->get_fields_of_datatype('uri')})) { next if $dm->field_is_skipout($vfield); if ( my $vf = $be->get_field($vfield) ) { $acc .= " \\verb{$vfield}\n"; $acc .= " \\verb $vf\n \\endverb\n"; } } if ( my $k = $be->get_field('keywords') ) { $k = join(',', @$k); $acc .= " \\keyw{$k}\n"; } # Append any warnings to the entry, if any if ( my $w = $be->get_field('warnings')) { foreach my $warning (@$w) { $acc .= " \\warn{\\item $warning}\n"; } } $acc .= " \\endentry\n"; # Create an index by keyname for easy retrieval $self->{output_data}{ENTRIES}{$secnum}{index}{$key} = \$acc; return; } =head2 output BBL output method - this takes care to output entries in the explicit order derived from the virtual order of the citekeys after sortkey sorting. =cut sub output { my $self = shift; my $data = $self->{output_data}; my $target = $self->{output_target}; my $target_string = "Target"; # Default if ($self->{output_target_file}) { $target_string = $self->{output_target_file}; } # for debugging mainly unless ($target) { $target = new IO::File '>-'; } $logger->debug('Preparing final output using class ' . __PACKAGE__ . '...'); $logger->info("Writing '$target_string' with encoding '" . Biber::Config->getoption('output_encoding') . "'"); $logger->info('Converting UTF-8 to TeX macros on output to .bbl') if Biber::Config->getoption('output_safechars'); out($target, $data->{HEAD}); foreach my $secnum (sort keys %{$data->{ENTRIES}}) { $logger->debug("Writing entries for section $secnum"); out($target, "\n\\refsection{$secnum}\n"); my $section = $self->get_output_section($secnum); my @lists; # Need to reshuffle list to put global sort order list at end, see below # This sort is cosmetic, just to order the lists in a predictable way in the .bbl foreach my $list (sort {$a->get_label cmp $b->get_label} @{$Biber::MASTER->sortlists->get_lists_for_section($secnum)}) { next if $list->get_label eq Biber::Config->getblxoption('sortscheme'); push @lists, $list; } # biblatex requires the last list in the .bbl to be the global sort list # due to its sequential reading of the .bbl as the final list overrides the # previously read ones and the global list determines the order of labelnumber # and sortcites etc. when not using defernumbers push @lists, $Biber::MASTER->sortlists->get_list($secnum, 'entry', Biber::Config->getblxoption('sortscheme')); foreach my $list (@lists) { next unless $list->count_keys; # skip empty lists my $listlabel = $list->get_label; my $listtype = $list->get_type; $logger->debug("Writing entries in '$listtype' list '$listlabel'"); out($target, " \\sortlist{$listtype}{$listlabel}\n"); # The order of this array is the sorted order foreach my $k ($list->get_keys) { $logger->debug("Writing entry for key '$k'"); if ($listtype eq 'entry') { my $entry = $data->{ENTRIES}{$secnum}{index}{$k}; # Instantiate any dynamic, list specific entry information my $entry_string = $list->instantiate_entry($entry, $k); # If requested to convert UTF-8 to macros ... if (Biber::Config->getoption('output_safechars')) { $entry_string = latex_recode_output($entry_string); } out($target, $entry_string); } elsif ($listtype eq 'shorthand') { out($target, " \\key{$k}\n"); } } out($target, " \\endsortlist\n"); } # Aliases while (my ($k, $ks) = each %{$data->{ALIAS_ENTRIES}{$secnum}{index}}) { out($target, $$ks); } # Missing keys while (my ($k, $ks) = each %{$data->{MISSING_ENTRIES}{$secnum}{index}}) { out($target, $$ks); } out($target, "\\endrefsection\n"); } out($target, $data->{TAIL}); $logger->info("Output to $target_string"); close $target; return; } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Output/bibtex.pm000444000000000000 1420312230324177 20416 0ustar00rootroot000000000000package Biber::Output::bibtex; use v5.16; use strict; use warnings; use base 'Biber::Output::base'; use Biber; use Biber::Config; use Biber::Constants; use Biber::Utils; use List::AllUtils qw( :all ); use Encode; use IO::File; use Log::Log4perl qw( :no_extra_logdie_message ); use Text::Wrap; $Text::Wrap::columns = 80; my $logger = Log::Log4perl::get_logger('main'); =encoding utf-8 =head1 NAME Biber::Output::bibtex - class for bibtex output =cut =head2 set_output_target_file Set the output target file of a Biber::Output::bibtex object A convenience around set_output_target so we can keep track of the filename =cut sub set_output_target_file { my $self = shift; my $outfile = shift; $self->{output_target_file} = $outfile; my $enc_out; if (Biber::Config->getoption('output_encoding')) { $enc_out = ':encoding(' . Biber::Config->getoption('output_encoding') . ')'; } my $TOOLFILE = IO::File->new($outfile, ">$enc_out"); $self->set_output_target($TOOLFILE); } =head2 set_output_entry Set the output for an entry =cut sub set_output_entry { my $self = shift; my $be = shift; # Biber::Entry object my $bee = $be->get_field('entrytype'); my $section = shift; # Section object the entry occurs in my $dm = shift; # Data Model object my $acc = ''; my $secnum = $section->number; my $key = $be->get_field('citekey'); # Make the right casing function my $casing; my $mss = Biber::Config->getoption('mssplit'); if (Biber::Config->getoption('output_fieldcase') eq 'upper') { $casing = sub {my $s = shift; my @s = split(/$mss/, $s); join($mss, uc(shift(@s)), @s)}; } elsif (Biber::Config->getoption('output_fieldcase') eq 'lower') { $casing = sub {my $s = shift; my @s = split(/$mss/, $s); join($mss, lc(shift(@s)), @s)}; } elsif (Biber::Config->getoption('output_fieldcase') eq 'title') { $casing = sub {my $s = shift; my @s = split(/$mss/, $s); join($mss, ucfirst(shift(@s)), @s)}; } $acc .= '@'; $acc .= $casing->($bee); $acc .= "\{$key,\n"; my $max_field_len; if (Biber::Config->getoption('output_align')) { $max_field_len = max map {Unicode::GCString->new($_)->length} $be->rawfields; } foreach my $f ($be->rawfields) { # If CROSSREF and XDATA have been resolved, don't output them # We can't use the usual skipout test for fields not to be output # as this only refers to .bbl output and not to bibtex output since this # latter is not really a "processed" output, it is supposed to be something # which could be again used as input and so we don't want to resolve/skip # fields like DATE etc. if (Biber::Config->getoption('output_resolve')) { next if first {lc($f) eq $_} ('xdata', 'crossref'); } my $value = decode_utf8($be->get_rawfield($f)); $acc .= ' ' x Biber::Config->getoption('output_indent'); $acc .= $casing->($f); $acc .= ' ' x ($max_field_len - Unicode::GCString->new($f)->length) if Biber::Config->getoption('output_align'); $acc .= ' = '; # Don't wrap field which should be macros in braces my $mfs = Biber::Config->getoption('output_macro_fields'); if (defined($mfs) and first {lc($f) eq $_} map {lc($_)} split(/\s*,\s*/, $mfs) ) { $acc .= "$value,\n"; } else { $acc .= "\{$value\},\n"; } } $acc .= "}\n\n"; # If requested to convert UTF-8 to macros ... if (Biber::Config->getoption('output_safechars')) { $acc = latex_recode_output($acc); } # Create an index by keyname for easy retrieval $self->{output_data}{ENTRIES}{$secnum}{index}{$key} = \$acc; return; } =head2 output Tool output method =cut sub output { my $self = shift; my $data = $self->{output_data}; my $target = $self->{output_target}; my $target_string = "Target"; # Default if ($self->{output_target_file}) { $target_string = $self->{output_target_file}; } # for debugging mainly unless ($target) { $target = new IO::File '>-'; } $logger->debug('Preparing final output using class ' . __PACKAGE__ . '...'); $logger->info("Writing '$target_string' with encoding '" . Biber::Config->getoption('output_encoding') . "'"); $logger->info('Converting UTF-8 to TeX macros on output') if Biber::Config->getoption('output_safechars'); out($target, $data->{HEAD}); $logger->debug("Writing entries in bibtex format"); # Bibtex output uses just one special section, always sorted by global sorting spec foreach my $key ($Biber::MASTER->sortlists->get_list(99999, 'entry', Biber::Config->getblxoption('sortscheme'))->get_keys) { out($target, ${$data->{ENTRIES}{99999}{index}{$key}}); } out($target, $data->{TAIL}); $logger->info("Output to $target_string"); close $target; return; } =head2 create_output_section Create the output from the sections data and push it into the output object. =cut sub create_output_section { my $self = shift; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); # We rely on the order of this array for the order of the .bbl foreach my $k ($section->get_citekeys) { # Regular entry my $be = $section->bibentry($k) or biber_error("Cannot find entry with key '$k' to output"); $self->set_output_entry($be, $section, Biber::Config->get_dm); } # Make sure the output object knows about the output section $self->set_output_section($secnum, $section); return; } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Output/biblatexml.pm000444000000000000 2612112230324176 21265 0ustar00rootroot000000000000package Biber::Output::biblatexml; use v5.16; use strict; use warnings; use base 'Biber::Output::base'; use Biber; use Biber::Config; use Biber::Constants; use Biber::Utils; use List::AllUtils qw( :all ); use Encode; use IO::File; use Log::Log4perl qw( :no_extra_logdie_message ); use Text::Wrap; use XML::Writer; use Unicode::Normalize; $Text::Wrap::columns = 80; my $logger = Log::Log4perl::get_logger('main'); =encoding utf-8 =head1 NAME Biber::Output::biblatexml - class for biblatexml output of tool mode =cut =head2 new Initialize a Biber::Output::biblatexml object =cut sub new { my $class = shift; my $obj = shift; my $self; if (defined($obj) and ref($obj) eq 'HASH') { $self = bless $obj, $class; } else { $self = bless {}, $class; } return $self; } =head2 set_output_target_file Set the output target file of a Biber::Output::biblatexml object A convenience around set_output_target so we can keep track of the filename =cut sub set_output_target_file { my $self = shift; my $toolfile = shift; $self->{output_target_file} = $toolfile; my $bltxml = 'http://biblatex-biber.sourceforge.net/biblatexml'; $self->{xml_prefix} = $bltxml; my $of = IO::File->new($toolfile, '>:encoding(UTF-8)'); $of->autoflush;# Needed for running tests to string refs my $xml = XML::Writer->new(OUTPUT => $of, DATA_MODE => 1, DATA_INDENT => Biber::Config->getoption('output_indent'), NAMESPACES => 1, PREFIX_MAP => {$bltxml => 'bltx'}); $xml->xmlDecl("UTF-8"); $xml->comment("Auto-generated by Biber::Output::biblatexml"); $xml->startTag([$self->{xml_prefix}, 'entries']); $self->set_output_target($xml); } =head2 set_output_entry Set the output for an entry =cut sub set_output_entry { my $self = shift; my $be = shift; # Biber::Entry object my $bee = $be->get_field('entrytype'); my $section = shift; # Section object the entry occurs in my $dm = shift; # Data Model object my $secnum = $section->number; my $key = $be->get_field('citekey'); my $xml = $self->{output_target}; my $xml_prefix = $self->{xml_prefix}; $xml->startTag([$xml_prefix, 'entry'], id => NFC($key), entrytype => NFC($bee)); # Id field if (my $ids = $be->get_field('ids')) { $xml->startTag([$xml_prefix, 'id']); foreach my $id (@$ids) { $xml->dataElement([$xml_prefix, 'item'], NFC($id)); } $xml->endTag; } # If CROSSREF and XDATA have been resolved, don't output them # We can't use the usual skipout test for fields not to be output # as this only refers to .bbl output and not to biblatexml output since this # latter is not really a "processed" output, it is supposed to be something # which could be again used as input and so we don't want to resolve/skip # fields like DATE etc. unless (Biber::Config->getoption('output_resolve')) { if (my $xdata = $be->get_field('xdata')) { $xml->startTag([$xml_prefix, 'xdata']); foreach my $xd (@$xdata) { $xml->dataElement([$xml_prefix, 'item'], NFC($xd)); } $xml->endTag(); } if (my $crossref = $be->get_field('crossref')) { $xml->dataElement([$xml_prefix, 'crossref'], NFC($crossref)); } } # Output name fields foreach my $namefield (@{$dm->get_fields_of_type('list', 'name')}) { # Name loop foreach my $form ($be->get_field_form_names($namefield)) { foreach my $lang ($be->get_field_form_lang_names($namefield, $form)) { if (my $nf = $be->get_field($namefield, $form, $lang)) { my @attrs; # Did we have "and others" in the data? if ( $nf->get_morenames ) { push @attrs, (morenames => 1); } # form/lang unless ($form eq 'original') { push @attrs, (form => $form); } unless ($lang eq 'default') { push @attrs, (lang => $lang); } $xml->startTag([$xml_prefix, $namefield], @attrs); foreach my $n (@{$nf->names}) { $n->name_to_biblatexml($xml, $self); } $xml->endTag(); # Names } } } } # Output list fields foreach my $listfield (@{$dm->get_fields_of_fieldtype('list')}) { next if $dm->field_is_datatype('name', $listfield); # name is a special list # List loop foreach my $form ($be->get_field_form_names($listfield)) { foreach my $lang ($be->get_field_form_lang_names($listfield, $form)) { if (my $lf = $be->get_field($listfield, $form, $lang)) { my @attrs; # Did we have a "more" list? if (lc($lf->[-1]) eq Biber::Config->getoption('others_string') ) { push @attrs, (morelist => 1); pop @$lf; # remove the last element in the array } # form/lang unless ($form eq 'original') { push @attrs, (form => $form); } unless ($lang eq 'default') { push @attrs, (lang => $lang); } $xml->startTag([$xml_prefix, $listfield], @attrs); # List loop foreach my $f (@$lf) { $xml->dataElement([$xml_prefix, 'item'], NFC($f)); } $xml->endTag();# List } } } } # Standard fields foreach my $field (sort @{$dm->get_fields_of_type('field', 'entrykey')}, @{$dm->get_fields_of_type('field', 'key')}, @{$dm->get_fields_of_type('field', 'literal')}, @{$dm->get_fields_of_type('field', 'code')}, @{$dm->get_fields_of_type('field', 'integer')}, @{$dm->get_fields_of_type('field', 'verbatim')}, @{$dm->get_fields_of_type('field', 'uri')}) { next if $dm->get_fieldformat($field) eq 'csv'; if ( ($dm->field_is_nullok($field) and $be->field_exists($field)) or $be->get_field($field) ) { foreach my $form ($be->get_field_form_names($field)) { foreach my $lang ($be->get_field_form_lang_names($field, $form)) { if (my $f = $be->get_field($field, $form, $lang)) { my @attrs; # form/lang unless ($form eq 'original') { push @attrs, (form => $form); } unless ($lang eq 'default') { push @attrs, (lang => $lang); } $xml->dataElement([$xml_prefix, $field], NFC($f), @attrs); } } } } } # csv fields foreach my $csvf (@{$dm->get_fields_of_type('field', 'csv')}) { next if $csvf eq 'ids'; # IDS is special next if $csvf eq 'xdata'; # XDATA is special # csv fields don't have form/lang if (my $f = $be->get_field($csvf)) { $xml->dataElement([$xml_prefix, $csvf], NFC(join(',',@$f))); } } # Range fields foreach my $rfield (@{$dm->get_fields_of_datatype('range')}) { if ( my $rf = $be->get_field($rfield) ) { # range fields are an array ref of two-element array refs [range_start, range_end] # range_end can be be empty for open-ended range or undef $xml->startTag([$xml_prefix, $rfield]); $xml->startTag([$xml_prefix, 'list']); foreach my $f (@$rf) { $xml->startTag([$xml_prefix, 'item']); if (defined($f->[1])) { $xml->dataElement([$xml_prefix, 'start'], NFC($f->[0])); $xml->dataElement([$xml_prefix, 'end'], NFC($f->[1])); } else { $xml->characters(NFC($f->[0])); } $xml->endTag();# item } $xml->endTag();# list $xml->endTag();# range } } # Date fields my %dinfo; foreach my $dfield (@{$dm->get_fields_of_datatype('datepart')}) { if ( my $df = $be->get_field($dfield) ) { # There are some assumptions here about field names which is not nice but # they are part of the default biblatex data model which is unlikely to be # changed by users if ($dfield =~ /^(url|orig|event)?(end)?(.+)$/) { my $dt = $1 || 'MAIN'; # Normal data has no qualifier prefix like "url" etc. if ($2) { $dinfo{$dt}{end}{$3} = $df; } else { $dinfo{$dt}{begin}{$3} = $df; # beginning of ranges have no qualifier like "end" } } } } foreach my $dp (keys %dinfo) { if ($dp eq 'MAIN') { $xml->startTag([$xml_prefix, 'date']); } else { $xml->startTag([$xml_prefix, 'date'], datetype => $dp); } my @s; my @e; push @s, $dinfo{$dp}{begin}{year} if exists($dinfo{$dp}{begin}{year}); push @s, $dinfo{$dp}{begin}{month} if exists($dinfo{$dp}{begin}{month}); push @s, $dinfo{$dp}{begin}{day} if exists($dinfo{$dp}{begin}{day}); push @e, $dinfo{$dp}{end}{year} if exists($dinfo{$dp}{end}{year}); push @e, $dinfo{$dp}{end}{month} if exists($dinfo{$dp}{end}{month}); push @e, $dinfo{$dp}{end}{day} if exists($dinfo{$dp}{end}{day}); my $end = join('-', @e); # date range if ($end or $dm->field_is_nullok("${dp}enddate")) { $xml->dataElement([$xml_prefix, 'start'], NFC(join('-', @s))); $xml->dataElement([$xml_prefix, 'end'], NFC(join('-', @e))); } else { # simple date $xml->characters(NFC(join('-', @s))); } $xml->endTag();# date } $xml->endTag(); return; } =head2 output Tool output method =cut sub output { my $self = shift; my $data = $self->{output_data}; my $xml = $self->{output_target}; my $target_string = "Target"; # Default if ($self->{output_target_file}) { $target_string = $self->{output_target_file}; } $logger->debug('Preparing final output using class ' . __PACKAGE__ . '...'); $logger->debug("Writing entries in tool mode"); $xml->endTag(); $xml->end(); $logger->info("Output to $target_string"); return; } =head2 create_output_section Create the output from the sections data and push it into the output object. =cut sub create_output_section { my $self = shift; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); # We rely on the order of this array for the order of the .bbl foreach my $k ($section->get_citekeys) { # Regular entry my $be = $section->bibentry($k) or biber_error("Cannot find entry with key '$k' to output"); $self->set_output_entry($be, $section, Biber::Config->get_dm); } # Make sure the output object knows about the output section $self->set_output_section($secnum, $section); return; } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Input000755000000000000 012230324175 16223 5ustar00rootroot000000000000biblatex-biber-1.8/lib/Biber/Input/file000755000000000000 012230324177 17144 5ustar00rootroot000000000000biblatex-biber-1.8/lib/Biber/Input/file/biblatexml.pm000444000000000000 6763112230324177 22017 0ustar00rootroot000000000000package Biber::Input::file::biblatexml; use v5.16; use strict; use warnings; use base 'Exporter'; use Carp; use Biber::Constants; use Biber::DataModel; use Biber::Entries; use Biber::Entry; use Biber::Entry::Names; use Biber::Entry::Name; use Biber::Sections; use Biber::Section; use Biber::Utils; use Biber::Config; use Encode; use File::Spec; use File::Slurp; use File::Temp; use Log::Log4perl qw(:no_extra_logdie_message); use List::AllUtils qw( uniq ); use XML::LibXML; use XML::LibXML::Simple; use Readonly; use Data::Dump qw(dump); use Unicode::Normalize; use Unicode::GCString; use URI; my $logger = Log::Log4perl::get_logger('main'); my $orig_key_order = {}; Readonly::Scalar our $BIBLATEXML_NAMESPACE_URI => 'http://biblatex-biber.sourceforge.net/biblatexml'; Readonly::Scalar our $NS => 'bltx'; # Determine handlers from data model my $dm = Biber::Config->get_dm; my $handlers = { 'CUSTOM' => {'related' => \&_related}, 'field' => { 'default' => { 'csv' => \&_literal, 'code' => \&_literal, 'date' => \&_date, 'entrykey' => \&_literal, 'integer' => \&_literal, 'key' => \&_literal, 'literal' => \&_literal, 'range' => \&_range, 'verbatim' => \&_literal, 'uri' => \&_uri }, 'csv' => { 'entrykey' => \&_csv, 'keyword' => \&_csv, 'option' => \&_csv, } }, 'list' => { 'default' => { 'entrykey' => \&_list, 'key' => \&_list, 'literal' => \&_list, 'name' => \&_name } } }; =head2 extract_entries Main data extraction routine. Accepts a data source identifier (filename in this case), preprocesses the file and then looks for the passed keys, creating entries when it finds them and passes out an array of keys it didn't find. =cut sub extract_entries { my ($filename, $keys) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $bibentries = $section->bibentries; my @rkeys = @$keys; my $tf; # Up here so that the temp file has enough scope to survive until we've # used it $logger->trace("Entering extract_entries() in driver 'biblatexml'"); # If it's a remote data file, fetch it first if ($filename =~ m/\A(?:http|ftp)(s?):\/\//xms) { $logger->info("Data source '$filename' is a remote .xml - fetching ..."); if ($1) { # HTTPS # use IO::Socket::SSL qw(debug99); # useful for debugging SSL issues # We have to explicitly set the cert path because otherwise the https module # can't find the .pem when PAR::Packer'ed # Have to explicitly try to require Mozilla::CA here to get it into %INC below # It may, however, have been removed by some biber unpacked dists if (not exists($ENV{PERL_LWP_SSL_CA_FILE}) and not exists($ENV{PERL_LWP_SSL_CA_PATH}) and not defined(Biber::Config->getoption('ssl-nointernalca')) and eval {require Mozilla::CA}) { # we assume that the default CA file is in .../Mozilla/CA/cacert.pem (my $vol, my $dir, undef) = File::Spec->splitpath( $INC{"Mozilla/CA.pm"} ); $dir =~ s/\/$//; # splitpath sometimes leaves a trailing '/' $ENV{PERL_LWP_SSL_CA_FILE} = File::Spec->catpath($vol, "$dir/CA", 'cacert.pem'); } # fallbacks for, e.g., linux unless (exists($ENV{PERL_LWP_SSL_CA_FILE})) { foreach my $ca_bundle (qw{ /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt /etc/ssl/ca-bundle.pem }) { next if ! -e $ca_bundle; $ENV{PERL_LWP_SSL_CA_FILE} = $ca_bundle; last; } foreach my $ca_path (qw{ /etc/ssl/certs/ /etc/pki/tls/ }) { next if ! -d $ca_path; $ENV{PERL_LWP_SSL_CA_PATH} = $ca_path; last; } } if (defined(Biber::Config->getoption('ssl-noverify-host'))) { $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; } require LWP::Protocol::https; } require LWP::Simple; $tf = File::Temp->new(TEMPLATE => 'biber_remote_data_source_XXXXX', DIR => $Biber::MASTER->biber_tempdir, SUFFIX => '.xml'); unless (LWP::Simple::is_success(LWP::Simple::getstore($filename, $tf->filename))) { biber_error("Could not fetch file '$filename'"); } $filename = $tf->filename; } else { # Need to get the filename so we increment # the filename count for preambles at the bottom of this sub my $trying_filename = $filename; unless ($filename = locate_biber_file($filename)) { biber_error("Cannot find file '$trying_filename'!") } } # Log that we found a data file $logger->info("Found BibLaTeXML data file '$filename'"); # Set up XML parser and namespace my $parser = XML::LibXML->new(); my $xml = File::Slurp::read_file($filename) or biber_error("Can't read file $filename"); $xml = NFD(decode('UTF-8', $xml));# Unicode NFD boundary my $bltxml = $parser->parse_string($xml); my $xpc = XML::LibXML::XPathContext->new($bltxml); $xpc->registerNs($NS, $BIBLATEXML_NAMESPACE_URI); if ($section->is_allkeys) { $logger->debug("All citekeys will be used for section '$secnum'"); # Loop over all entries, creating objects foreach my $entry ($xpc->findnodes("//$NS:entry")) { $logger->debug('Parsing BibLaTeXML entry object ' . $entry->nodePath); # If an entry has no key, ignore it and warn unless ($entry->hasAttribute('id')) { biber_warn("Invalid or undefined BibLaTeXML entry key in file '$filename', skipping ..."); next; } my $key = $entry->getAttribute('id'); # Check if this key has already been registered as a citekey alias, if # so, the key takes priority and we delete the alias if ($section->get_citekey_alias($key)) { biber_warn("Citekey alias '$key' is also a real entry key, skipping ..."); $section->get_citekey_alias($key); } # Any secondary keys? # We can't do this with a driver entry for the IDS field as this needs # an entry object creating first and the whole point of aliases is that # there is no entry object foreach my $id ($entry->findnodes("./$NS:ids/$NS:item")) { my $ids = $id->textContent(); # Skip aliases which are also real entry keys if ($section->has_everykey($ids)) { biber_warn("Citekey alias '$ids' is also a real entry key, skipping ..."); next; } # Warn on conflicting aliases if (my $otherid = $section->get_citekey_alias($ids)) { if ($otherid ne $key) { biber_warn("Citekey alias '$ids' already has an alias '$otherid', skipping ..."); } } else { # Since this is allkeys, we are guaranteed that the real entry for the alias # will be available $section->set_citekey_alias($ids, $key); $logger->debug("Citekey '$ids' is an alias for citekey '$key'"); } } # If we've already seen a case variant, warn if (my $okey = $section->has_badcasekey($key)) { biber_warn("Possible typo (case mismatch): '$key' and '$okey' in file '$filename', skipping '$key' ..."); } # If we've already seen this key, ignore it and warn if ($section->has_everykey($key)) { biber_warn("Duplicate entry key: '$key' in file '$filename', skipping ..."); next; } else { $section->add_everykey($key); } # Record a key->datasource name mapping for error reporting $section->set_keytods($key, $filename); create_entry($key, $entry); # We do this as otherwise we have no way of determining the origing .bib entry order # We need this in order to do sorting=none + allkeys because in this case, there is no # "citeorder" because nothing is explicitly cited and so "citeorder" means .bib order push @{$orig_key_order->{$filename}}, $key; } # if allkeys, push all bibdata keys into citekeys (if they are not already there) # We are using the special "orig_key_order" array which is used to deal with the # situation when sorting=none and allkeys is set. We need an array rather than the # keys from the bibentries hash because we need to preserver the original order of # the .bib as in this case the sorting sub "citeorder" means "bib order" as there are # no explicitly cited keys $section->add_citekeys(@{$orig_key_order->{$filename}}); $logger->debug("Added all citekeys to section '$secnum': " . join(', ', $section->get_citekeys)); } else { # loop over all keys we're looking for and create objects $logger->debug('Wanted keys: ' . join(', ', @$keys)); foreach my $wanted_key (@$keys) { $logger->debug("Looking for key '$wanted_key' in BibLaTeXML file '$filename'"); if (my @entries = $xpc->findnodes("//$NS:entry[\@id='$wanted_key']")) { # Check to see if there is more than one entry with this key and warn if so if ($#entries > 0) { biber_warn("Found more than one entry for key '$wanted_key' in '$filename': " . join(',', map {$_->getAttribute('id')} @entries) . ' - skipping duplicates ...'); } my $entry = $entries[0]; $logger->debug("Found key '$wanted_key' in BibLaTeXML file '$filename'"); $logger->debug('Parsing BibLaTeXML entry object ' . $entry->nodePath); # See comment above about the importance of the case of the key # passed to create_entry() # Skip creation if it's already been done, for example, via a citekey alias unless ($section->bibentries->entry_exists($wanted_key)) { # Record a key->datasource name mapping for error reporting $section->set_keytods($wanted_key, $filename); create_entry($wanted_key, $entry); } # found a key, remove it from the list of keys we want @rkeys = grep {$wanted_key ne $_} @rkeys; } elsif ($xpc->findnodes("//$NS:entry/$NS:id[text()='$wanted_key']")) { my $key = $xpc->findnodes("//$NS:entry/\@id"); $logger->debug("Citekey '$wanted_key' is an alias for citekey '$key'"); $section->set_citekey_alias($wanted_key, $key); # Make sure there is a real, cited entry for the citekey alias # just in case only the alias is cited unless ($section->bibentries->entry_exists($key)) { my $entry = $xpc->findnodes("//$NS:entry/[\@id='$key']"); # Record a key->datasource name mapping for error reporting $section->set_keytods($key, $filename); create_entry($key, $entry); $section->add_citekeys($key); } # found a key, remove it from the list of keys we want @rkeys = grep {$wanted_key ne $_} @rkeys; } $logger->debug('Wanted keys now: ' . join(', ', @rkeys)); } } return @rkeys; } =head2 create_entry Create a Biber::Entry object from an entry found in a biblatexml data source =cut sub create_entry { my ($key, $entry) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $dm = Biber::Config->get_dm; my $bibentries = $section->bibentries; my $bibentry = new Biber::Entry; $bibentry->set_field('citekey', $key); # Some entry attributes if (my $hp = $entry->getAttribute('howpublished')) { $bibentry->set_datafield('howpublished', $hp); } # We put all the fields we find modulo field aliases into the object. # Validation happens later and is not datasource dependent foreach my $f (uniq map {$_->nodeName()} $entry->findnodes('*')) { # We have to process local options as early as possible in order # to make them available for things that need them like name parsing if (_norm($entry->nodeName) eq 'options') { if (my $node = $entry->findnodes("./$NS:options")->get_node(1)) { process_entry_options($key, [ split(/\s*,\s*/, $node->textContent()) ]); # Save the raw options in case we are to output another input format like # biblatexml $bibentry->set_field('rawoptions', $node->textContent()); } } # Now run any defined handler if ($dm->is_field(_norm($f))) { my $handler = _get_handler($f); &$handler($bibentry, $entry, $f, $key); } } $bibentry->set_field('entrytype', $entry->getAttribute('entrytype')); $bibentry->set_field('datatype', 'biblatexml'); $bibentries->add_entry($key, $bibentry); return; } # Related entries sub _related { my ($bibentry, $entry, $f, $key) = @_; my $node = $entry->findnodes("./$f")->get_node(1); foreach my $item ($node->findnodes("./$NS:item")) { $bibentry->set_datafield('related', [ split(/\s*,\s*/, $item->getAttribute('ids')) ]); $bibentry->set_datafield('relatedtype', $item->getAttribute('type')); if (my $string = $item->getAttribute('string')) { $bibentry->set_datafield('relatedstring', $string); } } return; } # literal fields sub _literal { my ($bibentry, $entry, $f, $key) = @_; # can be multiple nodes with different script forms foreach my $node ($entry->findnodes("./$f")) { my $form = $node->getAttribute('form') || 'original'; my $lang = $node->getAttribute('xml.lang'); # eprint is special case if ($f eq "$NS:eprint") { $bibentry->set_datafield('eprinttype', $node->getAttribute('type'), $form, $lang); if (my $ec = $node->getAttribute('class')) { $bibentry->set_datafield('eprintclass', $ec, $form, $lang); } } else { $bibentry->set_datafield(_norm($f), $node->textContent(), $form, $lang); } } return; } # CSV field form sub _csv { my ($bibentry, $entry, $f) = @_; foreach my $node ($entry->findnodes("./$f")) { $bibentry->set_datafield(_norm($f), _split_list($node)); } return; } # uri fields # No script form or language - makes no sense in a URI sub _uri { my ($bibentry, $entry, $f, $key) = @_; my $node = $entry->findnodes("./$f")->get_node(1); my $value = $node->textContent(); # URL escape if it doesn't look like it already is # This is useful if we are generating URLs automatically with maps which may # contain UTF-8 from other fields unless ($value =~ /\%/) { $value = URI->new($value)->as_string; } $bibentry->set_datafield(_norm($f), $value); return; } # List fields sub _list { my ($bibentry, $entry, $f, $key) = @_; # can be multiple nodes with different script forms foreach my $node ($entry->findnodes("./$f")) { my $form = $node->getAttribute('form') || 'original'; my $lang = $node->getAttribute('xml.lang'); $bibentry->set_datafield(_norm($f), _split_list($node), $form, $lang); } return; } # Range fields sub _range { my ($bibentry, $entry, $f, $key) = @_; # can be multiple nodes with different script forms foreach my $node ($entry->findnodes("./$f")) { my $form = $node->getAttribute('form') || 'original'; my $lang = $node->getAttribute('xml.lang'); # List of ranges/values if (my @rangelist = $node->findnodes("./$NS:list/$NS:item")) { my $rl; foreach my $range (@rangelist) { push @$rl, _parse_range_list($range); } $bibentry->set_datafield(_norm($f), $rl, $form, $lang); } # Simple range elsif (my $range = $node->findnodes("./$NS:range")->get_node(1)) { $bibentry->set_datafield(_norm($f), [ _parse_range_list($range) ], $form, $lang); } # simple list else { my $values_ref; my @values = split(/\s*,\s*/, $node->textContent()); # Here the "-–" contains two different chars even though they might # look the same in some fonts ... # If there is a range sep, then we set the end of the range even if it's null # If no range sep, then the end of the range is undef foreach my $value (@values) { $value =~ m/\A\s*([^-–]+)([-–]*)([^-–]*)\s*\z/xms; my $end; if ($2) { $end = $3; } else { $end = undef; } push @$values_ref, [$1 || '', $end]; } $bibentry->set_datafield(_norm($f), $values_ref, $form, $lang); } } return; } # Date fields # Can't have form/lang - they are a(n ISO) standard format sub _date { my ($bibentry, $entry, $f, $key) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $ds = $section->get_keytods($key); foreach my $node ($entry->findnodes("./$f")) { my $datetype = $node->getAttribute('datetype') // ''; # We are not validating dates here, just syntax parsing my $date_re = qr/(\d{4}) # year (?:-(\d{2}))? # month (?:-(\d{2}))? # day /xms; if (my $start = $node->findnodes("./$NS:start")) { # Date range my $end = $node->findnodes("./$NS:end"); # Start of range if (my ($byear, $bmonth, $bday) = $start->get_node(1)->textContent() =~ m|\A$date_re\z|xms) { $bibentry->set_datafield($datetype . 'year', $byear) if $byear; $bibentry->set_datafield($datetype . 'month', $bmonth) if $bmonth; $bibentry->set_datafield($datetype . 'day', $bday) if $bday; } else { biber_warn("Datamodel: Entry '$key' ($ds): Invalid format '" . $start->get_node(1)->textContent() . "' of date field '$f' range start - ignoring", $bibentry); } # End of range if (my ($eyear, $emonth, $eday) = $end->get_node(1)->textContent() =~ m|\A(?:$date_re)?\z|xms) { $bibentry->set_datafield($datetype . 'endmonth', $emonth) if $emonth; $bibentry->set_datafield($datetype . 'endday', $eday) if $eday; if ($eyear) { # normal range $bibentry->set_datafield($datetype . 'endyear', $eyear); } else { # open ended range - endyear is defined but empty $bibentry->set_datafield($datetype . 'endyear', ''); } } else { biber_warn("Datamodel: Entry '$key' ($ds): Invalid format '" . $end->get_node(1)->textContent() . "' of date field '$f' range end - ignoring", $bibentry); } } else { # Simple date if (my ($byear, $bmonth, $bday) = $node->textContent() =~ m|\A$date_re\z|xms) { # did this entry get its year/month fields from splitting an ISO8601 date field? # We only need to know this for date, year/month as year/month can also # be explicitly set. It makes a difference on how we do any potential future # date validation $bibentry->set_field('datesplit', 1) if $datetype eq ''; $bibentry->set_datafield($datetype . 'year', $byear) if $byear; $bibentry->set_datafield($datetype . 'month', $bmonth) if $bmonth; $bibentry->set_datafield($datetype . 'day', $bday) if $bday; } else { biber_warn("Datamodel: Entry '$key' ($ds): Invalid format '" . $node->textContent() . "' of date field '$f' - ignoring", $bibentry); } } } return; } # Name fields sub _name { my ($bibentry, $entry, $f, $key) = @_; # can be multiple nodes with different script forms foreach my $node ($entry->findnodes("./$f")) { my $form = $node->getAttribute('form') || 'original'; my $lang = $node->getAttribute('xml.lang'); my $useprefix = Biber::Config->getblxoption('useprefix', $bibentry->get_field('entrytype'), $key); my $names = new Biber::Entry::Names; foreach my $name ($node->findnodes("./$NS:person")) { $names->add_name(parsename($name, $f, {useprefix => $useprefix})); } # Deal with explicit "moreenames" in data source if ($node->getAttribute('morenames')) { $names->set_morenames; } $bibentry->set_datafield(_norm($f), $names, $form, $lang); } return; } =head2 parsename Given a name node, this function returns a Biber::Entry::Name object Returns an object which internally looks a bit like this: { firstname => 'John', firstname_i => 'J', middlename => 'Fred', middlename_i => 'F', lastname => 'Doe', lastname_i => 'D', prefix => undef, prefix_i => undef, suffix => undef, suffix_i => undef, namestring => 'Doe, John Fred', nameinitstring => 'Doe_JF', gender => sm =cut sub parsename { my ($node, $fieldname, $opts) = @_; $logger->debug('Parsing BibLaTeXML name object ' . $node->nodePath); my $usepre = $opts->{useprefix}; my %namec; if ( $node->firstChild->nodeName eq '#text' and not $node->findnodes("./$NS:last")) { $namec{last} = $node->textContent(); if (my $ni = $node->getAttribute('initial')) { $namec{last_i} = [$ni]; } else { $namec{last_i} = [_gen_initials($namec{last})]; } } else { foreach my $n ('last', 'first', 'middle', 'prefix', 'suffix') { # If there is a name component node for this component ... if (my $nc_node = $node->findnodes("./$NS:$n")->get_node(1)) { # name component with parts if (my @parts = map {$_->textContent()} $nc_node->findnodes("./$NS:namepart")) { $namec{$n} = _join_name_parts(\@parts); $logger->debug("Found name component '$n': " . $namec{$n}); if (my $ni = $node->getAttribute('initial')) { $namec{"${n}_i"} = [$ni]; } else { $namec{"${n}_i"} = [_gen_initials(@parts)]; } } # with no parts elsif (my $t = $nc_node->textContent()) { $namec{$n} = $t; $logger->debug("Found name component '$n': $t"); if (my $ni = $node->getAttribute('initial')) { $namec{"${n}_i"} = [$ni]; } else { $namec{"${n}_i"} = [_gen_initials($t)]; } } } } } # Only warn about lastnames since there should always be one biber_warn("Couldn't determine Lastname for name XPath: " . $node->nodePath) unless exists($namec{last}); my $namestring = ''; # prefix if (my $p = $namec{prefix}) { $namestring .= "$p "; } # lastname if (my $l = $namec{last}) { $namestring .= "$l, "; } # suffix if (my $s = $namec{suffix}) { $namestring .= "$s, "; } # firstname if (my $f = $namec{first}) { $namestring .= "$f"; } # middlename if (my $m = $namec{middle}) { $namestring .= "$m, "; } # Remove any trailing comma and space if, e.g. missing firstname $namestring =~ s/,\s+\z//xms; # Construct $nameinitstring my $nameinitstr = ''; $nameinitstr .= join('', @{$namec{prefix_i}}) . '_' if ( $usepre and exists($namec{prefix}) ); $nameinitstr .= $namec{last} if exists($namec{last}); $nameinitstr .= '_' . join('', @{$namec{suffix_i}}) if exists($namec{suffix}); $nameinitstr .= '_' . join('', @{$namec{first_i}}) if exists($namec{first}); $nameinitstr .= '_' . join('', @{$namec{middle_i}}) if exists($namec{middle}); $nameinitstr =~ s/\s+/_/g; return Biber::Entry::Name->new( firstname => $namec{first} // undef, firstname_i => exists($namec{first}) ? $namec{first_i} : undef, middlename => $namec{middle} // undef, middlename_i => exists($namec{middle}) ? $namec{middle_i} : undef, lastname => $namec{last} // undef, lastname_i => exists($namec{last}) ? $namec{last_i} : undef, prefix => $namec{prefix} // undef, prefix_i => exists($namec{prefix}) ? $namec{prefix_i} : undef, suffix => $namec{suffix} // undef, suffix_i => exists($namec{suffix}) ? $namec{suffix_i} : undef, namestring => $namestring, nameinitstring => $nameinitstr, gender => $node->getAttribute('gender') ); } # Joins name parts using BibTeX tie algorithm. Ties are added: # # 1. After the first part if it is less than three characters long # 2. Before the last part sub _join_name_parts { my $parts = shift; # special case - 1 part if ($#{$parts} == 0) { return $parts->[0]; } # special case - 2 parts if ($#{$parts} == 1) { return $parts->[0] . '~' . $parts->[1]; } my $namestring = $parts->[0]; $namestring .= Unicode::GCString->new($parts->[0])->length < 3 ? '~' : ' '; $namestring .= join(' ', @$parts[1 .. ($#{$parts} - 1)]); $namestring .= '~' . $parts->[$#{$parts}]; return $namestring; } # Passed an array ref of strings, returns an array ref of initials sub _gen_initials { my @strings = @_; my @strings_out; foreach my $str (@strings) { # Deal with hyphenated name parts and normalise to a '-' character for easy # replacement with macro later if ($str =~ m/\p{Dash}/) { push @strings_out, join('-', _gen_initials(split(/\p{Dash}/, $str))); } else { my $chr = Unicode::GCString->new($str)->substr(0, 1)->as_string; # Keep diacritics with their following characters if ($chr =~ m/\p{Dia}/) { push @strings_out, Unicode::GCString->new($str)->substr(0, 2)->as_string; } else { push @strings_out, $chr; } } } return @strings_out; } # parses a range and returns a ref to an array of start and end values sub _parse_range_list { my $rangenode = shift; my $start = ''; my $end = ''; if (my $s = $rangenode->findnodes("./$NS:start")) { $start = $s->get_node(1)->textContent(); } if (my $e = $rangenode->findnodes("./$NS:end")) { $end = $e->get_node(1)->textContent(); } return [$start, $end]; } # Splits a list field into an array ref sub _split_list { my $node = shift; if (my @list = $node->findnodes("./$NS:item")) { return [ map {$_->textContent()} @list ]; } else { return [ $node->textContent() ]; } } # normalise a node name as they have a namsespace and might not be lowercase sub _norm { my $name = lc(shift); $name =~ s/\A$NS://xms; return $name; } sub _get_handler { my $field = shift; if (my $h = $handlers->{CUSTOM}{_norm($field)}) { return $h; } else { return $handlers->{$dm->get_fieldtype(_norm($field))}{$dm->get_fieldformat(_norm($field)) || 'default'}{$dm->get_datatype(_norm($field))}; } } 1; __END__ =pod =encoding utf-8 =head1 NAME Biber::Input::file::biblatexml - look in a BibLaTeXML file for an entry and create it if found =head1 DESCRIPTION Provides the extract_entries() method to get entries from a biblatexml data source and instantiate Biber::Entry objects for what it finds =head1 AUTHOR François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Input/file/zoterordfxml.pm000444000000000000 7324312230324175 22425 0ustar00rootroot000000000000package Biber::Input::file::zoterordfxml; use v5.16; use strict; use warnings; use base 'Exporter'; use Carp; use Biber::Constants; use Biber::Entries; use Biber::Entry; use Biber::Entry::Names; use Biber::Entry::Name; use Biber::Sections; use Biber::Section; use Biber::Utils; use Biber::Config; use Digest::MD5 qw( md5_hex ); use Encode; use File::Spec; use File::Slurp; use File::Temp; use Log::Log4perl qw(:no_extra_logdie_message); use List::AllUtils qw( :all ); use XML::LibXML; use XML::LibXML::Simple; use Data::Dump qw(dump); use Unicode::Normalize; use Unicode::GCString; use URI; ##### This is based on Zotero 2.0.9 ##### my $logger = Log::Log4perl::get_logger('main'); my $orig_key_order = {}; # Determine handlers from data model my $dm = Biber::Config->get_dm; my $handlers = { 'CUSTOM' => {'BIBERCUSTOMpartof' => \&_partof, 'BIBERCUSTOMidentifier' => \&_identifier, 'BIBERCUSTOMpublisher' => \&_publisher, 'BIBERCUSTOMpresentedat' => \&_presentedat, 'BIBERCUSTOMsubject' => \&_subject, }, 'field' => { 'default' => { 'code' => \&_literal, 'date' => \&_date, 'entrykey' => \&_literal, 'integer' => \&_literal, 'key' => \&_literal, 'literal' => \&_literal, 'range' => \&_range, 'verbatim' => \&_literal, 'uri' => \&_uri }, 'csv' => { 'entrykey' => \&_csv, 'keyword' => \&_csv, 'option' => \&_csv, } }, 'list' => { 'default' => { 'entrykey' => \&_literal, 'key' => \&_list, 'literal' => \&_list, 'name' => \&_name } } }; my %PREFICES = ('z' => 'http://www.zotero.org/namespaces/export#', 'foaf' => 'http://xmlns.com/foaf/0.1/', 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'dc' => 'http://purl.org/dc/elements/1.1/', 'dcterms' => 'http://purl.org/dc/terms/', 'bib' => 'http://purl.org/net/biblio#', 'prism' => 'http://prismstandard.org/namespaces/1.2/basic/', 'vcard' => 'http://nwalsh.com/rdf/vCard#', 'vcard2' => 'http://www.w3.org/2006/vcard/ns#'); =head2 extract_entries Main data extraction routine. Accepts a data source identifier (filename in this case), preprocesses the file and then looks for the passed keys, creating entries when it finds them and passes out an array of keys it didn't find. =cut sub extract_entries { my ($source, $keys) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $filename; my @rkeys = @$keys; my $tf; # Up here so that the temp file has enough scope to survive until we've # used it $logger->trace("Entering extract_entries()"); # Get a reference to the correct sourcemap sections, if they exist my $smaps = []; # Maps are applied in order USER->STYLE->DRIVER if (defined(Biber::Config->getoption('sourcemap'))) { # User maps if (my $m = first {$_->{datatype} eq 'zoterordfxml' and $_->{level} eq 'user' } @{Biber::Config->getoption('sourcemap')} ) { push @$smaps, $m; } # Style maps if (my $m = first {$_->{datatype} eq 'zoterordfxml' and $_->{level} eq 'style' } @{Biber::Config->getoption('sourcemap')} ) { push @$smaps, $m; } # Driver default maps if (my $m = first {$_->{datatype} eq 'zoterordfxml' and $_->{level} eq 'driver' } @{Biber::Config->getoption('sourcemap')} ) { push @$smaps, $m; } } # If it's a remote data file, fetch it first if ($source =~ m/\A(?:http|ftp)(s?):\/\//xms) { $logger->info("Data source '$source' is a remote Zotero RDF/XML data source - fetching ..."); if ($1) { # HTTPS # use IO::Socket::SSL qw(debug99); # useful for debugging SSL issues # We have to explicitly set the cert path because otherwise the https module # can't find the .pem when PAR::Packer'ed # Have to explicitly try to require Mozilla::CA here to get it into %INC below # It may, however, have been removed by some biber unpacked dists if (not exists($ENV{PERL_LWP_SSL_CA_FILE}) and not exists($ENV{PERL_LWP_SSL_CA_PATH}) and not defined(Biber::Config->getoption('ssl-nointernalca')) and eval {require Mozilla::CA}) { # we assume that the default CA file is in .../Mozilla/CA/cacert.pem (my $vol, my $dir, undef) = File::Spec->splitpath( $INC{"Mozilla/CA.pm"} ); $dir =~ s/\/$//; # splitpath sometimes leaves a trailing '/' $ENV{PERL_LWP_SSL_CA_FILE} = File::Spec->catpath($vol, "$dir/CA", 'cacert.pem'); } # fallbacks for, e.g., linux unless (exists($ENV{PERL_LWP_SSL_CA_FILE})) { foreach my $ca_bundle (qw{ /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt /etc/ssl/ca-bundle.pem }) { next if ! -e $ca_bundle; $ENV{PERL_LWP_SSL_CA_FILE} = $ca_bundle; last; } foreach my $ca_path (qw{ /etc/ssl/certs/ /etc/pki/tls/ }) { next if ! -d $ca_path; $ENV{PERL_LWP_SSL_CA_PATH} = $ca_path; last; } } if (defined(Biber::Config->getoption('ssl-noverify-host'))) { $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; } require LWP::Protocol::https; } require LWP::Simple; $tf = File::Temp->new(TEMPLATE => 'biber_remote_data_source_XXXXX', DIR => $Biber::MASTER->biber_tempdir, SUFFIX => '.rdf'); unless (LWP::Simple::is_success(LWP::Simple::getstore($source, $tf->filename))) { biber_error("Could not fetch '$source'"); } $filename = $tf->filename; } else { # Need to get the filename even if using cache so we increment # the filename count for preambles at the bottom of this sub unless ($filename = locate_biber_file($source)) { biber_error("Cannot find '$source'!") } } # Log that we found a data file $logger->info("Found zoterordfxml data source '$filename'"); # Set up XML parser and namespaces my $parser = XML::LibXML->new(); my $xml = File::Slurp::read_file($filename) or biber_error("Can't read file $filename"); $xml = NFD(decode('UTF-8', $xml));# Unicode NFD boundary my $rdfxml = $parser->parse_string($xml); my $xpc = XML::LibXML::XPathContext->new($rdfxml); foreach my $ns (keys %PREFICES) { $xpc->registerNs($ns, $PREFICES{$ns}); } if ($section->is_allkeys) { $logger->debug("All citekeys will be used for section '$secnum'"); # Loop over all entries, creating objects foreach my $entry ($xpc->findnodes("/rdf:RDF/*")) { $logger->debug('Parsing Zotero RDF/XML entry object ' . $entry->nodePath); # If an entry has no key, ignore it and warn unless ($entry->hasAttribute('rdf:about')) { biber_warn("Invalid or undefined RDF/XML ID in file '$filename', skipping ..."); next; } my $ek = $entry->getAttribute('rdf:about'); # sanitise the key for LaTeX $ek =~ s/\A\#item_/item_/xms; # If we've already seen a case variant, warn if (my $okey = $section->has_badcasekey($ek)) { biber_warn("Possible typo (case mismatch): '$ek' and '$okey' in file '$filename', skipping '$ek' ..."); } # If we've already seen this key, ignore it and warn if ($section->has_everykey($ek)) { biber_warn("Duplicate entry key: '$ek' in file '$filename', skipping ..."); next; } else { $section->add_everykey($ek); } # We do this as otherwise we have no way of determining the origing .bib entry order # We need this in order to do sorting=none + allkeys because in this case, there is no # "citeorder" because nothing is explicitly cited and so "citeorder" means .bib order push @{$orig_key_order->{$filename}}, $ek; # Record a key->datasource name mapping for error reporting $section->set_keytods($ek, $filename); create_entry($ek, $entry, $source, $smaps); } # if allkeys, push all bibdata keys into citekeys (if they are not already there) # We are using the special "orig_key_order" array which is used to deal with the # situation when sorting=non and allkeys is set. We need an array rather than the # keys from the bibentries hash because we need to preserver the original order of # the .bib as in this case the sorting sub "citeorder" means "bib order" as there are # no explicitly cited keys $section->add_citekeys(@{$orig_key_order->{$filename}}); $logger->debug("Added all citekeys to section '$secnum': " . join(', ', $section->get_citekeys)); } else { # loop over all keys we're looking for and create objects $logger->debug('Wanted keys: ' . join(', ', @$keys)); foreach my $wanted_key (@$keys) { $logger->debug("Looking for key '$wanted_key' in Zotero RDF/XML file '$filename'"); # Deal with messy Zotero auto-generated pseudo-keys my $temp_key = $wanted_key; $temp_key =~ s/\Aitem_/#item_/i; if (my @entries = $xpc->findnodes("/rdf:RDF/*[\@rdf:about='$temp_key']")) { # Check to see if there is more than one entry with this key and warn if so if ($#entries > 0) { biber_warn("Found more than one entry for key '$wanted_key' in '$filename': " . join(',', map {$_->getAttribute('rdf:about')} @entries) . ' - skipping duplicates ...'); } my $entry = $entries[0]; my $key = $entry->getAttribute('rdf:about'); $key =~ s/\A#item_/item_/i; # reverse of above $logger->debug("Found key '$wanted_key' in Zotero RDF/XML file '$filename'"); $logger->debug('Parsing Zotero RDF/XML entry object ' . $entry->nodePath); # See comment above about the importance of the case of the key # passed to create_entry() # Record a key->datasource name mapping for error reporting $section->set_keytods($wanted_key, $filename); create_entry($wanted_key, $entry, $source, $smaps); # found a key, remove it from the list of keys we want @rkeys = grep {$wanted_key ne $_} @rkeys; } $logger->debug('Wanted keys now: ' . join(', ', @rkeys)); } } return @rkeys; } =head2 create_entry Create a Biber::Entry object from an entry found in a Zotero RDF/XML data source =cut sub create_entry { my ($key, $entry, $source, $smaps) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $bibentries = $section->bibentries; my $bibentry = new Biber::Entry; $bibentry->set_field('citekey', $key); # Datasource mapping applied in $smap order (USER->STYLE->DRIVER) foreach my $smap (@$smaps) { my $level = $smap->{level}; # DATASOURCE MAPPING DEFINED BY USER IN CONFIG FILE OR .bcf MAP: foreach my $map (@{$smap->{map}}) { my $last_field = undef; my $last_fieldval = undef; my @imatches; # For persising parenthetical matches over several steps my $itype = $entry->findvalue('./z:itemType') || $entry->nodeName; my $last_type = $itype; # defaults to the entrytype unless changed below # Check pertype restrictions unless (not exists($map->{per_type}) or first {$_->{content} eq $itype} @{$map->{per_type}}) { next; } # Check per_datasource restrictions # Don't compare case insensitively - this might not be correct unless (not exists($map->{per_datasource}) or first {$_->{content} eq $source} @{$map->{per_datasource}}) { next; } # loop over mapping steps foreach my $step (@{$map->{map_step}}) { # Entrytype map if (my $source = $step->{map_type_source}) { unless ($itype eq $source) { # Skip the rest of the map if this step doesn't match and match is final if ($step->{map_final}) { $logger->debug("Source mapping (type=$level, key=$key): Entry type is '$itype' but map wants '$source' and step has 'final' set ... skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): Entry type is '$itype' but map wants '$source' ... skipping step ..."); next; } } # Change entrytype if requested $last_type = $itype; $logger->debug("Source mapping (type=$level, key=$key): Changing entry type from '$last_type' to " . $step->{map_type_target}); $entry->findnodes('./z:itemType/text()')->get_node(1)->setData($step->{map_type_target}); } # Field map if (my $source = $step->{map_field_source}) { unless ($entry->exists($source)) { # Skip the rest of the map if this step doesn't match and match is final if ($step->{map_final}) { $logger->debug("Source mapping (type=$level, key=$key): No field '$source' and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): No field '$source', skipping step ..."); next; } } $last_field = $source; $last_fieldval = $entry->findvalue($source); # map fields to targets if (my $m = $step->{map_match}) { if (defined($step->{map_replace})) { # replace can be null my $r = $step->{map_replace}; $logger->debug("Source mapping (type=$level, key=$key): Doing match/replace '$m' -> '$r' on field '$source'"); my $text = ireplace($last_fieldval, $m, $r); $entry->findnodes($source . '/text()')->get_node(1)->setData($text); } else { unless (@imatches = imatch($last_fieldval, $m)) { # Skip the rest of the map if this step doesn't match and match is final if ($step->{map_final}) { $logger->debug("Source mapping (type=$level, key=$key): Field '$source' does not match '$m' and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): Field '$source' does not match '$m', skipping step ..."); next; } } } } # Set to a different target if there is one if (my $target = $step->{map_field_target}) { if (my @t = $entry->findnodes($target)) { if ($map->{map_overwrite} // $smap->{map_overwrite}) { $logger->debug("Source mapping (type=$level, key=$key): Overwriting existing field '$target'"); # Have to do this otherwise XML::LibXML will merge the nodes map {$_->unbindNode} @t; } else { $logger->debug("Source mapping (type=$level, key=$key): Field '$source' is aliased to field '$target' but both are defined, skipping ..."); next; } } map {$_->setNodeName(_leaf_node($target))} $entry->findnodes($source); } } # field creation if (my $field = $step->{map_field_set}) { # Deal with special tokens if ($step->{map_null}) { $logger->debug("Source mapping (type=$level, key=$key): Deleting field '$field'"); map {$_->unbindNode} $entry->findnodes($field); } else { if ($entry->exists($field)) { unless ($map->{map_overwrite} // $smap->{map_overwrite}) { if ($step->{map_final}) { # map_final is set, ignore and skip rest of step $logger->debug("Source mapping (type=$level, key=$key): Field '$field' exists, overwrite is not set and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): Field '$field' exists and overwrite is not set, skipping step ..."); next; } } } # If append is set, keep the original value and append the new my $orig = $step->{map_append} ? $entry->findvalue($field) : ''; if ($step->{map_origentrytype}) { next unless $last_type; $logger->debug("Source mapping (type=$level, key=$key): Setting field '$field' to '${orig}${last_type}'"); $entry->appendTextChild($field, $orig . $last_type); } elsif ($step->{map_origfieldval}) { $logger->debug("Source mapping (type=$level, key=$key): Setting field '$field' to '${orig}${last_fieldval}'"); next unless $last_fieldval; $entry->appendTextChild($field, $orig . $last_fieldval); } elsif ($step->{map_origfield}) { $logger->debug("Source mapping (type=$level, key=$key): Setting field '$field' to '${orig}${last_field}'"); next unless $last_field; $entry->appendTextChild($field, $orig . $last_field); } else { my $fv = $step->{map_field_value}; # Now re-instate any unescaped $1 .. $9 to get round these being # dynamically scoped and being null when we get here from any # previous map_match $fv =~ s/(?debug("Source mapping (type=$level, key=$key): Setting field '$field' to '${orig}${fv}'"); $entry->appendTextChild($field, $orig . $fv); } } } } } } foreach my $f (uniq map {$_->nodeName()} $entry->findnodes('*')) { # Now run any defined handler # There is no else clause here to warn on invalid fields as there are so many # in zoterordfxml if ($dm->is_field(_strip_ns($f))) { my $handler = _get_handler($f); &$handler($bibentry, $entry, $f, $key, $smaps); } } my $itype = $entry->findvalue('./z:itemType') || _strip_ns($entry->nodeName); $bibentry->set_field('entrytype', $itype); $bibentry->set_field('datatype', 'zoterordfxml'); $bibentries->add_entry($key, $bibentry); return $bibentry; # We need to return the entry here for partof handling below } # HANDLERS # ======== # Handler for partof sub _partof { my ($bibentry, $entry, $f, $key, $smaps) = @_; my $partof = $entry->findnodes($f)->get_node(1); my $itype = $entry->findvalue('./z:itemType') || $entry->nodeName; if ($partof->hasAttribute('rdf:resource')) { # remote ISSN resources aren't much use return; } # For 'webpage' types ('online' biblatex type), Zotero puts in a pointless # empty partof z:Website container if ($itype eq 'webpage') { return; } # create a dataonly entry for the partOf and add a crossref to it my $crkey = $key . '_' . md5_hex($key); $logger->debug("Creating a dataonly crossref '$crkey' for key '$key'"); my $cref = create_entry($crkey, $partof->findnodes('*')->get_node(1), $smaps); $cref->set_datafield('options', 'dataonly'); Biber::Config->setblxoption('skiplab', 1, 'PER_ENTRY', $crkey); Biber::Config->setblxoption('skiplos', 1, 'PER_ENTRY', $crkey); $bibentry->set_datafield('crossref', $crkey); return; } # identifier sub _identifier { my ($bibentry, $entry, $f) = @_; if (my $url = $entry->findnodes("./$f/dcterms:URI/rdf:value")->get_node(1)) { $bibentry->set_datafield('url', $url->textContent()); } else { foreach my $id_node ($entry->findnodes($f)) { if ($id_node->textContent() =~ m/\A(ISSN|ISBN|DOI)\s(.+)\z/) { $bibentry->set_datafield(lc($1), $2); } } } return; } # Publisher sub _publisher { my ($bibentry, $entry, $f) = @_; if (my $org = $entry->findnodes("./$f/foaf:Organization")->get_node(1)) { # There is an address, set location. # Location is a list field in bibaltex, hence the array ref if (my $adr = $org->findnodes('./vcard:adr')->get_node(1)) { $bibentry->set_datafield('location', [ $adr->findvalue('./vcard:Address/vcard:locality') ]); } # set publisher # publisher is a list field in bibaltex, hence the array ref if (my $adr = $org->findnodes('./foaf:name')->get_node(1)) { $bibentry->set_datafield('publisher', [ $adr->textContent() ]); } } return; } # presentedAt sub _presentedat { my ($bibentry, $entry, $f) = @_; if (my $conf = $entry->findnodes("./$f/bib:Conference")->get_node(1)) { $bibentry->set_datafield('eventtitle', $conf->findvalue('./dc:title')); } return; } # subject sub _subject { my ($bibentry, $entry, $f) = @_; if (my $lib = $entry->findnodes("./$f/dcterms:LCC/rdf:value")->get_node(1)) { # This overrides any z:libraryCatalog node $bibentry->set_datafield('library', $lib->textContent()); } elsif (my @s = $entry->findnodes("./$f")) { my @kws; foreach my $s (@s) { push @kws, '{'.$s->textContent().'}'; } $bibentry->set_datafield('keywords', join(',', @kws)); } return; } # List fields sub _list { my ($bibentry, $entry, $f) = @_; my $value = $entry->findvalue($f); $bibentry->set_datafield($f, [ $value ]); return; } # Literal fields sub _literal { my ($bibentry, $entry, $f, $key) = @_; # Special case - libraryCatalog is used only if hasn't already been set # by LCC if (_strip_ns($f) eq 'library') { return if $bibentry->get_field('library'); } my $value = $entry->findvalue($f); $bibentry->set_datafield(_strip_ns($f), $value); return; } # URI fields sub _uri { my ($bibentry, $entry, $f, $key) = @_; my $value = $entry->findvalue($f); # URL escape if it doesn't look like it already is # This is useful if we are generating URLs automatically with maps which may # contain UTF-8 from other fields unless ($value =~ /\%/) { $value = URI->new($value)->as_string; } $bibentry->set_datafield(_strip_ns($f), $value); return; } # Range fields sub _range { my ($bibentry, $entry, $f) = @_; my $values_ref; my $value = $entry->findvalue($f); my @values = split(/\s*,\s*/, $value); # Here the "-–" contains two different chars even though they might # look the same in some fonts ... # If there is a range sep, then we set the end of the range even if it's null # If no range sep, then the end of the range is undef foreach my $value (@values) { $value =~ m/\A\s*([^-–]+)([-–]*)([^-–]*)\s*\z/xms; my $end; if ($2) { $end = $3; } else { $end = undef; } push @$values_ref, [$1 || '', $end]; } $bibentry->set_datafield(_strip_ns($f), $values_ref); return; } # Date fields sub _date { my ($bibentry, $entry, $f, $key) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $ds = $section->get_keytods($key); my $date = $entry->findvalue($f); # We are not validating dates here, just syntax parsing my $date_re = qr/(\d{4}) # year (?:-(\d{2}))? # month (?:-(\d{2}))? # day /xms; if (my ($byear, $bmonth, $bday, $r, $eyear, $emonth, $eday) = $date =~ m|\A$date_re(/)?(?:$date_re)?\z|xms) { $bibentry->set_datafield('year', $byear) if $byear; $bibentry->set_datafield('month', $bmonth) if $bmonth; $bibentry->set_datafield('day', $bday) if $bday; $bibentry->set_datafield('endmonth', $emonth) if $emonth; $bibentry->set_datafield('endday', $eday) if $eday; if ($r and $eyear) { # normal range $bibentry->set_datafield('endyear', $eyear); } elsif ($r and not $eyear) { # open ended range - endyear is defined but empty $bibentry->set_datafield('endyear', ''); } } else { biber_warn("Datamodel: Entry '$key' ($ds): Invalid format '$date' of date field '$f' in entry '$key' - ignoring", $bibentry); } return; } # Name fields sub _name { my ($bibentry, $entry, $f) = @_; my $names = new Biber::Entry::Names; foreach my $name ($entry->findnodes("./$f/rdf:Seq/rdf:li/foaf:Person")) { $names->add_name(parsename($name, $f)); } $bibentry->set_datafield(_strip_ns($f), $names); return; } =head2 parsename Given a name node, this function returns a Biber::Entry::Name object Returns an object which internally looks a bit like this: { firstname => 'John', firstname_i => 'J', middlename => 'Fred', middlename_i => 'F', lastname => 'Doe', lastname_i => 'D', prefix => undef, prefix_i => undef, suffix => undef, suffix_i => undef, namestring => 'Doe, John Fred', nameinitstring => 'Doe_JF', =cut sub parsename { my ($node, $fieldname) = @_; $logger->debug('Parsing Zotero RDF/XML name object ' . $node->nodePath); my %nmap = ('surname' => 'last', 'givenname' => 'first'); my %namec; foreach my $n ('surname', 'givenname') { if (my $nc = $node->findvalue("./foaf:$n")) { my $bn = $nmap{$n}; # convert to biblatex namepart name $namec{$bn} = $nc; $logger->debug("Found name component '$bn': $nc"); $namec{"${bn}_i"} = [_gen_initials($nc)]; } } # Only warn about lastnames since there should always be one biber_warn("Couldn't determine Lastname for name XPath: " . $node->nodePath) unless exists($namec{last}); my $namestring = ''; # lastname if (my $l = $namec{last}) { $namestring .= "$l, "; } # firstname if (my $f = $namec{first}) { $namestring .= "$f"; } # Remove any trailing comma and space if, e.g. missing firstname $namestring =~ s/,\s+\z//xms; # Construct $nameinitstring my $nameinitstr = ''; $nameinitstr .= $namec{last} if exists($namec{last}); $nameinitstr .= '_' . join('', @{$namec{first_i}}) if exists($namec{first}); $nameinitstr =~ s/\s+/_/g; return Biber::Entry::Name->new( firstname => $namec{first} // undef, firstname_i => exists($namec{first}) ? $namec{first_i} : undef, lastname => $namec{last} // undef, lastname_i => exists($namec{last}) ? $namec{last_i} : undef, namestring => $namestring, nameinitstring => $nameinitstr ); } # Passed an array ref of strings, returns an array ref of initials sub _gen_initials { my @strings = @_; my @strings_out; foreach my $str (@strings) { # Deal with hyphenated name parts and normalise to a '-' character for easy # replacement with macro later if ($str =~ m/\p{Dash}/) { push @strings_out, join('-', _gen_initials(split(/\p{Dash}/, $str))); } else { my $chr = Unicode::GCString->new($str)->substr(0, 1)->as_string; # Keep diacritics with their following characters if ($chr =~ m/\p{Dia}/) { push @strings_out, Unicode::GCString->new($str)->substr(0, 2)->as_string; } else { push @strings_out, $chr; } } } return @strings_out; } # Syntactically get the leaf node of a node path sub _leaf_node { my $node_path = shift; return $node_path =~ s|\X+/([^/]+$)|$1|r; } # Strip interim bltx namespace sub _strip_ns { my $node = shift; return $node =~ s|^[^:]+:||r; } sub _get_handler { my $field = shift; if (my $h = $handlers->{CUSTOM}{_strip_ns($field)}) { return $h; } else { return $handlers->{$dm->get_fieldtype(_strip_ns($field))}{$dm->get_fieldformat(_strip_ns($field)) || 'default'}{$dm->get_datatype(_strip_ns($field))}; } } 1; __END__ =pod =encoding utf-8 =head1 NAME Biber::Input::file::zoterordfxml - look in a Zotero RDF/XML file for an entry and create it if found =head1 DESCRIPTION Provides the extract_entries() method to get entries from a Zotero RDF/XML data source and instantiate Biber::Entry objects for what it finds =head1 AUTHOR François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Input/file/ris.pm000444000000000000 6377312230324177 20474 0ustar00rootroot000000000000package Biber::Input::file::ris; use v5.16; use strict; use warnings; use base 'Exporter'; use Carp; use Biber::Constants; use Biber::DataModel; use Biber::Entries; use Biber::Entry; use Biber::Entry::Names; use Biber::Entry::Name; use Biber::Sections; use Biber::Section; use Biber::Utils; use Biber::Config; use Encode; use File::Spec; use File::Temp; use Log::Log4perl qw(:no_extra_logdie_message); use List::AllUtils qw( :all ); use XML::LibXML::Simple; use Readonly; use Data::Dump qw(dump); use Unicode::Normalize; use Unicode::GCString; use URI; my $logger = Log::Log4perl::get_logger('main'); my $orig_key_order = {}; # Determine handlers from data model my $dm = Biber::Config->get_dm; my $handlers = { 'field' => { 'default' => { 'csv' => \&_verbatim, 'code' => \&_literal, 'date' => \&_date, 'datepart' => \&_verbatim, 'entrykey' => \&_verbatim, 'integer' => \&_verbatim, 'key' => \&_verbatim, 'literal' => \&_verbatim, 'range' => \&_range, 'verbatim' => \&_verbatim, 'uri' => \&_uri }, 'csv' => { 'entrykey' => \&_csv, 'keyword' => \&_csv, 'option' => \&_csv, } }, 'list' => { 'default' => { 'entrykey' => \&_list, 'key' => \&_list, 'literal' => \&_list, 'name' => \&_name, } } }; =head2 extract_entries Main data extraction routine. Accepts a data source identifier (filename in this case), preprocesses the file and then looks for the passed keys, creating entries when it finds them and passes out an array of keys it didn't find. =cut sub extract_entries { my ($source, $keys) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $filename; my @rkeys = @$keys; my $tf; $logger->trace("Entering extract_entries() in driver 'ris'"); # Get a reference to the correct sourcemap sections, if they exist my $smaps = []; # Maps are applied in order USER->STYLE->DRIVER if (defined(Biber::Config->getoption('sourcemap'))) { # User maps if (my $m = first {$_->{datatype} eq 'ris' and $_->{level} eq 'user' } @{Biber::Config->getoption('sourcemap')} ) { push @$smaps, $m; } # Style maps if (my $m = first {$_->{datatype} eq 'ris' and $_->{level} eq 'style' } @{Biber::Config->getoption('sourcemap')} ) { push @$smaps, $m; } # Driver default maps if (my $m = first {$_->{datatype} eq 'ris' and $_->{level} eq 'driver' } @{Biber::Config->getoption('sourcemap')} ) { push @$smaps, $m; } } # If it's a remote data file, fetch it first if ($source =~ m/\A(?:http|ftp)(s?):\/\//xms) { $logger->info("Data source '$source' is a remote RIS data source - fetching ..."); if ($1) { # HTTPS # use IO::Socket::SSL qw(debug99); # useful for debugging SSL issues # We have to explicitly set the cert path because otherwise the https module # can't find the .pem when PAR::Packer'ed # Have to explicitly try to require Mozilla::CA here to get it into %INC below # It may, however, have been removed by some biber unpacked dists if (not exists($ENV{PERL_LWP_SSL_CA_FILE}) and not exists($ENV{PERL_LWP_SSL_CA_PATH}) and not defined(Biber::Config->getoption('ssl-nointernalca')) and eval {require Mozilla::CA}) { # we assume that the default CA file is in .../Mozilla/CA/cacert.pem (my $vol, my $dir, undef) = File::Spec->splitpath( $INC{"Mozilla/CA.pm"} ); $dir =~ s/\/$//; # splitpath sometimes leaves a trailing '/' $ENV{PERL_LWP_SSL_CA_FILE} = File::Spec->catpath($vol, "$dir/CA", 'cacert.pem'); } # fallbacks for, e.g., linux unless (exists($ENV{PERL_LWP_SSL_CA_FILE})) { foreach my $ca_bundle (qw{ /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt /etc/ssl/ca-bundle.pem }) { next if ! -e $ca_bundle; $ENV{PERL_LWP_SSL_CA_FILE} = $ca_bundle; last; } foreach my $ca_path (qw{ /etc/ssl/certs/ /etc/pki/tls/ }) { next if ! -d $ca_path; $ENV{PERL_LWP_SSL_CA_PATH} = $ca_path; last; } } if (defined(Biber::Config->getoption('ssl-noverify-host'))) { $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; } require LWP::Protocol::https; } require LWP::Simple; $tf = File::Temp->new(TEMPLATE => 'biber_remote_data_source_XXXXX', DIR => $Biber::MASTER->biber_tempdir, SUFFIX => '.ris'); unless (LWP::Simple::is_success(LWP::Simple::getstore($source, $tf->filename))) { biber_error("Could not fetch '$source'"); } $filename = $tf->filename; } else { unless ($filename = locate_biber_file($source)) { biber_error("Cannot find '$source'!") } } # Log that we found a data file $logger->info("Found RIS data source '$filename'"); # pre-process into something a little more sensible, dealing with the multi-line # fields in RIS require IO::File; my $ris = new IO::File; $ris->open("< $filename"); my $e; my @ris_entries; my $last_tag; while(<$ris>) { if (Biber::Config->getoption('input_encoding') eq 'UTF-8') { $_ = NFD($_);# Unicode NFD boundary } if (m/\A([A-Z][A-Z0-9])\s\s\-\s*(.+)?\n\z/xms) { $last_tag = $1; if ($1 eq 'TY') { $e = {'TY' => $2} } elsif ($1 eq 'KW') { push @{$e->{KW}}, $2 } # amalgamate keywords elsif ($1 eq 'SP') { $e->{SPEP}{SP} = $2 } # amalgamate page range elsif ($1 eq 'EP') { $e->{SPEP}{EP} = $2 } # amalgamate page range elsif ($1 eq 'A1') { push @{$e->{A1}}, $2 } # amalgamate names elsif ($1 eq 'A2') { push @{$e->{A2}}, $2 } # amalgamate names elsif ($1 eq 'A3') { push @{$e->{A3}}, $2 } # amalgamate names elsif ($1 eq 'AU') { push @{$e->{AU}}, $2 } # amalgamate names elsif ($1 eq 'ED') { push @{$e->{ED}}, $2 } # amalgamate names elsif ($1 eq 'ER') { if (exists($e->{KW})) {$e->{KW} = join(',', @{$e->{KW}})} push @ris_entries, $e } else { $e->{$1} = $2 } } elsif (m/\A(.+)\n\z/xms) { # Deal with stupid line continuations $e->{$last_tag} .= " $1"; } } $ris->close; undef $ris; if ($section->is_allkeys) { $logger->debug("All citekeys will be used for section '$secnum'"); # Loop over all entries, creating objects foreach my $entry (@ris_entries) { $logger->debug('Parsing RIS entry object ' . $entry->{ID}); # If an entry has no key, ignore it and warn unless ($entry->{ID}) { biber_warn("RIS entry has no ID key in file '$filename', skipping ..."); next; } my $ek = $entry->{ID}; # If we've already seen a case variant, warn if (my $okey = $section->has_badcasekey($ek)) { biber_warn("Possible typo (case mismatch): '$ek' and '$okey' in file '$filename', skipping '$ek' ..."); } # If we've already seen this key, ignore it and warn if ($section->has_everykey($ek)) { biber_warn("Duplicate entry key: '$ek' in file '$filename', skipping ..."); next; } else { $section->add_everykey($ek); } # We do this as otherwise we have no way of determining the origing .bib entry order # We need this in order to do sorting=none + allkeys because in this case, there is no # "citeorder" because nothing is explicitly cited and so "citeorder" means .bib order push @{$orig_key_order->{$filename}}, $ek; # Record a key->datasource name mapping for error reporting $section->set_keytods($ek, $filename); create_entry($ek, $entry, $source, $smaps); } # if allkeys, push all bibdata keys into citekeys (if they are not already there) # We are using the special "orig_key_order" array which is used to deal with the # situation when sorting=non and allkeys is set. We need an array rather than the # keys from the bibentries hash because we need to preserver the original order of # the .bib as in this case the sorting sub "citeorder" means "bib order" as there are # no explicitly cited keys $section->add_citekeys(@{$orig_key_order->{$filename}}); $logger->debug("Added all citekeys to section '$secnum': " . join(', ', $section->get_citekeys)); } else { # loop over all keys we're looking for and create objects $logger->debug('Wanted keys: ' . join(', ', @$keys)); foreach my $wanted_key (@$keys) { $logger->debug("Looking for key '$wanted_key' in RIS file '$filename'"); if (my @entries = grep { $wanted_key eq $_->{ID} } @ris_entries) { if ($#entries > 0) { biber_warn("Found more than one entry for key '$wanted_key' in '$filename': " . join(',', map {$_->{ID}} @entries) . ' - skipping duplicates ...'); } my $entry = $entries[0]; $logger->debug("Found key '$wanted_key' in RIS file '$filename'"); $logger->debug('Parsing RIS entry object ' . $entry->{ID}); # Record a key->datasource name mapping for error reporting $section->set_keytods($wanted_key, $filename); # See comment above about the importance of the case of the key # passed to create_entry() create_entry($wanted_key, $entry, $source, $smaps); # found a key, remove it from the list of keys we want @rkeys = grep {$wanted_key ne $_} @rkeys; } $logger->debug('Wanted keys now: ' . join(', ', @rkeys)); } } return @rkeys; } =head2 create_entry Create a Biber::Entry object from an entry found in a RIS data source =cut sub create_entry { my ($key, $entry, $source, $smaps) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $dm = Biber::Config->get_dm; my $bibentries = $section->bibentries; my $bibentry = new Biber::Entry; $bibentry->set_field('citekey', $key); # Datasource mapping applied in $smap order (USER->STYLE->DRIVER) foreach my $smap (@$smaps) { my $level = $smap->{level}; MAP: foreach my $map (@{$smap->{map}}) { my $last_type = $entry->{TY}; # defaults to the entrytype unless changed below my $last_field = undef; my $last_fieldval = undef; my @imatches; # For persising parenthetical matches over several steps # Check pertype restrictions unless (not exists($map->{per_type}) or first {$_->{content} eq $entry->{TY}} @{$map->{per_type}}) { next; } # Check per_datasource restrictions # Don't compare case insensitively - this might not be correct unless (not exists($map->{per_datasource}) or first {$_->{content} eq $source} @{$map->{per_datasource}}) { next; } # loop over mapping steps foreach my $step (@{$map->{map_step}}) { # Entrytype map if (my $source = $step->{map_type_source}) { unless ($entry->{TY} eq $source) { # Skip the rest of the map if this step doesn't match and match is final if ($step->{map_final}) { $logger->debug("Source mapping (type=$level, key=$key): Entry type is '" . $entry->{TY} . "' but map wants '$source' and step has 'final' set ... skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): Entry type is '" . $entry->{TY} . "' but map wants '$source' ... skipping step ..."); next; } } # Change entrytype if requested $last_type = $entry->{TY}; $logger->debug("Source mapping (type=$level, key=$key): Changing entry type from '$last_type' to " . $step->{map_type_target}); $entry->{TY} = $step->{map_type_target}; } # Field map if (my $source = $step->{map_field_source}) { # key is a psudo-field. It's guaranteed to exist so # just check if that's what's being asked for unless (lc($source) eq 'entrykey' or exists($entry->{$source})) { # Skip the rest of the map if this step doesn't match and match is final if ($step->{map_final}) { $logger->debug("Source mapping (type=$level, key=$key): No field '$source' and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): No field '$source', skipping step ..."); next; } } $last_field = $source; $last_fieldval = lc($source) eq 'entrykey' ? $entry->{ID} : $entry->{$source}; # map fields to targets if (my $m = $step->{map_match}) { if (defined($step->{map_replace})) { # replace can be null # Can't modify entrykey if (lc($source) eq 'entrykey') { $logger->debug("Source mapping (type=$level, key=$key): Field '$source' is 'entrykey'- cannot remap the value of this field, skipping ..."); next; } my $r = $step->{map_replace}; $logger->debug("Source mapping (type=$level, key=$key): Doing match/replace '$m' -> '$r' on field '$source'"); $entry->{$source} = ireplace($last_fieldval, $m, $r); } else { unless (@imatches = imatch($last_fieldval, $m)) { # Skip the rest of the map if this step doesn't match and match is final if ($step->{map_final}) { $logger->debug("Source mapping (type=$level, key=$key): Field '$source' does not match '$m' and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): Field '$source' does not match '$m', skipping step ..."); next; } } } } # Set to a different target if there is one if (my $target = $step->{map_field_target}) { # Can't remap entry key pseudo-field if (lc($source) eq 'entrykey') { $logger->debug("Source mapping (type=$level, key=$key): Field '$source' is 'entrykey'- cannot map this to a new field as you must have an entrykey, skipping ..."); next; } if (exists($entry->{$target})) { if ($map->{map_overwrite} // $smap->{map_overwrite}) { $logger->debug("Source mapping (type=$level, key=$key): Overwriting existing field '$target'"); } else { $logger->debug("Source mapping (type=$level, key=$key): Field '$source' is aliased to field '$target' but both are defined, skipping ..."); next; } } $entry->{$target} = $entry->{$source}; delete($entry->{$source}); } } # field creation if (my $field = $step->{map_field_set}) { # Deal with special tokens if ($step->{map_null}) { $logger->debug("Source mapping (type=$level, key=$key): Deleting field '$field'"); delete($entry->{$field}); } else { if (exists($entry->{$field})) { unless ($map->{map_overwrite} // $smap->{map_overwrite}) { if ($step->{map_final}) { # map_final is set, ignore and skip rest of step $logger->debug("Source mapping (type=$level, key=$key): Field '$field' exists, overwrite is not set and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): Field '$field' exists and overwrite is not set, skipping step ..."); next; } } } # If append is set, keep the original value and append the new my $orig = $step->{map_append} ? $entry->{$field} : ''; if ($step->{map_origentrytype}) { next unless $last_type; $logger->debug("Source mapping (type=$level, key=$key): Setting field '$field' to '${orig}${last_type}'"); $entry->{$field} = $orig . $last_type; } elsif ($step->{map_origfieldval}) { next unless $last_fieldval; $logger->debug("Source mapping (type=$level, key=$key): Setting field '$field' to '${orig}${last_fieldval}'"); $entry->{$field} = $orig . $last_fieldval; } elsif ($step->{map_origfield}) { next unless $last_field; $logger->debug("Source mapping (type=$level, key=$key): Setting field '$field' to '${orig}${last_field}'"); $entry->{$field} = $orig . $last_field; } else { my $fv = $step->{map_field_value}; # Now re-instate any unescaped $1 .. $9 to get round these being # dynamically scoped and being null when we get here from any # previous map_match $fv =~ s/(?debug("Source mapping (type=$level, key=$key): Setting field '$field' to '${orig}${fv}'"); $entry->{$field} = $orig . $fv; } } } } } } foreach my $f (keys %$entry) { # Now run any defined handler if ($dm->is_field($f)) { my $handler = _get_handler($f); &$handler($bibentry, $entry, $f); } } $bibentry->set_field('entrytype', $entry->{TY}); $bibentry->set_field('datatype', 'ris'); $bibentries->add_entry($key, $bibentry); return; } # HANDLERS # ======== # List fields sub _list { my ($bibentry, $entry, $f) = @_; $bibentry->set_datafield($f, [ $entry->{$f} ]); return; } # Verbatim fields sub _verbatim { my ($bibentry, $entry, $f) = @_; $bibentry->set_datafield($f, $entry->{$f}); return; } # CSV field forms sub _csv { my ($bibentry, $entry, $f) = @_; $bibentry->set_datafield($f, [ split(/\s*,\s*/, $entry->{$f}) ]); return; } # URI fields sub _uri { my ($bibentry, $entry, $f) = @_; my $value = $entry->{$f}; # URL escape if it doesn't look like it already is # This is useful if we are generating URLs automatically with maps which may # contain UTF-8 from other fields unless ($value =~ /\%/) { $value = URI->new($value)->as_string; } $bibentry->set_datafield($f, $value); return; } # Range fields sub _range { my ($bibentry, $entry, $f) = @_; if (my $r = _parse_range_list($entry->{$f})) { $bibentry->set_datafield($f, $r); } return; } # Date fields sub _date { my ($bibentry, $entry, $f) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $key = $bibentry->get_field('citekey'); my $ds = $section->get_keytods($key); my $date = $entry->{$f}; if ($date =~ m|\A([0-9]{4})/([0-9]{2})/([0-9]{2})\s*\z|xms) { $bibentry->set_datafield('year', $1); $bibentry->set_datafield('month', $2); $bibentry->set_datafield('day', $3); } elsif ($date =~ m|\A([0-9]+)\s*\z|xms) { $bibentry->set_datafield('year', $1); } else { biber_warn("Datamodel: Entry '$key' ($ds): Invalid RIS date format: '$date' - ignoring"); } return; } # Name fields sub _name { my ($bibentry, $entry, $f) = @_; my $names = $entry->{$f}; my $names_obj = new Biber::Entry::Names; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $key = $bibentry->get_field('citekey'); my $ds = $section->get_keytods($bibentry->get_field('citekey')); foreach my $name (@$names) { $logger->debug('Parsing RIS name'); if ($name =~ m|\A([^,]+)\s*,?\s*([^,]+)?\s*,?\s*([^,]+)?\z|xms) { my $lastname = _join_name_parts(split(/\s+/, $1)) if $1; my $firstname = _join_name_parts(split(/\s+/, $2)) if $2; my $suffix = _join_name_parts(split(/\s+/, $3)) if $3; $logger->debug("Found name component 'lastname': $lastname") if $lastname; $logger->debug("Found name component 'firstname': $firstname") if $firstname; $logger->debug("Found name component 'suffix': $suffix") if $suffix; my @lni = _gen_initials(split(/\s/, $1)) if $lastname; my @fni = _gen_initials(split(/\s/, $2)) if $firstname; my @si = _gen_initials(split(/\s/, $3)) if $suffix; my $namestring = ''; # lastname $namestring .= "$lastname, "; # suffix $namestring .= "$suffix, " if $suffix; # firstname $namestring .= $firstname if $firstname; # Remove any trailing comma and space if, e.g. missing firstname # Replace any nbspes $namestring =~ s/,\s+\z//xms; $namestring =~ s/~/ /gxms; # Construct $nameinitstring my $nameinitstr = ''; $nameinitstr .= $lastname if $lastname; $nameinitstr .= '_' . join('', @si) if $suffix; $nameinitstr .= '_' . join('', @fni) if $firstname; $nameinitstr =~ s/\s+/_/g; $nameinitstr =~ s/~/_/g; my $name_obj = Biber::Entry::Name->new( firstname => $firstname || undef, firstname_i => $firstname ? \@fni : undef, lastname => $lastname, lastname_i => \@lni, suffix => $suffix || undef, suffix_i => $suffix ? \@si : undef, namestring => $namestring, nameinitstring => $nameinitstr ); $names_obj->add_name($name_obj); $bibentry->set_datafield($f, $names_obj); # Special case if ($f eq 'A3') { $bibentry->set_datafield('editortype', 'series'); } } else { biber_warn("Datamodel: Entry '$key' ($ds): Invalid RIS name format: '$name' - ignoring"); } } return; } # Joins name parts using BibTeX tie algorithm. Ties are added: # # 1. After the first part if it is less than three characters long # 2. Before the last part sub _join_name_parts { my @parts = @_; # special case - 1 part if ($#parts == 0) { return $parts[0]; } # special case - 2 parts if ($#parts == 1) { return $parts[0] . '~' . $parts[1]; } my $namestring = $parts[0]; $namestring .= Unicode::GCString->new($parts[0])->length < 3 ? '~' : ' '; $namestring .= join(' ', @parts[1 .. ($#parts - 1)]); $namestring .= '~' . $parts[$#parts]; return $namestring; } # Passed an array of strings, returns an array of initials for the strings sub _gen_initials { my @strings = @_; my @strings_out; foreach my $str (@strings) { # Deal with hyphenated name parts and normalise to a '-' character for easy # replacement with macro later if ($str =~ m/\p{Dash}/) { push @strings_out, join('-', _gen_initials(split(/\p{Dash}/, $str))); } elsif ($str =~ m/\s/) { # name parts with spaces push @strings_out, _gen_initials(split(/\s+/, $str)); } else { my $chr = Unicode::GCString->new($str)->substr(0, 1)->as_string; # Keep diacritics with their following characters if ($chr =~ m/\p{Dia}/) { push @strings_out, Unicode::GCString->new($str)->substr(0, 2)->as_string; } else { push @strings_out, $chr; } } } return @strings_out; } # parses a range and returns a ref to an array of start and end values # Don't return anything if the range is invalid. Deals with RIS files which # have empty SP or EP fields sub _parse_range_list { my $range = shift; my $start = $range->{SP} || ''; my $end = $range->{EP} || ''; if ($start) { return [[$start, $end]]; } else { return undef; } } sub _get_handler { my $field = shift; if (my $h = $handlers->{CUSTOM}{$field}) { return $h; } else { return $handlers->{$dm->get_fieldtype($field)}{$dm->get_fieldformat($field)}{$dm->get_datatype($field)}; } } 1; __END__ =pod =encoding utf-8 =head1 NAME Biber::Input::file::ris - look in a RIS file for an entry and create it if found =head1 DESCRIPTION Provides the extract_entries() method to get entries from a RIS data source and instantiate Biber::Entry objects for what it finds =head1 AUTHOR François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Input/file/endnotexml.pm000444000000000000 10411112230324177 22052 0ustar00rootroot000000000000package Biber::Input::file::endnotexml; use v5.16; use strict; use warnings; use base 'Exporter'; use Carp; use Biber::Constants; use Biber::Entries; use Biber::Entry; use Biber::Entry::Names; use Biber::Entry::Name; use Biber::Sections; use Biber::Section; use Biber::Utils; use Biber::Config; use Digest::MD5 qw( md5_hex ); use Encode; use File::Spec; use File::Slurp; use File::Temp; use Log::Log4perl qw(:no_extra_logdie_message); use List::AllUtils qw( :all ); use XML::LibXML; use XML::LibXML::Simple; use Data::Dump qw(dump); use Text::BibTeX qw(:nameparts :joinmethods :metatypes); use Text::BibTeX::Name; use Text::BibTeX::NameFormat; use Unicode::Normalize; use Unicode::GCString; use URI; ##### This is based on Endnote X4 ##### my $logger = Log::Log4perl::get_logger('main'); my $orig_key_order = {}; # Determine handlers from data model my $dm = Biber::Config->get_dm; my $handlers = { 'field' => { 'default' => { 'csv' => \&_csv, 'code' => \&_literal, 'date' => \&_date, 'entrykey' => \&_literal, 'integer' => \&_literal, 'key' => \&_literal, 'literal' => \&_literal, 'range' => \&_range, 'verbatim' => \&_verbatim, 'uri' => \&_uri }, 'csv' => { 'entrykey' => \&_csv, 'keyword' => \&_csv, 'option' => \&_csv, } }, 'list' => { 'default' => { 'entrykey' => \&_literal, 'key' => \&_list, 'literal' => \&_list, 'name' => \&_name } } }; =head2 extract_entries Main data extraction routine. Accepts a data source identifier (filename in this case), preprocesses the file and then looks for the passed keys, creating entries when it finds them and passes out an array of keys it didn't find. =cut sub extract_entries { my ($source, $keys) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $filename; my @rkeys = @$keys; my $tf; # Up here so that the temp file has enough scope to survive until we've # used it $logger->trace("Entering extract_entries() in driver 'endnotexml'"); # Get a reference to the correct sourcemap sections, if they exist my $smaps = []; # Maps are applied in order USER->STYLE->DRIVER if (defined(Biber::Config->getoption('sourcemap'))) { # User maps if (my $m = first {$_->{datatype} eq 'endnotexml' and $_->{level} eq 'user' } @{Biber::Config->getoption('sourcemap')} ) { push @$smaps, $m; } # Style maps if (my $m = first {$_->{datatype} eq 'endnotexml' and $_->{level} eq 'style' } @{Biber::Config->getoption('sourcemap')} ) { push @$smaps, $m; } # Driver default maps if (my $m = first {$_->{datatype} eq 'endnotexml' and $_->{level} eq 'driver'} @{Biber::Config->getoption('sourcemap')} ) { push @$smaps, $m; } } # If it's a remote data file, fetch it first if ($source =~ m/\A(?:http|ftp)(s?):\/\//xms) { $logger->info("Data source '$source' is a remote EndNote XML datasource - fetching ..."); if ($1) { # HTTPS # use IO::Socket::SSL qw(debug99); # useful for debugging SSL issues # We have to explicitly set the cert path because otherwise the https module # can't find the .pem when PAR::Packer'ed # Have to explicitly try to require Mozilla::CA here to get it into %INC below # It may, however, have been removed by some biber unpacked dists if (not exists($ENV{PERL_LWP_SSL_CA_FILE}) and not exists($ENV{PERL_LWP_SSL_CA_PATH}) and not defined(Biber::Config->getoption('ssl-nointernalca')) and eval {require Mozilla::CA}) { # we assume that the default CA file is in .../Mozilla/CA/cacert.pem (my $vol, my $dir, undef) = File::Spec->splitpath( $INC{"Mozilla/CA.pm"} ); $dir =~ s/\/$//; # splitpath sometimes leaves a trailing '/' $ENV{PERL_LWP_SSL_CA_FILE} = File::Spec->catpath($vol, "$dir/CA", 'cacert.pem'); } # fallbacks for, e.g., linux unless (exists($ENV{PERL_LWP_SSL_CA_FILE})) { foreach my $ca_bundle (qw{ /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt /etc/ssl/ca-bundle.pem }) { next if ! -e $ca_bundle; $ENV{PERL_LWP_SSL_CA_FILE} = $ca_bundle; last; } foreach my $ca_path (qw{ /etc/ssl/certs/ /etc/pki/tls/ }) { next if ! -d $ca_path; $ENV{PERL_LWP_SSL_CA_PATH} = $ca_path; last; } } if (defined(Biber::Config->getoption('ssl-noverify-host'))) { $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; } require LWP::Protocol::https; } require LWP::Simple; $tf = File::Temp->new(TEMPLATE => 'biber_remote_data_source_XXXXX', DIR => $Biber::MASTER->biber_tempdir, SUFFIX => '.xml'); unless (LWP::Simple::is_success(LWP::Simple::getstore($source, $tf->filename))) { biber_error("Could not fetch '$source'"); } $filename = $tf->filename; } else { # Need to get the filename so we increment # the filename count for preambles at the bottom of this sub unless ($filename = locate_biber_file($source)) { biber_error("Cannot find '$source'!") } } # Log that we found a data file $logger->info("Found EndNote XML data source '$filename'"); # Set up XML parser and namespaces my $parser = XML::LibXML->new(); my $xml = File::Slurp::read_file($filename) or biber_error("Can't read file $filename"); $xml = NFD(decode('UTF-8', $xml));# Unicode NFD boundary my $enxml = $parser->parse_string($xml); my $xpc = XML::LibXML::XPathContext->new($enxml); if ($section->is_allkeys) { $logger->debug("All citekeys will be used for section '$secnum'"); # Loop over all entries, creating objects foreach my $entry ($xpc->findnodes("/xml/records/record")) { $logger->debug('Parsing Endnote XML entry object ' . $entry->nodePath); # If an entry has no key, ignore it and warn unless ($entry->findvalue('./rec-number')) { biber_warn("Invalid or undefined entry ID in file '$filename', skipping ..."); next; } my $ek = $entry->findvalue('./rec-number'); # If we've already seen a case variant, warn if (my $okey = $section->has_badcasekey($ek)) { biber_warn("Possible typo (case mismatch): '$ek' and '$okey' in file '$filename', skipping '$ek' ..."); } # If we've already seen this key, ignore it and warn if ($section->has_everykey($ek)) { biber_warn("Duplicate entry key: '$ek' in file '$filename', skipping ..."); next; } else { $section->add_everykey($ek); } my $dbdid = $entry->findvalue('./foreign-keys/key/@db-id'); my $key = $ek; # Record a key->datasource name mapping for error reporting $section->set_keytods("$dbdid:$key", $filename); # We do this as otherwise we have no way of determining the origing .bib entry order # We need this in order to do sorting=none + allkeys because in this case, there is no # "citeorder" because nothing is explicitly cited and so "citeorder" means .bib order push @{$orig_key_order->{$filename}}, "$dbdid:$key"; create_entry("$dbdid:$key", $entry, $source, $smaps); } # if allkeys, push all bibdata keys into citekeys (if they are not already there) # We are using the special "orig_key_order" array which is used to deal with the # situation when sorting=non and allkeys is set. We need an array rather than the # keys from the bibentries hash because we need to preserver the original order of # the .bib as in this case the sorting sub "citeorder" means "bib order" as there are # no explicitly cited keys $section->add_citekeys(@{$orig_key_order->{$filename}}); $logger->debug("Added all citekeys to section '$secnum': " . join(', ', $section->get_citekeys)); } else { # loop over all keys we're looking for and create objects $logger->debug('Wanted keys: ' . join(', ', @$keys)); foreach my $wanted_key (@$keys) { $logger->debug("Looking for key '$wanted_key' in Endnote XML file '$filename'"); # Split key into parts my ($wdbid, $wnum) = split(/:/, $wanted_key); if (my @entries = $xpc->findnodes("/xml/records/record[rec-number[text()='$wnum']][foreign-keys/key[\@db-id='$wdbid']]")) { # Check to see if there is more than one entry with this key and warn if so if ($#entries > 0) { biber_warn("Found more than one entry for key '$wanted_key' in '$wdbid:$wnum' - Skipping duplicates ..."); } my $entry = $entries[0]; $logger->debug("Found key '$wanted_key' in Endnote XML file '$filename'"); $logger->debug('Parsing Endnote XML entry object ' . $entry->nodePath); # Record a key->datasource name mapping for error reporting $section->set_keytods($wanted_key, $filename); # See comment above about the importance of the case of the key # passed to create_entry() create_entry($wanted_key, $entry, $source, $smaps); # found a key, remove it from the list of keys we want @rkeys = grep {$wanted_key ne $_} @rkeys; } $logger->debug('Wanted keys now: ' . join(', ', @rkeys)); } } return @rkeys; } =head2 create_entry Create a Biber::Entry object from an entry found in a Endnote XML data source =cut sub create_entry { my ($key, $entry, $source, $smaps) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $bibentries = $section->bibentries; my $bibentry = new Biber::Entry; $bibentry->set_field('citekey', $key); # Datasource mapping applied in $smap order (USER->STYLE->DRIVER) foreach my $smap (@$smaps) { my $level = $smap->{level}; # DATASOURCE MAPPING DEFINED BY USER IN CONFIG FILE OR .bcf MAP: foreach my $map (@{$smap->{map}}) { my $last_field = undef; my $last_fieldval = undef; my @imatches; # For persising parenthetical matches over several steps my $itype = $entry->findvalue('./ref-type/@name'); my $last_type = $itype; # defaults to the entrytype unless changed below # Check pertype restrictions unless (not exists($map->{per_type}) or first {$_->{content} eq $itype} @{$map->{per_type}}) { next; } # Check per_datasource restrictions # Don't compare case insensitively - this might not be correct unless (not exists($map->{per_datasource}) or first {$_->{content} eq $source} @{$map->{per_datasource}}) { next; } # loop over mapping steps foreach my $step (@{$map->{map_step}}) { # Entrytype map if (my $source = $step->{map_type_source}) { unless ($itype eq $source) { # Skip the rest of the map if this step doesn't match and match is final if ($step->{map_final}) { $logger->debug("Source mapping (type=$level, key=$key): Entry type is '$itype' but map wants '$source' and step has 'final' set ... skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): Entry type is '$itype' but map wants '$source' ... skipping step ..."); next; } } # Change entrytype if requested $last_type = $itype; $logger->debug("Source mapping (type=$level, key=$key): Changing entry type from '$last_type' to " . $step->{map_type_target}); $entry->findnodes('./ref-type')->get_node(1)->setAttribute('name', $step->{map_type_target}); } # Field map if (my $source = $step->{map_field_source}) { unless ($entry->exists($source)) { # Skip the rest of the map if this step doesn't match and match is final if ($step->{map_final}) { $logger->debug("Source mapping (type=$level, key=$key): No field '$source' and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): No field '$source', skipping step ..."); next; } } $last_field = $source; $last_fieldval = $entry->findvalue($source); # map fields to targets if (my $m = $step->{map_match}) { if (defined($step->{map_replace})) { # replace can be null my $r = $step->{map_replace}; $logger->debug("Source mapping (type=$level, key=$key): Doing match/replace '$m' -> '$r' on field '$source'"); my $text = ireplace($last_fieldval, $m, $r); $entry->findnodes($source . '/style/text()')->get_node(1)->setData($text); } else { unless (@imatches = imatch($last_fieldval, $m)) { # Skip the rest of the map if this step doesn't match and match is final if ($step->{map_final}) { $logger->debug("Source mapping (type=$level, key=$key): Field '$source' does not match '$m' and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): Field '$source' does not match '$m', skipping step ..."); next; } } } } # Set to a different target if there is one if (my $target = $step->{map_field_target}) { if (my @t = $entry->findnodes($target)) { if ($map->{map_overwrite} // $smap->{map_overwrite}) { $logger->debug("Source mapping (type=$level, key=$key): Overwriting existing field '$target'"); # Have to do this otherwise XML::LibXML will merge the nodes map {$_->unbindNode} @t; } else { $logger->debug("Source mapping (type=$level, key=$key): Field '$source' is aliased to field '$target' but both are defined, skipping ..."); next; } } map {$_->setNodeName(_leaf_node($target))} $entry->findnodes($source); } } # field creation if (my $field = $step->{map_field_set}) { # Deal with special tokens if ($step->{map_null}) { $logger->debug("Source mapping (type=$level, key=$key): Deleting field '$field'"); map {$_->unbindNode} $entry->findnodes($field); } else { if ($entry->exists($field)) { unless ($map->{map_overwrite} // $smap->{map_overwrite}) { if ($step->{map_final}) { # map_final is set, ignore and skip rest of step $logger->debug("Source mapping (type=$level, key=$key): Field '$field' exists, overwrite is not set and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): Field '$field' exists and overwrite is not set, skipping step ..."); next; } } } # If append is set, keep the original value and append the new my $orig = $step->{map_append} ? $entry->findvalue($field) : ''; if ($step->{map_origentrytype}) { next unless $last_type; $logger->debug("Source mapping (type=$level, key=$key): Setting field '$field' to '${orig}${last_type}'"); $entry->appendTextChild($field, $orig . $last_type); } elsif ($step->{map_origfieldval}) { next unless $last_fieldval; $logger->debug("Source mapping (type=$level, key=$key): Setting field '$field' to '${orig}${last_fieldval}'"); $entry->appendTextChild($field, $orig . $last_fieldval); } elsif ($step->{map_origfield}) { next unless $last_field; $logger->debug("Source mapping (type=$level, key=$key): Setting field '$field' to '${orig}${last_field}'"); $entry->appendTextChild($field, $orig . $last_field); } else { my $fv = $step->{map_field_value}; # Now re-instate any unescaped $1 .. $9 to get round these being # dynamically scoped and being null when we get here from any # previous map_match $fv =~ s/(?debug("Source mapping (type=$level, key=$key): Setting field '$field' to '${orig}${fv}'"); $entry->appendTextChild($field, $orig . $fv); } } } } } } my $itype = $entry->findvalue('./ref-type/@name'); foreach my $f (uniq map {$_->nodeName()} $entry->findnodes('(./*|./titles/*|./contributors/*|./urls/web-urls/*|./dates/*)')) { # Now run any defined handler # There is no else clause here to warn on invalid fields as there are so many # in Endnote if ($dm->is_field($f)) { my $handler = _get_handler($f); &$handler($bibentry, $entry, $f, $key); } } $bibentry->set_field('entrytype', $itype); $bibentry->set_field('datatype', 'endnotexml'); $bibentries->add_entry($key, $bibentry); return; } # HANDLERS # ======== # List fields sub _list { my ($bibentry, $entry, $f) = @_; my $value = $entry->findvalue("./$f"); $bibentry->set_datafield($f, [ _norm($value) ]); return; } # literal fields sub _literal { my ($bibentry, $entry, $f) = @_; my $value = $entry->findvalue("(./$f|./titles/$f|./contributors/$f|./urls/web-urls/$f)"); $bibentry->set_datafield($f, _norm($value)); return; } # Verbatim fields sub _verbatim { my ($bibentry, $entry, $f) = @_; my $value = $entry->findvalue("(./$f|./titles/$f|./contributors/$f|./urls/web-urls/$f)"); $bibentry->set_datafield($f, _norm($value)); return; } # URI fields sub _uri { my ($bibentry, $entry, $f) = @_; my $value = _norm($entry->findvalue("(./$f|./titles/$f|./contributors/$f|./urls/web-urls/$f)")); # URL escape if it doesn't look like it already is # This is useful if we are generating URLs automatically with maps which may # contain UTF-8 from other fields unless ($value =~ /\%/) { $value = URI->new($value)->as_string; } $bibentry->set_datafield($f, $value); return; } # Range fields sub _range { my ($bibentry, $entry, $f) = @_; my $values_ref; my $value = $entry->findvalue("./$f"); my @values = split(/\s*,\s*/, _norm($value)); # Here the "-–" contains two different chars even though they might # look the same in some fonts ... # If there is a range sep, then we set the end of the range even if it's null # If no range sep, then the end of the range is undef foreach my $value (@values) { $value =~ m/\A\s*([^-–]+)([-–]*)([^-–]*)\s*\z/xms; my $end; if ($2) { $end = $3; } else { $end = undef; } push @$values_ref, [$1 || '', $end]; } $bibentry->set_datafield($f, $values_ref); return; } # Date fields sub _date { my ($bibentry, $entry, $f, $key) = @_; my $daten = $entry->findnodes("./dates/$f")->get_node(1); my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $ds = $section->get_keytods($key); # Use Endnote explicit date attributes, if present # It's not clear if Endnote actually uses these attributes if ($daten->hasAttribute('year')) { $bibentry->set_datafield('year', $daten->getAttribute('year')); if ($daten->hasAttribute('month')) { $bibentry->set_datafield('month', $daten->getAttribute('month')); } if ($daten->hasAttribute('day')) { $bibentry->set_datafield('day', $daten->getAttribute('day')); } return; } else { my $date = _norm($entry->findvalue("./dates/$f")); # We are not validating dates here, just syntax parsing my $date_re = qr/(\d{4}) # year (?:-(\d{2}))? # month (?:-(\d{2}))? # day /xms; if (my ($byear, $bmonth, $bday, $r, $eyear, $emonth, $eday) = $date =~ m|\A$date_re(/)?(?:$date_re)?\z|xms) { $bibentry->set_datafield('year', $byear) if $byear; $bibentry->set_datafield('month', $bmonth) if $bmonth; $bibentry->set_datafield('day', $bday) if $bday; $bibentry->set_datafield('endmonth', $emonth) if $emonth; $bibentry->set_datafield('endday', $eday) if $eday; if ($r and $eyear) { # normal range $bibentry->set_datafield('endyear', $eyear); } elsif ($r and not $eyear) { # open ended range - endyear is defined but empty $bibentry->set_datafield('endyear', ''); } } else { biber_warn("Datamodel: Entry '$key' ($ds): Invalid format '$date' of date field '$f' - ignoring", $bibentry); } return; } } # Name fields sub _name { my ($bibentry, $entry, $f, $key) = @_; my $names = new Biber::Entry::Names; my $useprefix = Biber::Config->getblxoption('useprefix', $bibentry->get_field('entrytype'), $key); foreach my $name ($entry->findnodes("./contributors/$f/*")) { $names->add_name(parsename($name, $f, {useprefix => $useprefix})); } $bibentry->set_datafield($f, $names); return; } sub _csv { my ($bibentry, $entry, $f) = @_; # Keywords if (my @s = $entry->findnodes("./$f/keyword")) { my $kws; foreach my $s (@s) { push @$kws, '{'._norm($s->textContent()).'}'; } $bibentry->set_datafield($f, $kws); } return; } =head2 parsename Given a name node, this function returns a Biber::Entry::Name object Returns an object which internally looks a bit like this: { firstname => 'John', firstname_i => 'J', middlename => 'Fred', middlename_i => 'F', lastname => 'Doe', lastname_i => 'D', prefix => undef, prefix_i => undef, suffix => undef, suffix_i => undef, namestring => 'Doe, John Fred', nameinitstring => 'Doe_JF', =cut sub parsename { my ($node, $fieldname, $opts) = @_; $logger->debug('Parsing Endnote XML name object ' . $node->nodePath); my $usepre = $opts->{useprefix}; my %namec; # Assume that we are using the Endnote name attrs if we find a 'last-name' attr # It's not clear if Endnote actually ever uses these even though they are in the # DTD if ($node->hasAttribute('last-name')) { foreach my $n ('last-name', 'first-name', 'suffix', 'corp-name', 'initials', 'middle-initial', 'title', 'salutation') { # If there is a name attribute for this component ... # This is all guessing as I've never seen Endnote export this if ($node->hasAttribute($n)) { my $np = $node->getAttribute($n); if ($n eq 'last-name') { $namec{last} = $np; $namec{last_i} = [_gen_initials($np)]; } elsif ($n eq 'first-name') { $namec{first} = $np; $namec{first_i} = [_gen_initials($np)]; } elsif ($n eq 'suffix') { $namec{suffix} = $np; $namec{suffix_i} = [_gen_initials($np)]; } elsif ($n eq 'corp-name') { $namec{last} = $np; $namec{last_i} = [_gen_initials($np)]; } elsif ($n eq 'initials') { $namec{first_i} = $np; } elsif ($n eq 'middle-initial') { my $mi = $np; $mi =~ s/\s*\.//g; $namec{middle} = $np; $namec{middle_i} = [ $mi ]; } elsif ($n eq 'title' or $n eq 'salutation') { $namec{first} = "$np " . $namec{first}; } } } # Only warn about lastnames since there should always be one biber_warn("Couldn't determine Lastname for name XPath: " . $node->nodePath) unless exists($namec{last}); my $namestring = ''; # lastname if (my $l = $namec{last}) { $namestring .= "$l, "; } # suffix if (my $s = $namec{suffix}) { $namestring .= "$s, "; } # firstname if (my $f = $namec{first}) { $namestring .= "$f"; } # middlename if (my $m = $namec{middle}) { $namestring .= "$m, "; } # Remove any trailing comma and space if, e.g. missing firstname $namestring =~ s/,\s+\z//xms; # Construct $nameinitstring my $nameinitstr = ''; $nameinitstr .= $namec{last} if exists($namec{last}); $nameinitstr .= '_' . join('', @{$namec{suffix_i}}) if exists($namec{suffix}); $nameinitstr .= '_' . join('', @{$namec{first_i}}) if exists($namec{first}); $nameinitstr .= '_' . join('', @{$namec{middle_i}}) if exists($namec{middle}); $nameinitstr =~ s/\s+/_/g; return Biber::Entry::Name->new( firstname => $namec{first} // undef, firstname_i => exists($namec{first}) ? $namec{first_i} : undef, middlename => $namec{middle} // undef, middlename_i => exists($namec{middle}) ? $namec{middle_i} : undef, lastname => $namec{last} // undef, lastname_i => exists($namec{last}) ? $namec{last_i} : undef, suffix => $namec{suffix} // undef, suffix_i => exists($namec{suffix}) ? $namec{suffix_i} : undef, namestring => $namestring, nameinitstring => $nameinitstr, ); } else { # parse with bibtex library because Endnote XML is rubbish my $namestr = $node->textContent(); # First sanitise the namestring due to Text::BibTeX::Name limitations on whitespace $namestr =~ s/\A\s*//xms; # leading whitespace $namestr =~ s/\s*\z//xms; # trailing whitespace $namestr =~ s/\s+/ /g; # Collapse internal whitespace my $tberr = File::Temp->new(TEMPLATE => 'biber_Text_BibTeX_STDERR_XXXXX', DIR => $Biber::MASTER->biber_tempdir); my $tberr_name = $tberr->filename; open OLDERR, '>&', \*STDERR; open STDERR, '>', $tberr_name; my $name = new Text::BibTeX::Name($namestr); open STDERR, '>&', \*OLDERR; close OLDERR; # Put any Text::BibTeX errors into the biber warnings/errors collections # We are parsing the libbtparse library error/warning strings a little here # This is not so bad as they have a clean structure (see error.c in libbtparse) open my $tbe, '<', $tberr_name; while (<$tbe>) { if (/error:/) { chomp; biber_error("BibTeX subsystem: $_"); } elsif (/warning:/) { chomp; biber_warn("BibTeX subsystem: $_"); } } close($tbe); # Formats so we can get BibTeX compatible nbsp inserted my $l_f = new Text::BibTeX::NameFormat('l', 0); my $f_f = new Text::BibTeX::NameFormat('f', 0); my $p_f = new Text::BibTeX::NameFormat('v', 0); my $s_f = new Text::BibTeX::NameFormat('j', 0); $l_f->set_options(BTN_LAST, 0, BTJ_MAYTIE, BTJ_NOTHING); $f_f->set_options(BTN_FIRST, 0, BTJ_MAYTIE, BTJ_NOTHING); $p_f->set_options(BTN_VON, 0, BTJ_MAYTIE, BTJ_NOTHING); $s_f->set_options(BTN_JR, 0, BTJ_MAYTIE, BTJ_NOTHING); # Generate name parts my $lastname = $name->format($l_f); my $firstname = $name->format($f_f); my $prefix = $name->format($p_f); my $suffix = $name->format($s_f); # Variables to hold the Text::BibTeX::NameFormat generated initials string my $gen_lastname_i; my $gen_firstname_i; my $gen_prefix_i; my $gen_suffix_i; # Use a copy of $name so that when we generate the # initials, we do so without certain things. This is easier than trying # hack robust initials code into btparse ... my $nd_namestr = strip_noinit($namestr); my $nd_name = new Text::BibTeX::Name($nd_namestr, $fieldname); # Initials formats my $li_f = new Text::BibTeX::NameFormat('l', 1); my $fi_f = new Text::BibTeX::NameFormat('f', 1); my $pi_f = new Text::BibTeX::NameFormat('v', 1); my $si_f = new Text::BibTeX::NameFormat('j', 1); # Initials generated with forced tie so we can make an array $li_f->set_text(BTN_LAST, undef, undef, undef, ''); $fi_f->set_text(BTN_FIRST, undef, undef, undef, ''); $pi_f->set_text(BTN_VON, undef, undef, undef, ''); $si_f->set_text(BTN_JR, undef, undef, undef, ''); $li_f->set_options(BTN_LAST, 1, BTJ_FORCETIE, BTJ_NOTHING); $fi_f->set_options(BTN_FIRST, 1, BTJ_FORCETIE, BTJ_NOTHING); $pi_f->set_options(BTN_VON, 1, BTJ_FORCETIE, BTJ_NOTHING); $si_f->set_options(BTN_JR, 1, BTJ_FORCETIE, BTJ_NOTHING); $gen_lastname_i = inits($nd_name->format($li_f)); $gen_firstname_i = inits($nd_name->format($fi_f)); $gen_prefix_i = inits($nd_name->format($pi_f)); $gen_suffix_i = inits($nd_name->format($si_f)); my $namestring = ''; # prefix my $ps; my $prefix_stripped; my $prefix_i; if ($prefix) { $prefix_i = $gen_prefix_i; $namestring .= "$prefix "; } # lastname my $ls; my $lastname_stripped; my $lastname_i; if ($lastname) { $lastname_i = $gen_lastname_i; $namestring .= "$lastname, "; } # suffix my $ss; my $suffix_stripped; my $suffix_i; if ($suffix) { $suffix_i = $gen_suffix_i; $namestring .= "$suffix, "; } # firstname my $fs; my $firstname_stripped; my $firstname_i; if ($firstname) { $firstname_i = $gen_firstname_i; $namestring .= "$firstname"; } # Remove any trailing comma and space if, e.g. missing firstname # Replace any nbspes $namestring =~ s/,\s+\z//xms; $namestring =~ s/~/ /gxms; # Construct $nameinitstring my $nameinitstr = ''; $nameinitstr .= join('', @$prefix_i) . '_' if ( $usepre and $prefix ); $nameinitstr .= $lastname if $lastname; $nameinitstr .= '_' . join('', @$suffix_i) if $suffix; $nameinitstr .= '_' . join('', @$firstname_i) if $firstname; $nameinitstr =~ s/\s+/_/g; $nameinitstr =~ s/~/_/g; # The "strip" entry tells us which of the name parts had outer braces # stripped during processing so we can add them back when printing the # .bbl so as to maintain maximum BibTeX compatibility return Biber::Entry::Name->new( firstname => $firstname eq '' ? undef : $firstname, firstname_i => $firstname eq '' ? undef : $firstname_i, lastname => $lastname eq '' ? undef : $lastname, lastname_i => $lastname eq '' ? undef : $lastname_i, prefix => $prefix eq '' ? undef : $prefix, prefix_i => $prefix eq '' ? undef : $prefix_i, suffix => $suffix eq '' ? undef : $suffix, suffix_i => $suffix eq '' ? undef : $suffix_i, namestring => $namestring, nameinitstring => $nameinitstr ); } } # Passed an array ref of strings, returns an array ref of initials sub _gen_initials { my @strings = @_; my @strings_out; foreach my $str (@strings) { # Deal with hyphenated name parts and normalise to a '-' character for easy # replacement with macro later if ($str =~ m/\p{Dash}/) { push @strings_out, join('-', _gen_initials(split(/\p{Dash}/, $str))); } else { my $chr = Unicode::GCString->new($str)->substr(0, 1)->as_string; # Keep diacritics with their following characters if ($chr =~ m/\p{Dia}/) { push @strings_out, Unicode::GCString->new($str)->substr(0, 2)->as_string; } else { push @strings_out, $chr; } } } return @strings_out; } # Syntactically get the leaf node of a node path sub _leaf_node { my $node_path = shift; return $node_path =~ s|.+/([^/]+$)|$1|r; } # Do some sanitising since this can't be nicely done by the parser sub _norm { my $t = shift; return undef unless $t; $t =~ s/\A[\n\s]+//xms; $t =~ s/[\n\s]+\z//xms; return $t; } sub _get_handler { my $field = shift; if (my $h = $handlers->{CUSTOM}{$field}) { return $h; } else { return $handlers->{$dm->get_fieldtype($field)}{$dm->get_fieldformat($field) || 'default'}{$dm->get_datatype($field)}; } } 1; __END__ =pod =encoding utf-8 =head1 NAME Biber::Input::file::endnotexml - look in a Zotero RDFXML file for an entry and create it if found =head1 DESCRIPTION Provides the extract_entries() method to get entries from a biblatexml data source and instantiate Biber::Entry objects for what it finds =head1 AUTHOR François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Input/file/bibtex.pm000444000000000000 13315412230324177 21163 0ustar00rootroot000000000000package Biber::Input::file::bibtex; use v5.16; use strict; use warnings; use sigtrap qw(handler TBSIG SEGV); use base 'Exporter'; use Carp; use Text::BibTeX qw(:nameparts :joinmethods :metatypes); use Text::BibTeX::Name; use Text::BibTeX::NameFormat; use Biber::Constants; use Biber::DataModel; use Biber::Entries; use Biber::Entry; use Biber::Entry::Names; use Biber::Entry::Name; use Biber::Sections; use Biber::Section; use Biber::Utils; use Biber::Config; use Encode; use File::Spec; use File::Slurp; use File::Temp; use Log::Log4perl qw(:no_extra_logdie_message); use List::AllUtils qw( :all ); use URI; use Unicode::Normalize; use Unicode::GCString; use XML::LibXML::Simple; my $logger = Log::Log4perl::get_logger('main'); state $cache; # state variable so it's persistent across calls to extract_entries() use vars qw($cache); =head2 init_cache Invalidate the T::B object cache. Used only in tests when e.g. we change the encoding settings and therefore must force a re-read of the data =cut sub init_cache { $cache = {}; } # Determine handlers from data model my $dm = Biber::Config->get_dm; my $handlers = { 'field' => { 'default' => { 'csv' => \&_verbatim, 'code' => \&_literal, 'date' => \&_date, 'datepart' => \&_literal, 'entrykey' => \&_literal, 'integer' => \&_literal, 'key' => \&_literal, 'literal' => \&_literal, 'range' => \&_range, 'verbatim' => \&_verbatim, 'uri' => \&_uri }, 'csv' => { 'entrykey' => \&_csv, 'keyword' => \&_csv, 'option' => \&_csv, } }, 'list' => { 'default' => { 'key' => \&_list, 'literal' => \&_list, 'name' => \&_name } } }; =head2 TBSIG Signal handler to catch fatal Text::BibTex SEGFAULTS. It has bugs and we want to say at least something if it coredumps =cut sub TBSIG { my $sig = shift; $logger->logdie("Caught signal: $sig\nLikely your .bib has a very bad entry which causes libbtparse to crash: $!"); } =head2 extract_entries Main data extraction routine. Accepts a data source identifier, preprocesses the file and then looks for the passed keys, creating entries when it finds them and passes out an array of keys it didn't find. =cut sub extract_entries { my ($source, $keys) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $filename; my @rkeys = @$keys; my $tf; # Up here so that the temp file has enough scope to survive until we've used it $logger->trace("Entering extract_entries() in driver 'bibtex'"); # Get a reference to the correct sourcemap sections, if they exist my $smaps = []; # Maps are applied in order USER->STYLE->DRIVER if (defined(Biber::Config->getoption('sourcemap'))) { # User maps if (my $m = first {$_->{datatype} eq 'bibtex' and $_->{level} eq 'user' } @{Biber::Config->getoption('sourcemap')} ) { push @$smaps, $m; } # Style maps if (my $m = first {$_->{datatype} eq 'bibtex' and $_->{level} eq 'style' } @{Biber::Config->getoption('sourcemap')} ) { push @$smaps, $m; } # Driver default maps if (my $m = first {$_->{datatype} eq 'bibtex' and $_->{level} eq 'driver'} @{Biber::Config->getoption('sourcemap')} ) { push @$smaps, $m; } } # If it's a remote data file, fetch it first if ($source =~ m/\A(?:http|ftp)(s?):\/\//xms) { $logger->info("Data source '$source' is a remote BibTeX data source - fetching ..."); if ($1) { # HTTPS # use IO::Socket::SSL qw(debug99); # useful for debugging SSL issues # We have to explicitly set the cert path because otherwise the https module # can't find the .pem when PAR::Packer'ed # Have to explicitly try to require Mozilla::CA here to get it into %INC below # It may, however, have been removed by some biber unpacked dists if (not exists($ENV{PERL_LWP_SSL_CA_FILE}) and not exists($ENV{PERL_LWP_SSL_CA_PATH}) and not defined(Biber::Config->getoption('ssl-nointernalca')) and eval {require Mozilla::CA}) { # we assume that the default CA file is in .../Mozilla/CA/cacert.pem (my $vol, my $dir, undef) = File::Spec->splitpath( $INC{"Mozilla/CA.pm"} ); $dir =~ s/\/$//; # splitpath sometimes leaves a trailing '/' $ENV{PERL_LWP_SSL_CA_FILE} = File::Spec->catpath($vol, "$dir/CA", 'cacert.pem'); } # fallbacks for, e.g., linux unless (exists($ENV{PERL_LWP_SSL_CA_FILE})) { foreach my $ca_bundle (qw{ /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt /etc/ssl/ca-bundle.pem }) { next if ! -e $ca_bundle; $ENV{PERL_LWP_SSL_CA_FILE} = $ca_bundle; last; } foreach my $ca_path (qw{ /etc/ssl/certs/ /etc/pki/tls/ }) { next if ! -d $ca_path; $ENV{PERL_LWP_SSL_CA_PATH} = $ca_path; last; } } if (defined(Biber::Config->getoption('ssl-noverify-host'))) { $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; } require LWP::Protocol::https; } require LWP::Simple; $tf = File::Temp->new(TEMPLATE => 'biber_remote_data_source_XXXXX', DIR => $Biber::MASTER->biber_tempdir, SUFFIX => '.bib'); unless (LWP::Simple::is_success(LWP::Simple::getstore($source, $tf->filename))) { biber_error("Could not fetch '$source'"); } $filename = $tf->filename; } else { # Need to get the filename even if using cache so we increment # the filename count for preambles at the bottom of this sub unless ($filename = locate_biber_file($source)) { biber_error("Cannot find '$source'!") } } # Text::BibTeX can't be controlled by Log4perl so we have to do something clumsy # We can't redirect STDERR to a variable as libbtparse doesnt' use PerlIO, just stdio # so it doesn't understand this. It does understand normal file redirection though as # that's standard stdio. # The Log4Perl setup outputs only to STDOUT so redirecting all STDERR like this is # ok since only libbtparse will be writing there my $tberr = File::Temp->new(TEMPLATE => 'biber_Text_BibTeX_STDERR_XXXXX', DIR => $Biber::MASTER->biber_tempdir); my $tberr_name = $tberr->filename; open OLDERR, '>&', \*STDERR; open STDERR, '>', $tberr_name; # Increment the number of times each datafile has been referenced # For example, a datafile might be referenced in more than one section. # Some things find this information useful, for example, setting preambles is global # and so we need to know if we've already saved the preamble for a datafile. $cache->{counts}{$filename}++; # Don't read the file again if it's already cached unless ($cache->{data}{$filename}) { $logger->debug("Caching data for BibTeX format file '$filename' for section $secnum"); cache_data($filename); } else { $logger->debug("Using cached data for BibTeX format file '$filename' for section $secnum"); } if ($section->is_allkeys) { $logger->debug("All cached citekeys will be used for section '$secnum'"); # Loop over all entries, creating objects while (my ($key, $entry) = each %{$cache->{data}{$filename}}) { # Record a key->datasource name mapping for error reporting $section->set_keytods($key, $filename); unless (create_entry($key, $entry, $source, $smaps)) { # if create entry returns false, remove the key from the cache @{$cache->{orig_key_order}{$filename}} = grep {$key ne $_} @{$cache->{orig_key_order}{$filename}}; } } # Loop over all aliases, creating data in section object # Since this is allkeys, we are guaranteed that the real entry for the alias # will be available while (my ($alias, $key) = each %{$cache->{data}{citekey_aliases}}) { $section->set_citekey_alias($alias, $key); $logger->debug("Citekey '$alias' is an alias for citekey '$key'"); } # If allkeys, push all bibdata keys into citekeys (if they are not already there). # We are using the special "orig_key_order" array which is used to deal with the # situation when sorting=none and allkeys is set. We need an array rather than the # keys from the bibentries hash because we need to preserve the original order of # the .bib as in this case the sorting sub "citeorder" means "bib order" as there are # no explicitly cited keys $section->add_citekeys(@{$cache->{orig_key_order}{$filename}}); $logger->debug("Added all citekeys to section '$secnum': " . join(', ', $section->get_citekeys)); } else { # loop over all keys we're looking for and create objects $logger->debug('Text::BibTeX cache keys: ' . join(', ', keys %{$cache->{data}{$filename}})); $logger->debug('Wanted keys: ' . join(', ', @$keys)); foreach my $wanted_key (@$keys) { $logger->debug("Looking for key '$wanted_key' in Text::BibTeX cache"); # Record a key->datasource name mapping for error reporting $section->set_keytods($wanted_key, $filename); if (my $entry = $cache->{data}{$filename}{$wanted_key}) { $logger->debug("Found key '$wanted_key' in Text::BibTeX cache"); # Skip creation if it's already been done, for example, via a citekey alias unless ($section->bibentries->entry_exists($wanted_key)) { create_entry($wanted_key, $entry, $source, $smaps); } # found a key, remove it from the list of keys we want @rkeys = grep {$wanted_key ne $_} @rkeys; } elsif (my $rk = $cache->{data}{citekey_aliases}{$wanted_key}) { $logger->debug("Citekey '${wanted_key}' is an alias for citekey '$rk'"); $section->set_citekey_alias($wanted_key, $rk); # Make sure there is a real, cited entry for the citekey alias # just in case only the alias is cited unless ($section->bibentries->entry_exists($rk)) { if (my $entry = $cache->{data}{$filename}{$rk}) { create_entry($rk, $entry, $source, $smaps); $section->add_citekeys($rk); } } # found an alias key, remove it from the list of keys we want @rkeys = grep {$wanted_key ne $_} @rkeys; } elsif (my $okey = $section->has_badcasekey($wanted_key)) { biber_warn("Possible typo (case mismatch) between citation and datasource keys: '$wanted_key' and '$okey' in file '$filename'"); } $logger->debug('Wanted keys now: ' . join(', ', @rkeys)); } } open STDERR, '>&', \*OLDERR; close OLDERR; # Put any Text::BibTeX errors into the biber warnings/errors collections # We are parsing the libbtparse library error/warning strings a little here # This is not so bad as they have a clean structure (see error.c in libbtparse) open my $tbe, '<', $tberr_name; while (<$tbe>) { if (/error:/) { chomp; biber_error("BibTeX subsystem: $_"); } elsif (/warning:/) { chomp; biber_warn("BibTeX subsystem: $_"); } } close($tbe); # Only push the preambles from the file if we haven't seen this data file before # and there are some preambles to push if ($cache->{counts}{$filename} < 2 and @{$cache->{preamble}{$filename}}) { push @{$Biber::MASTER->{preamble}}, @{$cache->{preamble}{$filename}}; } return @rkeys; } =head2 create_entry Create a Biber::Entry object from a Text::BibTeX object =cut sub create_entry { my ($key, $entry, $source, $smaps) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $bibentries = $section->bibentries; my $bibentry = new Biber::Entry; $bibentry->set_field('citekey', $key); my $ds = $section->get_keytods($key); if ( $entry->metatype == BTE_REGULAR ) { # Save pre-mapping data. Might be useful somewhere $bibentry->set_field('rawdata', biber_decode_utf8($entry->print_s)); # Datasource mapping applied in $smap order (USER->STYLE->DRIVER) foreach my $smap (@$smaps) { my $level = $smap->{level}; $smap->{map_overwrite} = $smap->{map_overwrite} // 0; # default MAP: foreach my $map (@{$smap->{map}}) { my $last_type = $entry->type; # defaults to the entrytype unless changed below my $last_field = undef; my $last_fieldval = undef; my @imatches; # For persising parenthetical matches over several steps # Check pertype restrictions unless (not exists($map->{per_type}) or first {lc($_->{content}) eq $entry->type} @{$map->{per_type}}) { next; } # Check per_datasource restrictions # Don't compare case insensitively - this might not be correct unless (not exists($map->{per_datasource}) or first {$_->{content} eq $source} @{$map->{per_datasource}}) { next; } # loop over mapping steps foreach my $step (@{$map->{map_step}}) { # entry deletion. Really only useful with allkeys or tool mode if ($step->{map_entry_null}) { $logger->debug("Source mapping (type=$level, key=$key): Ignoring entry completely"); return 0; # don't create an entry at all } # Entrytype map if (my $source = $step->{map_type_source}) { unless ($entry->type eq lc($source)) { # Skip the rest of the map if this step doesn't match and match is final if ($step->{map_final}) { $logger->debug("Source mapping (type=$level, key=$key): Entry type is '" . $entry->type . "' but map wants '" . lc($source) . "' and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): Entry type is '" . $entry->type . "' but map wants '" . lc($source) . "', skipping step ..."); next; } } # Change entrytype if requested $last_type = $entry->type; $logger->debug("Source mapping (type=$level, key=$key): Changing entry type from '$last_type' to " . lc($step->{map_type_target})); $entry->set_type(lc($step->{map_type_target})); } # Field map if (my $source = $step->{map_field_source}) { # key is a psudo-field. It's guaranteed to exist so # just check if that's what's being asked for unless (lc($source) eq 'entrykey' or $entry->exists(lc($source))) { # Skip the rest of the map if this step doesn't match and match is final if ($step->{map_final}) { $logger->debug("Source mapping (type=$level, key=$key): No field '" . lc($source) . "' and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): No field '" . lc($source) . "', skipping step ..."); next; } } $last_field = $source; $last_fieldval = lc($source) eq 'entrykey' ? biber_decode_utf8($entry->key) : biber_decode_utf8($entry->get(lc($source))); my $negmatch = 0; # Negated matches are a normal match with a special flag if (my $nm = $step->{map_notmatch}) { $step->{map_match} = $nm; $negmatch = 1; } # map fields to targets if (my $m = $step->{map_match}) { if (defined($step->{map_replace})) { # replace can be null # Can't modify entrykey if (lc($source) eq 'entrykey') { $logger->debug("Source mapping (type=$level, key=$key): Field '" . lc($source) . "' is 'entrykey'- cannot remap the value of this field, skipping ..."); next; } my $r = $step->{map_replace}; $logger->debug("Source mapping (type=$level, key=$key): Doing match/replace '$m' -> '$r' on field '" . lc($source) . "'"); $entry->set(lc($source), ireplace($last_fieldval, $m, $r)); } else { unless (@imatches = imatch($last_fieldval, $m, $negmatch)) { # Skip the rest of the map if this step doesn't match and match is final if ($step->{map_final}) { $logger->debug("Source mapping (type=$level, key=$key): Field '" . lc($source) . "' does not match '$m' and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): Field '" . lc($source) . "' does not match '$m', skipping step ..."); next; } } } } # Set to a different target if there is one if (my $target = $step->{map_field_target}) { # Can't remap entry key pseudo-field if (lc($source) eq 'entrykey') { $logger->debug("Source mapping (type=$level, key=$key): Field '$source' is 'entrykey'- cannot map this to a new field as you must have an entrykey, skipping ..."); next; } if ($entry->exists(lc($target))) { if ($map->{map_overwrite} // $smap->{map_overwrite}) { $logger->debug("Source mapping (type=$level, key=$key): Overwriting existing field '$target'"); } else { $logger->debug("Source mapping (type=$level, key=$key): Field '$source' is aliased to field '$target' but both are defined, skipping ..."); next; } } $entry->set(lc($target), biber_decode_utf8($entry->get(lc($source)))); $entry->delete(lc($source)); } } # field changes if (my $field = $step->{map_field_set}) { # Deal with special tokens if ($step->{map_null}) { $logger->debug("Source mapping (type=$level, key=$key): Deleting field '$field'"); $entry->delete(lc($field)); } else { if ($entry->exists(lc($field))) { unless ($map->{map_overwrite} // $smap->{map_overwrite}) { if ($step->{map_final}) { # map_final is set, ignore and skip rest of step $logger->debug("Source mapping (type=$level, key=$key): Field '" . lc($field) . "' exists, overwrite is not set and step has 'final' set, skipping rest of map ..."); next MAP; } else { # just ignore this step $logger->debug("Source mapping (type=$level, key=$key): Field '" . lc($field) . "' exists and overwrite is not set, skipping step ..."); next; } } } # If append is set, keep the original value and append the new my $orig = $step->{map_append} ? biber_decode_utf8($entry->get(lc($field))) : ''; if ($step->{map_origentrytype}) { next unless $last_type; $logger->debug("Source mapping (type=$level, key=$key): Setting field '" . lc($field) . "' to '${orig}${last_type}'"); $entry->set(lc($field), $orig . $last_type); } elsif ($step->{map_origfieldval}) { next unless $last_fieldval; $logger->debug("Source mapping (type=$level, key=$key): Setting field '" . lc($field) . "' to '${orig}${last_fieldval}'"); $entry->set(lc($field), $orig . $last_fieldval); } elsif ($step->{map_origfield}) { next unless $last_field; $logger->debug("Source mapping (type=$level, key=$key): Setting field '" . lc($field) . "' to '${orig}${last_field}'"); $entry->set(lc($field), $orig . $last_field); } else { my $fv = $step->{map_field_value}; # Now re-instate any unescaped $1 .. $9 to get round these being # dynamically scoped and being null when we get here from any # previous map_match $fv =~ s/(?debug("Source mapping (type=$level, key=$key): Setting field '" . lc($field) . "' to '${orig}${fv}'"); $entry->set(lc($field), $orig . $fv); } } } } } } my $entrytype = biber_decode_utf8($entry->type); # We put all the fields we find modulo field aliases into the object # validation happens later and is not datasource dependent foreach my $f ($entry->fieldlist) { # In tool mode, keep the raw data fields if (Biber::Config->getoption('tool')) { $bibentry->set_rawfield($f, biber_decode_utf8($entry->get($f))); } # We have to process local options as early as possible in order # to make them available for things that need them like parsename() if ($f eq 'options') { my $value = biber_decode_utf8($entry->get($f)); process_entry_options($key, [ split(/\s*,\s*/, $value) ]); # Save the raw options in case we are to output another input format like # biblatexml $bibentry->set_field('rawoptions', $value); } # Now run any defined handler if ($dm->is_field($f)) { my $handler = _get_handler($f); &$handler($bibentry, $entry, $f, $key); } elsif (Biber::Config->getoption('validate_datamodel')) { biber_warn("Datamodel: Entry '$key' ($ds): Field '$f' invalid in data model - ignoring", $bibentry); } } $bibentry->set_field('entrytype', $entrytype); $bibentry->set_field('datatype', 'bibtex'); $bibentries->add_entry($key, $bibentry); } return 1; } # HANDLERS # ======== my $S = Biber::Config->getoption('mssplit'); my $fl_re = qr/\A([^$S]+)$S?(original|translated|romanised|uniform)?$S?(.+)?\z/; # Literal fields sub _literal { my ($bibentry, $entry, $f) = @_; my $value = biber_decode_utf8($entry->get($f)); my ($field, $form, $lang) = $f =~ m/$fl_re/xms; # If we have already split some date fields into literal fields # like date -> year/month/day, don't overwrite them with explicit # year/month return if ($f eq 'year' and $bibentry->get_datafield('year')); return if ($f eq 'month' and $bibentry->get_datafield('month')); # Try to sanitise months to biblatex requirements if ($f eq 'month') { $bibentry->set_datafield($field, _hack_month($value), $form, $lang); } else { $bibentry->set_datafield($field, $value, $form, $lang); } return; } # URI fields sub _uri { my ($bibentry, $entry, $f) = @_; my $value = NFC(decode_utf8($entry->get($f)));# Unicode NFC boundary (before hex encoding) my ($field, $form, $lang) = $f =~ m/$fl_re/xms; # If there are some escapes in the URI, unescape them if ($value =~ /\%/) { $value =~ s/\\%/%/g; # just in case someone BibTeX escaped the "%" # This is what uri_unescape() does but it's faster $value =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; $value = NFC(decode_utf8($value));# Unicode NFC boundary (before hex encoding) } $value = URI->new($value)->as_string; $bibentry->set_datafield($field, $value, $form, $lang); return; } # CSV field form sub _csv { my ($bibentry, $entry, $f) = @_; $bibentry->set_datafield($f, [ split(/\s*,\s*/, biber_decode_utf8($entry->get($f))) ]); return; } # Verbatim fields sub _verbatim { my ($bibentry, $entry, $f) = @_; my $value = biber_decode_utf8($entry->get($f)); my ($field, $form, $lang) = $f =~ m/$fl_re/xms; $bibentry->set_datafield($field, $value, $form, $lang); return; } # Range fields sub _range { my ($bibentry, $entry, $f) = @_; my $values_ref; my $value = biber_decode_utf8($entry->get($f)); my ($field, $form, $lang) = $f =~ m/$fl_re/xms; my @values = split(/\s*[;,]\s*/, $value); # Here the "-–" contains two different chars even though they might # look the same in some fonts ... # If there is a range sep, then we set the end of the range even if it's null # If no range sep, then the end of the range is undef foreach my $value (@values) { $value =~ m/\A\s*([^\p{Pd}]+)\s*\z/xms ||# Simple value without range $value =~ m/\A\s*(\{[^\}]+\}|[^\p{Pd} ]+)\s*([\p{Pd}]+)\s*(\{[^\}]+\}|[^\p{Pd}]*)\s*\z/xms; my $start = $1; my $end; if ($2) { $end = $3; } else { $end = undef; } $start =~ s/\A\{([^\}]+)\}\z/$1/; $end =~ s/\A\{([^\}]+)\}\z/$1/; push @$values_ref, [$start || '', $end]; } $bibentry->set_datafield($field, $values_ref, $form, $lang); return; } # Names sub _name { my ($bibentry, $entry, $f, $key) = @_; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $value = biber_decode_utf8($entry->get($f)); my ($field, $form, $lang) = $f =~ m/$fl_re/xms; my @tmp = Text::BibTeX::split_list($value, Biber::Config->getoption('namesep')); my $useprefix = Biber::Config->getblxoption('useprefix', $bibentry->get_field('entrytype'), $key); my $names = new Biber::Entry::Names; foreach my $name (@tmp) { # Consecutive "and" causes Text::BibTeX::Name to segfault unless ($name) { biber_warn("Name in key '$key' is empty (probably consecutive 'and'): skipping name", $bibentry); $section->del_citekey($key); next; } $name = biber_decode_utf8($name); # Check for malformed names in names which aren't completely escaped # Too many commas unless ($name =~ m/\A{\X+}\z/xms) { # Ignore these tests for escaped names my @commas = $name =~ m/,/g; if ($#commas > 1) { biber_warn("Name \"$name\" has too many commas: skipping name", $bibentry); $section->del_citekey($key); next; } # Consecutive commas cause Text::BibTeX::Name to segfault if ($name =~ /,,/) { biber_warn("Name \"$name\" is malformed (consecutive commas): skipping name", $bibentry); $section->del_citekey($key); next; } } # Skip names that don't parse for some reason (like no lastname found - see parsename()) next unless my $no = parsename($name, $f, {useprefix => $useprefix}); # Deal with implied "et al" in data source if (lc($no->get_namestring) eq Biber::Config->getoption('others_string')) { $names->set_morenames; } else { $names->add_name($no); } } $bibentry->set_datafield($field, $names, $form, $lang); return; } # Dates # Date fields can't have script forms - they are just a(n ISO) standard format sub _date { my ($bibentry, $entry, $f, $key) = @_; my $datetype = $f =~ s/date\z//xmsr; my $date = biber_decode_utf8($entry->get($f)); my ($field, $form, $lang) = $f =~ m/$fl_re/xms; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); my $ds = $section->get_keytods($key); if (my ($byear, $bmonth, $bday, $r, $eyear, $emonth, $eday) = parse_date($date)) { # Did this entry get its year/month fields from splitting an ISO8601 date field? # We only need to know this for date, year/month as year/month can also # be explicitly set. This is useful to know in various places. $bibentry->set_field('datesplit', 1) if $datetype eq ''; # Some warnings for overwriting YEAR and MONTH from DATE if ($byear and ($datetype . 'year' eq 'year') and $entry->get('year')) { biber_warn("Overwriting field 'year' with year value from field 'date' for entry '$key'", $bibentry); } if ($bmonth and ($datetype . 'month' eq 'month') and $entry->get('month')) { biber_warn("Overwriting field 'month' with month value from field 'date' for entry '$key'", $bibentry); } $bibentry->set_datafield($datetype . 'year', $byear) if $byear; $bibentry->set_datafield($datetype . 'month', $bmonth) if $bmonth; $bibentry->set_datafield($datetype . 'day', $bday) if $bday; $bibentry->set_datafield($datetype . 'endmonth', $emonth) if $emonth; $bibentry->set_datafield($datetype . 'endday', $eday) if $eday; if ($r and $eyear) { # normal range $bibentry->set_datafield($datetype . 'endyear', $eyear); } elsif ($r and not $eyear) { # open ended range - endyear is defined but empty $bibentry->set_datafield($datetype . 'endyear', ''); } } else { biber_warn("Datamodel: Entry '$key' ($ds): Invalid format '$date' of date field '$f' - ignoring", $bibentry); } return; } # Bibtex list fields with listsep separator sub _list { my ($bibentry, $entry, $f) = @_; my $value = biber_decode_utf8($entry->get($f)); my ($field, $form, $lang) = $f =~ m/$fl_re/xms; my @tmp = Text::BibTeX::split_list($value, Biber::Config->getoption('listsep')); @tmp = map { biber_decode_utf8($_) } @tmp; @tmp = map { remove_outer($_) } @tmp; $bibentry->set_datafield($field, [ @tmp ], $form, $lang); return; } =head2 cache_data Caches file data into T::B objects indexed by the original datasource key, decoded into UTF8 =cut sub cache_data { my $filename = shift; my $secnum = $Biber::MASTER->get_current_section; my $section = $Biber::MASTER->sections->get_section($secnum); # Initialise this $cache->{preamble}{$filename} = []; # Convert/decode file my $pfilename = preprocess_file($filename); my $bib = Text::BibTeX::File->new( $pfilename, '<' ) or biber_error("Cannot create Text::BibTeX::File object from $pfilename: $!"); # Log that we found a data file $logger->info("Found BibTeX data source '$filename'"); while ( my $entry = new Text::BibTeX::Entry $bib ) { if ( $entry->metatype == BTE_PREAMBLE ) { push @{$cache->{preamble}{$filename}}, biber_decode_utf8($entry->value); next; } # Ignore misc BibTeX entry types we don't care about next if ( $entry->metatype == BTE_MACRODEF or $entry->metatype == BTE_UNKNOWN or $entry->metatype == BTE_COMMENT ); # If an entry has no key, ignore it and warn unless ($entry->key) { biber_warn("Invalid or undefined BibTeX entry key in file '$pfilename', skipping ..."); next; } # Text::BibTeX >= 0.46 passes through all citekey bits, thus allowing utf8 keys my $key = biber_decode_utf8($entry->key); # Check if this key has already been registered as a citekey alias, if # so, the key takes priority and we delete the alias if (exists($cache->{data}{citekey_aliases}{$key})) { biber_warn("Citekey alias '$key' is also a real entry key, skipping ..."); delete($cache->{data}{citekey_aliases}{$key}); } # Any secondary keys? # We can't do this with a driver entry for the IDS field as this needs # an entry object creating first and the whole point of aliases is that # there is no entry object if (my $ids = biber_decode_utf8($entry->get('ids'))) { foreach my $id (split(/\s*,\s*/, $ids)) { # Skip aliases which are also real entry keys if ($section->has_everykey($id)) { biber_warn("Citekey alias '$id' is also a real entry key, skipping ..."); next; } # Warn on conflicting aliases if (exists($cache->{data}{citekey_aliases}{$id})) { my $otherid = $cache->{data}{citekey_aliases}{$id}; if ($otherid ne $key) { biber_warn("Citekey alias '$id' already has an alias '$otherid', skipping ..."); } } else { $cache->{data}{citekey_aliases}{$id} = $key; $logger->debug("Citekey '$id' is an alias for citekey '$key'"); } } } # If we've already seen a case variant, warn # This is case mismatch test of datasource entries with other datasource entries if (my $okey = $section->has_badcasekey($key)) { biber_warn("Possible typo (case mismatch) between datasource keys: '$key' and '$okey' in file '$filename'"); } # If we've already seen this key in a datasource, ignore it and warn if ($section->has_everykey($key)) { biber_warn("Duplicate entry key: '$key' in file '$filename', skipping ..."); next; } else { $section->add_everykey($key); } # Bad entry unless ($entry->parse_ok) { biber_warn("Entry $key does not parse correctly"); next; } # Cache the entry so we don't have to read the file again on next pass. # Two reasons - So we avoid T::B macro redef warnings and speed $cache->{data}{$filename}{$key} = $entry; # We do this as otherwise we have no way of determining the origing .bib entry order # We need this in order to do sorting=none + allkeys because in this case, there is no # "citeorder" because nothing is explicitly cited and so "citeorder" means .bib order push @{$cache->{orig_key_order}{$filename}}, $key; $logger->debug("Cached Text::BibTeX entry for key '$key' from BibTeX file '$filename'"); } $bib->close; # If we don't do this, we can't unlink the temp file on Windows return; } =head2 preprocess_file Convert file to UTF-8 and potentially decode LaTeX macros to UTF-8 =cut sub preprocess_file { my $filename = shift; # Put the utf8 encoded file into the global biber tempdir # We have to do this in case we can't write to the location of the # .bib file my $td = $Biber::MASTER->biber_tempdir; (undef, undef, my $fn) = File::Spec->splitpath($filename); my $ufilename = File::Spec->catfile($td->dirname, "${fn}_$$.utf8"); # We read the file in the bib encoding and then output to UTF-8, even if it was already UTF-8, # just in case there was a BOM so we can delete it as it makes T::B complain # Don't use File::Slurp binmode option - it's completely broken - see module RT queue my $buf = File::Slurp::read_file($filename) or biber_error("Can't read $filename"); $buf = NFD(decode(Biber::Config->getoption('input_encoding'), $buf));# Unicode NFD boundary # strip UTF-8 BOM if it exists - this just makes T::B complain about junk characters $buf =~ s/\A\x{feff}//; File::Slurp::write_file($ufilename, NFC(encode('UTF-8', $buf))) or biber_error("Can't write $ufilename");# Unicode NFC boundary # Decode LaTeX to UTF8 if output is UTF-8 if (Biber::Config->getoption('output_encoding') eq 'UTF-8') { my $buf = File::Slurp::read_file($ufilename) or biber_error("Can't read $ufilename"); $buf = NFD(decode('UTF-8', $buf));# Unicode NFD boundary $logger->info('Decoding LaTeX character macros into UTF-8'); $logger->trace("Buffer before decoding -> '$buf'"); $buf = Biber::LaTeX::Recode::latex_decode($buf, strip_outer_braces => 1); $logger->trace("Buffer after decoding -> '$buf'"); File::Slurp::write_file($ufilename, NFC(encode('UTF-8', $buf))) or biber_error("Can't write $ufilename");# Unicode NFC boundary } return $ufilename; } =head2 parsename Given a name string, this function returns a Biber::Entry::Name object with all parts of the name resolved according to the BibTeX conventions. parsename('John Doe') returns an object which internally looks a bit like this: { firstname => 'John', firstname_i => ['J'], lastname => 'Doe', lastname_i => ['D'], prefix => undef, prefix_i => undef, suffix => undef, suffix_i => undef, namestring => 'Doe, John', nameinitstring => 'Doe_J', strip => {'firstname' => 0, 'lastname' => 0, 'prefix' => 0, 'suffix' => 0} } =cut sub parsename { my ($namestr, $fieldname, $opts, $testing) = @_; $logger->debug("Parsing namestring '$namestr'"); my $usepre = $opts->{useprefix}; # First sanitise the namestring due to Text::BibTeX::Name limitations on whitespace $namestr =~ s/\A\s*//xms; # leading whitespace $namestr =~ s/\s*\z//xms; # trailing whitespace $namestr =~ s/\s+/ /g; # Collapse internal whitespace # If requested, try to correct broken initials with no space between them. # This can slightly mess up some other names like {{U.K. Government}} etc. # btparse can't do this so we do it before name parsing $namestr =~ s/(\w)\.(\w)/$1. $2/g if Biber::Config->getoption('fixinits'); my $name = new Text::BibTeX::Name($namestr); # Formats so we can get BibTeX compatible nbsp inserted my $l_f = new Text::BibTeX::NameFormat('l', 0); my $f_f = new Text::BibTeX::NameFormat('f', 0); my $p_f = new Text::BibTeX::NameFormat('v', 0); my $s_f = new Text::BibTeX::NameFormat('j', 0); $l_f->set_options(BTN_LAST, 0, BTJ_MAYTIE, BTJ_NOTHING); $f_f->set_options(BTN_FIRST, 0, BTJ_MAYTIE, BTJ_NOTHING); $p_f->set_options(BTN_VON, 0, BTJ_MAYTIE, BTJ_NOTHING); $s_f->set_options(BTN_JR, 0, BTJ_MAYTIE, BTJ_NOTHING); # Generate name parts my $lastname = biber_decode_utf8($name->format($l_f)); my $firstname = biber_decode_utf8($name->format($f_f)); my $prefix = biber_decode_utf8($name->format($p_f)); my $suffix = biber_decode_utf8($name->format($s_f)); # Skip the name if we can't determine last name - otherwise many other things will # fail later unless ($lastname) { biber_warn("Couldn't determine Last Name for name \"$namestr\" - ignoring name"); return 0; } # Variables to hold the Text::BibTeX::NameFormat generated initials string my $gen_lastname_i; my $gen_firstname_i; my $gen_prefix_i; my $gen_suffix_i; # Use a copy of $name so that when we generate the # initials, we do so without certain things. This is easier than trying # hack robust initials code into btparse ... my $nd_namestr = strip_noinit($namestr); # Make initials with ties in between work. btparse doesn't understand this so replace with # spaces - this is fine as we are just generating initials $nd_namestr =~ s/(\w)\.~(\w)/$1. $2/g; # We use NFC here as we are "outputting" to an external module my $nd_name = new Text::BibTeX::Name(NFC($nd_namestr), $fieldname); # Initials formats my $li_f = new Text::BibTeX::NameFormat('l', 1); my $fi_f = new Text::BibTeX::NameFormat('f', 1); my $pi_f = new Text::BibTeX::NameFormat('v', 1); my $si_f = new Text::BibTeX::NameFormat('j', 1); # Initials generated with forced tie so we can make an array $li_f->set_text(BTN_LAST, undef, undef, undef, ''); $fi_f->set_text(BTN_FIRST, undef, undef, undef, ''); $pi_f->set_text(BTN_VON, undef, undef, undef, ''); $si_f->set_text(BTN_JR, undef, undef, undef, ''); $li_f->set_options(BTN_LAST, 1, BTJ_FORCETIE, BTJ_NOTHING); $fi_f->set_options(BTN_FIRST, 1, BTJ_FORCETIE, BTJ_NOTHING); $pi_f->set_options(BTN_VON, 1, BTJ_FORCETIE, BTJ_NOTHING); $si_f->set_options(BTN_JR, 1, BTJ_FORCETIE, BTJ_NOTHING); $gen_lastname_i = inits(biber_decode_utf8($nd_name->format($li_f))); $gen_firstname_i = inits(biber_decode_utf8($nd_name->format($fi_f))); $gen_prefix_i = inits(biber_decode_utf8($nd_name->format($pi_f))); $gen_suffix_i = inits(biber_decode_utf8($nd_name->format($si_f))); my $namestring = ''; # prefix my $ps; my $prefix_stripped; my $prefix_i; if ($prefix) { $prefix_i = $gen_prefix_i; $prefix_stripped = remove_outer($prefix); $ps = $prefix ne $prefix_stripped ? 1 : 0; $namestring .= "$prefix_stripped "; } # lastname my $ls; my $lastname_stripped; my $lastname_i; if ($lastname) { $lastname_i = $gen_lastname_i; $lastname_stripped = remove_outer($lastname); $ls = $lastname ne $lastname_stripped ? 1 : 0; $namestring .= "$lastname_stripped, "; } # suffix my $ss; my $suffix_stripped; my $suffix_i; if ($suffix) { $suffix_i = $gen_suffix_i; $suffix_stripped = remove_outer($suffix); $ss = $suffix ne $suffix_stripped ? 1 : 0; $namestring .= "$suffix_stripped, "; } # firstname my $fs; my $firstname_stripped; my $firstname_i; if ($firstname) { $firstname_i = $gen_firstname_i; $firstname_stripped = remove_outer($firstname); $fs = $firstname ne $firstname_stripped ? 1 : 0; $namestring .= "$firstname_stripped"; } # Remove any trailing comma and space if, e.g. missing firstname # Replace any nbspes $namestring =~ s/,\s+\z//xms; $namestring =~ s/~/ /gxms; # Construct $nameinitstring my $nameinitstr = ''; $nameinitstr .= join('', @$prefix_i) . '_' if ( $usepre and $prefix ); $nameinitstr .= $lastname if $lastname; $nameinitstr .= '_' . join('', @$suffix_i) if $suffix; $nameinitstr .= '_' . join('', @$firstname_i) if $firstname; $nameinitstr =~ s/\s+/_/g; $nameinitstr =~ s/~/_/g; # output is always NFC and so when testing the output of this routine, need NFC if ($testing) { if ($firstname) { $firstname_stripped = NFC($firstname_stripped); $firstname_i = [ map {NFC($_)} @$firstname_i ]; } if ($lastname) { $lastname_stripped = NFC($lastname_stripped); $lastname_i = [ map {NFC($_)} @$lastname_i ]; } if ($prefix) { $prefix_stripped = NFC($prefix_stripped); $prefix_i = [ map {NFC($_)} @$prefix_i ]; } if ($suffix) { $suffix_stripped = NFC($suffix_stripped); $suffix_i = [ map {NFC($_)} @$suffix_i ]; } if ($namestring) { $namestring = NFC($namestring); } if ($nameinitstr) { $nameinitstr = NFC($nameinitstr); } } # The "strip" entry tells us which of the name parts had outer braces # stripped during processing so we can add them back when printing the # .bbl so as to maintain maximum BibTeX compatibility return Biber::Entry::Name->new( firstname => $firstname eq '' ? undef : $firstname_stripped, firstname_i => $firstname eq '' ? undef : $firstname_i, lastname => $lastname eq '' ? undef : $lastname_stripped, lastname_i => $lastname eq '' ? undef : $lastname_i, prefix => $prefix eq '' ? undef : $prefix_stripped, prefix_i => $prefix eq '' ? undef : $prefix_i, suffix => $suffix eq '' ? undef : $suffix_stripped, suffix_i => $suffix eq '' ? undef : $suffix_i, namestring => $namestring, nameinitstring => $nameinitstr, strip => {'firstname' => $fs, 'lastname' => $ls, 'prefix' => $ps, 'suffix' => $ss} ); } # Routine to try to hack month into the right biblatex format # Especially since we support remote .bibs which we potentially have no control over my %months = ( 'jan' => '01', 'feb' => '02', 'mar' => '03', 'apr' => '04', 'may' => '05', 'jun' => '06', 'jul' => '07', 'aug' => '08', 'sep' => '09', 'oct' => '10', 'nov' => '11', 'dec' => '12' ); sub _hack_month { my $in_month = shift; if ($in_month =~ m/\A\s*((?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec).*)\s*\z/i) { return $months{lc(Unicode::GCString->new($1)->substr(0,3)->as_string)}; } else { return $in_month; } } sub _get_handler { my $field = shift; my $S = Biber::Config->getoption('mssplit'); $field =~ s/$S(?:original|translated|romanised|uniform)$S?.*$//; if (my $h = $handlers->{CUSTOM}{$field}) { return $h; } else { return $handlers->{$dm->get_fieldtype($field)}{$dm->get_fieldformat($field) || 'default'}{$dm->get_datatype($field)}; } } 1; __END__ =pod =encoding utf-8 =head1 NAME Biber::Input::file::bibtex - look in a BibTeX file for an entry and create it if found =head1 DESCRIPTION Provides the extract_entries() method to get entries from a BibTeX data source and instantiate Biber::Entry objects for what it finds =head1 AUTHOR François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Entry000755000000000000 012230324176 16226 5ustar00rootroot000000000000biblatex-biber-1.8/lib/Biber/Entry/Name.pm000444000000000000 3056312230324176 17630 0ustar00rootroot000000000000package Biber::Entry::Name; use v5.16; use strict; use warnings; use Regexp::Common qw( balanced ); use Biber::Config; use Data::Dump qw( pp ); use Log::Log4perl qw( :no_extra_logdie_message ); use List::Util qw( first ); use Unicode::Normalize; my $logger = Log::Log4perl::get_logger('main'); =encoding utf-8 =head1 NAME Biber::Entry::Name =head2 new Initialize a Biber::Entry::Name object, optionally with key=>value arguments. Ex: Biber::Entry::Name->new( lastname=>"Bolzmann", firstname=>"Anna Maria", prefix => "von" ) =cut sub new { my ($class, %params) = @_; if (%params) { my $name = {}; foreach my $attr (qw/gender lastname lastname_i firstname firstname_i middlename middlename_i prefix prefix_i suffix suffix_i namestring nameinitstring strip/) { if (exists $params{$attr}) { $name->{$attr} = $params{$attr} } } return bless $name, $class; } else { return bless {}, $class; } } =head2 TO_JSON Serialiser for JSON::XS::encode =cut sub TO_JSON { my $self = shift; my $json; while (my ($k, $v) = each(%{$self})) { $json->{$k} = $v; } return $json; } =head2 notnull Test for an empty object =cut sub notnull { my $self = shift; my @arr = keys %$self; return $#arr > -1 ? 1 : 0; } =head2 was_stripped Return boolean to tell if the passed field had braces stripped from the original =cut sub was_stripped { my ($self, $part) = @_; return exists($self->{strip}) ? $self->{strip}{$part} : undef; } =head2 set_hash Set a hash for the name =cut sub set_hash { my ($self, $hash) = @_; $self->{hash} = $hash; return; } =head2 get_hash Get a hash for the name =cut sub get_hash { my $self = shift; return $self->{hash}; } =head2 set_index Set a field telling what position in the name list the name is =cut sub set_index { my ($self, $index) = @_; $self->{index} = $index; return; } =head2 get_index Get the index of a Biber::Entry::Name object =cut sub get_index { my $self = shift; return $self->{index}; } =head2 set_uniquename Set uniquename for a visible Biber::Entry::Name object Sets global flag to say that some uniquename value has changed =cut sub set_uniquename { my ($self, $uniquename) = @_; my $currval = $self->{uniquename}; # Set modified flag to positive if we change something if (not defined($currval) or $currval != $uniquename) { Biber::Config->set_unul_changed(1); } $logger->trace('Setting uniquename for "' . $self->get_namestring . '" to ' . $uniquename); $self->{uniquename} = $uniquename; return; } =head2 set_uniquename_all Set uniquename for a Biber::Entry::Name object =cut sub set_uniquename_all { my ($self, $uniquename) = @_; $logger->trace('Setting uniquename_all for "' . $self->get_namestring . '" to ' . $uniquename); $self->{uniquename_all} = $uniquename; return; } =head2 get_uniquename Get uniquename for a visible Biber::Entry::Name object =cut sub get_uniquename { my $self = shift; return $self->{uniquename}; } =head2 get_uniquename_all Get uniquename for a Biber::Entry::Name object =cut sub get_uniquename_all { my $self = shift; return $self->{uniquename_all}; } =head2 reset_uniquename Reset uniquename for a Biber::Entry::Name object =cut sub reset_uniquename { my $self = shift; $self->{uniquename} = 0; return; } =head2 set_minimal_info Set the string of lastnames and string of fullnames Used to track uniquename=5 or 6 =cut sub set_minimal_info { my ($self, $lns) = @_; $self->{lastnames_string} = $lns; return; } =head2 get_minimal_info Get the name context used to track uniquename=5 or 6 =cut sub get_minimal_info { my $self = shift; return $self->{lastnames_string}; } =head2 get_namepart Get a namepart by passed name =cut sub get_namepart { my ($self, $namepart) = @_; return $self->{$namepart}; } =head2 set_firstname Set firstname for a Biber::Entry::Name object =cut sub set_firstname { my ($self, $val) = @_; $self->{firstname} = $val; return; } =head2 get_firstname Get firstname for a Biber::Entry::Name object =cut sub get_firstname { my $self = shift; return $self->{firstname}; } =head2 get_firstname_i Get firstname initials for a Biber::Entry::Name object =cut sub get_firstname_i { my $self = shift; return $self->{firstname_i}; } =head2 set_middlename Set middlename for a Biber::Entry::Name object =cut sub set_middlename { my ($self, $val) = @_; $self->{middlename} = $val; return; } =head2 get_middlename Get middlename for a Biber::Entry::Name object =cut sub get_middlename { my $self = shift; return $self->{middlename}; } =head2 get_middlename_i Get middlename initials for a Biber::Entry::Name object =cut sub get_middlename_i { my $self = shift; return $self->{middlename_i}; } =head2 set_lastname Set lastname for a Biber::Entry::Name object =cut sub set_lastname { my ($self, $val) = @_; $self->{lastname} = $val; return; } =head2 get_lastname Get lastname for a Biber::Entry::Name object =cut sub get_lastname { my $self = shift; return $self->{lastname}; } =head2 get_lastname_i Get lastname initials for a Biber::Entry::Name object =cut sub get_lastname_i { my $self = shift; return $self->{lastname_i}; } =head2 set_suffix Set suffix for a Biber::Entry::Name object =cut sub set_suffix { my ($self, $val) = @_; $self->{suffix} = $val; return; } =head2 get_suffix Get suffix for a Biber::Entry::Name object =cut sub get_suffix { my $self = shift; return $self->{suffix}; } =head2 get_suffix_i Get suffix initials for a Biber::Entry::Name object =cut sub get_suffix_i { my $self = shift; return $self->{suffix_i}; } =head2 set_prefix Set prefix for a Biber::Entry::Name object =cut sub set_prefix { my ($self, $val) = @_; $self->{prefix} = $val; return; } =head2 get_prefix Get prefix for a Biber::Entry::Name object =cut sub get_prefix { my $self = shift; return $self->{prefix}; } =head2 get_prefix_i Get prefix initials for a Biber::Entry::Name object =cut sub get_prefix_i { my $self = shift; return $self->{prefix_i}; } =head2 set_gender Set gender for a Biber::Entry::Name object =cut sub set_gender { my ($self, $val) = @_; $self->{gender} = $val; return; } =head2 get_gender Get gender for a Biber::Entry::Name object =cut sub get_gender { my $self = shift; return $self->{gender}; } =head2 set_namestring Set namestring for a Biber::Entry::Name object =cut sub set_namestring { my ($self, $val) = @_; $self->{namestring} = $val; return; } =head2 get_namestring Get namestring for a Biber::Entry::Name object =cut sub get_namestring { my $self = shift; return $self->{namestring}; } =head2 set_nameinitstring Set nameinitstring for a Biber::Entry::Name object =cut sub set_nameinitstring { my ($self, $val) = @_; $self->{nameinitstring} = $val; return; } =head2 get_nameinitstring Get nameinitstring for a Biber::Entry::Name object =cut sub get_nameinitstring { my $self = shift; return $self->{nameinitstring}; } =head2 name_to_biblatexml { Create biblatexml data for a name =cut sub name_to_biblatexml { my $self = shift; my $xml = shift; my $out = shift; my $xml_prefix = $out->{xml_prefix}; $xml->startTag([$xml_prefix, 'person']); # lastname _name_part_to_bltxml($xml, $xml_prefix, $self->get_lastname, $self->get_lastname_i, 'last'); # firstname _name_part_to_bltxml($xml, $xml_prefix, $self->get_firstname, $self->get_firstname_i, 'first'); # middlename _name_part_to_bltxml($xml, $xml_prefix, $self->get_middlename, $self->get_middlename_i, 'middle'); # prefix _name_part_to_bltxml($xml, $xml_prefix, $self->get_prefix, $self->get_prefix_i, 'prefix'); # suffix _name_part_to_bltxml($xml, $xml_prefix, $self->get_suffix, $self->get_suffix_i, 'suffix'); $xml->endTag(); # Name } sub _name_part_to_bltxml { my ($xml, $xml_prefix, $np, $nip, $npn) = @_; if ($np) { $xml->startTag([$xml_prefix, $npn]); my $parts = [split(/[\s~]/, $np)]; for (my $i=0;$i <= $#$parts;$i++) { if (my $init = $nip->[$i]) { $xml->startTag([$xml_prefix, 'namepart'], initial => $init); } else { $xml->startTag([$xml_prefix, 'namepart']); } $xml->characters(NFC($parts->[$i])); $xml->endTag(); } $xml->endTag(); } } =head2 name_to_bbl { Return bbl data for a name =cut sub name_to_bbl { my $self = shift; my @pno; # per-name options my $pno; # per-name options final string # lastname is always defined my $lni; my $ln = Biber::Utils::join_name($self->get_lastname); if ($self->was_stripped('lastname')) { $ln = Biber::Utils::add_outer($ln); } $lni = join('\bibinitperiod\bibinitdelim ', @{$self->get_lastname_i}) . '\bibinitperiod'; $lni =~ s/\-/\\bibinithyphendelim /gxms; # firstname my $fn; my $fni; if ($fn = $self->get_firstname) { $fn = Biber::Utils::join_name($fn); if ($self->was_stripped('firstname')) { $fn = Biber::Utils::add_outer($fn); } $fni = join('\bibinitperiod\bibinitdelim ', @{$self->get_firstname_i}) . '\bibinitperiod'; $fni =~ s/\-/\\bibinithyphendelim /gxms; } else { $fn = ''; $fni = ''; } # middlename my $mn; my $mni; if ($mn = $self->get_middlename) { $mn = Biber::Utils::join_name($mn); $mni = join('\bibinitperiod\bibinitdelim ', @{$self->get_middlename_i}) . '\bibinitperiod'; $mni =~ s/\-/\\bibinithyphendelim /gxms; } else { $mn = ''; $mni = ''; } # prefix my $pre; my $prei; if ($pre = $self->get_prefix) { $pre = Biber::Utils::join_name($pre); if ($self->was_stripped('prefix')) { $pre = Biber::Utils::add_outer($pre); } $prei = join('\bibinitperiod\bibinitdelim ', @{$self->get_prefix_i}) . '\bibinitperiod'; $prei =~ s/\-/\\bibinithyphendelim /gxms; } else { $pre = ''; $prei = ''; } # suffix my $suf; my $sufi; if ($suf = $self->get_suffix) { $suf = Biber::Utils::join_name($suf); if ($self->was_stripped('suffix')) { $suf = Biber::Utils::add_outer($suf); } $sufi = join('\bibinitperiod\bibinitdelim ', @{$self->get_suffix_i}) . '\bibinitperiod'; $sufi =~ s/\-/\\bibinithyphendelim /gxms; } else { $suf = ''; $sufi = ''; } # Generate uniquename if uniquename is requested if (defined($self->get_uniquename)) { push @pno, 'uniquename=' . $self->get_uniquename; } # Add the name hash to the options push @pno, 'hash=' . $self->get_hash; $pno = join(',', @pno); # Some data sources support middle names if ($self->get_middlename) { return " {{$pno}{$ln}{$lni}{$fn}{$fni}{$mn}{$mni}{$pre}{$prei}{$suf}{$sufi}}%\n"; } else { return " {{$pno}{$ln}{$lni}{$fn}{$fni}{$pre}{$prei}{$suf}{$sufi}}%\n"; } } =head2 dump Dump Biber::Entry::Name object =cut sub dump { my $self = shift; return pp($self); } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/lib/Biber/Entry/Names.pm000444000000000000 2035712230324176 20013 0ustar00rootroot000000000000package Biber::Entry::Names; use v5.16; use strict; use warnings; use Data::Dump; use Biber::Config; use Log::Log4perl qw( :no_extra_logdie_message ); use Storable qw( dclone ); my $logger = Log::Log4perl::get_logger('main'); =encoding utf-8 =head1 NAME Biber::Entry::Names =head2 new Initialize a Biber::Entry::Names object =cut sub new { my $class = shift; return bless {namelist => []}, $class; } =head2 TO_JSON Serialiser for JSON::XS::encode =cut # sub TO_JSON { # my $self = shift; # foreach my $n (@$self){ # $json->{$k} = $v; # } # return [ map {$_} @$self ]; # } =head2 notnull Test for an empty object =cut sub notnull { my $self = shift; my @arr = @{$self->{namelist}}; return $#arr > -1 ? 1 : 0; } =head2 names Return ref to array of all Biber::Entry::Name objects in object =cut sub names { my $self = shift; return $self->{namelist}; } =head2 reset_uniquelist Reset uniquelist to undef for a Biber::Entry::Name object =cut sub reset_uniquelist { my $self = shift; delete $self->{uniquelist}; return; } =head2 set_uniquelist Add a uniquelist count to the Biber::Entry::Names object Sets global flag to say that some uniquelist value has changed =cut sub set_uniquelist { my $self = shift; my ($namelist, $maxcn, $mincn) = @_; my $uniquelist = $self->count_uniquelist($namelist); my $num_names = $self->count_names; my $currval = $self->{uniquelist}; # Set modified flag to positive if we changed something if (not defined($currval) or $currval != $uniquelist) { Biber::Config->set_unul_changed(1); } # Special case $uniquelist <=1 is meaningless return if $uniquelist <= 1; # Don't set uniquelist unless the list is longer than maxcitenames as it was therefore # never truncated to mincitenames in the first place and uniquelist is a "local mincitenames" return unless $self->count_names > $maxcn; # No disambiguation needed if uniquelist is <= mincitenames as this makes no sense # since it implies that disambiguation beyond mincitenames was needed. # This doesn't apply when the list length is mincitenames as maxmanes therefore # (since it can't be less than mincitenames) could also be the same as the list length # and this is a special case where we need to preserve uniquelist (see comments in # create_uniquelist_info()) # $uniquelist cannot be undef or 0 either since every list occurs at least once. # This guarantees that uniquelist, when set, is >1 because mincitenames cannot # be <1 return if $uniquelist <= $mincn and not $mincn == $self->count_names; # Special case. # No point disambiguating with uniquelist lists which have the same count # for the complete list as this means they are the same list. So, if this # is the case, don't set uniquelist at all. BUT, only do this if there is nothing # else which these identical lists need disambiguating from: # # * Assume last index of list is x # * Must not be any other list identical apart from position x # * Must not be any other list identical up to position x but also longer return if ( # if final count > 1 (identical lists) Biber::Config->get_uniquelistcount_final($namelist) > 1 and # nothing differs from $namelist in last place not Biber::Config->list_differs_last($namelist) and # nothing else is the same to last position but is longer not Biber::Config->list_differs_superset($namelist) ); # If there are more names than uniquelist, reduce it by one unless # there is another list which differs at uniquelist and is at least as long # so we get: # # AAA and BBB and CCC # AAA and BBB and CCC et al # # instead of # # AAA and BBB and CCC # AAA and BBB and CCC and DDD et al # # BUT, we also want # # AAA and BBB and CCC # AAA and BBB and CCC and DDD et al # AAA and BBB and CCC and EEE et al if ($num_names > $uniquelist and not Biber::Config->list_differs_nth($namelist, $uniquelist)) { $uniquelist--; } $self->{uniquelist} = $uniquelist; return; } =head2 get_uniquelist Get the uniquelist count from the Biber::Entry::Names object =cut sub get_uniquelist { my $self = shift; return $self->{uniquelist}; } =head2 count_uniquelist Count the names in a string used to determine uniquelist. =cut sub count_uniquelist { my $self = shift; my $namelist = shift; return $#$namelist + 1; } =head2 set_visible_cite Set the number of cite visible names as per the different uniquelist, max/mincitenames etc =cut sub set_visible_cite { my $self = shift; my $visibility = shift; $self->{visibility} = $visibility; return } =head2 set_visible_bib Set the number of bib visible names as per the different uniquelist, max/minbibnames etc =cut sub set_visible_bib { my $self = shift; my $visibility = shift; $self->{visibility_bib} = $visibility; return } =head2 set_visible_alpha Set the number of alpha visible names as per the different uniquelist, max/minalphanames etc =cut sub set_visible_alpha { my $self = shift; my $visibility = shift; $self->{visibility_alpha} = $visibility; return } =head2 get_visible_cite Get the number of visible names as per the different uniquelist, max/mincitenames etc =cut sub get_visible_cite { my $self = shift; return $self->{visibility}; } =head2 get_visible_bib Get the number of bib visible names as per the different uniquelist, max/minbibnames etc =cut sub get_visible_bib { my $self = shift; return $self->{visibility_bib}; } =head2 get_visible_alpha Get the number of alpha visible names as per the different uniquelist, max/minalphanames etc =cut sub get_visible_alpha { my $self = shift; return $self->{visibility_alpha}; } =head2 add_name Add a Biber::Entry::Name object to the Biber::Entry::Names object =cut sub add_name { my $self = shift; my $name_obj = shift; push @{$self->{namelist}}, $name_obj; $name_obj->set_index($#{$self->{namelist}} + 1); return; } =head2 set_morenames Sets a flag to say that we had a "and others" in the data =cut sub set_morenames { my $self = shift; $self->{morenames} = 1; return; } =head2 get_morenames Gets the morenames flag =cut sub get_morenames { my $self = shift; return $self->{morenames} ? 1 : 0; } =head2 count_names Returns the number of Biber::Entry::Name objects in the object =cut sub count_names { my $self = shift; return scalar @{$self->{namelist}}; } =head2 nth_name Returns the nth Biber::Entry::Name object in the object or the last one if n > total names =cut sub nth_name { my $self = shift; my $n = shift; my $size = @{$self->{namelist}}; return $self->{namelist}[$n > $size ? $size-1 : $n-1]; } =head2 first_n_names Returns an array ref of Biber::Entry::Name objects containing only the first n Biber::Entry::Name objects or all names if n > total names =cut sub first_n_names { my $self = shift; my $n = shift; my $size = @{$self->{namelist}}; return [ @{$self->{namelist}}[0 .. ($n > $size ? $size-1 : $n-1)] ]; } =head2 del_last_name Deletes the last Biber::Entry::Name object in the object =cut sub del_last_name { my $self = shift; pop(@{$self->{namelist}}); # Don't want the return value of this! return; } =head2 last_name Returns the last Biber::Entry::Name object in the object =cut sub last_name { my $self = shift; return $self->{namelist}[-1]; } =head2 dump Dump a Biber::Entry::Names object for debugging purposes =cut sub dump { my $self = shift; dd($self); return; } 1; __END__ =head1 AUTHORS François Charette, C<< >> Philip Kime C<< >> =head1 BUGS Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut biblatex-biber-1.8/data000755000000000000 012230324177 14246 5ustar00rootroot000000000000biblatex-biber-1.8/data/biber-tool.conf000444000000000000 14454212230324176 17361 0ustar00rootroot000000000000 mm citeorder article artwork audio bibnote book bookinbook booklet collection commentary customa customb customc customd custome customf inbook incollection inproceedings inreference image jurisdiction legal legislation letter manual misc movie music mvcollection mvbook online patent performance periodical proceedings reference report review set software standard suppbook suppcollection thesis unpublished video xdata day endday endmonth eventday eventendday eventendmonth eventmonth eventyear origday origendday origendmonth origmonth origyear urlday urlendday urlendmonth urlmonth urlyear abstract addendum annotation booksubtitle booktitle booktitleaddon chapter edition eid entrysubtype eprintclass eprinttype eventtitle eventtitleaddon gender howpublished hyphenation indexsorttitle indextitle isan isbn ismn isrn issn issue issuesubtitle issuetitle iswc journalsubtitle journaltitle label library mainsubtitle maintitle maintitleaddon nameaddon note number origtitle pagetotal part relatedstring relatedtype reprinttitle series shorthand shorthandintro shortjournal shortseries shorttitle subtitle title titleaddon usera userb userc userd usere userf venue version volume volumes month year urlendyear endyear eventendyear origendyear sorttitle sortshorthand sortyear sortkey presort institution lista listb listc listd liste listf location organization origlocation origpublisher publisher afterword annotator author bookauthor commentator editor editora editorb editorc foreword holder introduction namea nameb namec shortauthor shorteditor translator sortname authortype editoratype editorbtype editorctype editortype bookpagination nameatype namebtype namectype origlanguage pagination pubstate type language crossref xref xdata ids entryset date eventdate origdate urldate doi eprint file verba verbb verbc url keywords related options relatedoptions pages execute with writer producer execproducer director abstractloc doubtfulauthor doubtfuldate titleisdescription newspaper urldescription abstracturl abstract annotation authortype bookpagination crossref entryset entrysubtype execute file gender hyphenation ids indextitle indexsorttitle isan ismn iswc keywords label library lista listb listc listd liste listf nameaddon options origday origendday origendmonth origendyear origmonth origyear origlocation origpublisher origtitle pagination presort related relatedtype relatedstring shortauthor shorteditor shorthand shorthandintro shortjournal shortseries shorttitle sortkey sortname sortshorthand sorttitle sortyear usera userb userc userd usere userf verba verbb verbc xdata xref set entryset crossref article author journaltitle title day endday endmonth endyear month year addendum annotator commentator doi editor editora editorb editorc editoratype editorbtype editorctype eid eprint eprintclass eprinttype issn issue issuetitle issuesubtitle journalsubtitle language note number origlanguage pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear version volume bibnote note book author title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location maintitle maintitleaddon mainsubtitle note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvbook author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes inbook bookinbook suppbook author title booktitle day endday endmonth endyear month year addendum afterword annotator bookauthor booksubtitle booktitleaddon chapter commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage part publisher pages pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes booklet author editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype howpublished language location note pages pagetotal pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear collection reference editor title day endday endmonth endyear month year addendum afterword annotator chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages pagetotal part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes mvcollection mvreference author title day endday endmonth endyear month year addendum afterword annotator commentator doi edition editor editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location note number origlanguage publisher pubstate subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes incollection suppcollection inreference author editor title booktitle day endday endmonth endyear month year addendum afterword annotator booksubtitle booktitleaddon chapter commentator doi edition editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype foreword introduction isbn language location mainsubtitle maintitle maintitleaddon note number origlanguage pages part publisher pubstate series subtitle titleaddon translator url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume volumes manual title day endday endmonth endyear month year addendum author chapter doi edition editor eprint eprintclass eprinttype isbn language location note number organization pages pagetotal publisher pubstate series subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version misc title day endday endmonth endyear day endday endmonth endyear month year addendum author doi editor eprint eprintclass eprinttype howpublished language location note organization pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version online title url addendum author editor language month note organization pubstate subtitle titleaddon urlday urlendday urlendmonth urlendyear urlmonth urlyear version year patent author title number day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype holder location note pubstate subtitle titleaddon type url urlday urlendday urlendmonth urlendyear urlmonth urlyear version periodical editor title day endday endmonth endyear month year addendum doi editora editorb editorc editoratype editorbtype editorctype eprint eprintclass eprinttype issn issue issuesubtitle issuetitle language note number pubstate series subtitle url urlday urlendday urlendmonth urlendyear urlmonth urlyear volume mvproceedings editor title day endday endmonth endyear month year addendum doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location note number organization pagetotal publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volumes proceedings editor title day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages pagetotal part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes inproceedings author editor title booktitle day endday endmonth endyear month year addendum booksubtitle booktitleaddon chapter doi eprint eprintclass eprinttype eventday eventendday eventendmonth eventendyear eventmonth eventyear eventtitle eventtitleaddon isbn language location mainsubtitle maintitle maintitleaddon note number organization pages part publisher pubstate series subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear venue volume volumes report author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype isrn language location note number pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear version thesis author title type institution day endday endmonth endyear month year addendum chapter doi eprint eprintclass eprinttype language location note pages pagetotal pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear unpublished author title day endday endmonth endyear month year addendum howpublished language location note pubstate subtitle titleaddon url urlday urlendday urlendmonth urlendyear urlmonth urlyear article book inbook bookinbook suppbook booklet collection incollection suppcollection manual misc mvbook mvcollection online patent periodical suppperiodical proceedings inproceedings reference inreference report set thesis unpublished date year set entryset crossref article author journaltitle title book mvbook mvcollection mvreference author title inbook bookinbook suppbook author title booktitle booklet author editor title collection reference editor title incollection suppcollection inreference author editor title booktitle manual title misc title online title url patent author title number periodical editor title proceedings mvproceedings editor title inproceedings author editor title booktitle report author title type institution thesis author title type institution unpublished author title isbn issn ismn date eventdate origdate urldate gender biblatex-biber-1.8/data/latinkeys.txt000444000000000000 63413512230324177 17223 0ustar00rootroot000000000000# unidata-6.2.0.txt # Date: 2012-08-14, 19:01:52 GMT [KW] # # This file defines the Default Unicode Collation Element Table # (DUCET) for the Unicode Collation Algorithm # # Copyright (c) 2001-2012 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # See UTS #10, Unicode Collation Algorithm, for more information. # # Diagnostic weight ranges # Primary weight range: 0200..432A (16683) # Secondary weight range: 0020..0177 (344) # Variant secondaries: 0139..013E (6) # Digit secondaries: 013F..0177 (57) # Tertiary weight range: 0002..001F (30) # @version 6.2.0 0000 ; [.0000.0000.0000.0000] # [0000] NULL (in 6429) 0001 ; [.0000.0000.0000.0000] # [0001] START OF HEADING (in 6429) 0002 ; [.0000.0000.0000.0000] # [0002] START OF TEXT (in 6429) 0003 ; [.0000.0000.0000.0000] # [0003] END OF TEXT (in 6429) 0004 ; [.0000.0000.0000.0000] # [0004] END OF TRANSMISSION (in 6429) 0005 ; [.0000.0000.0000.0000] # [0005] ENQUIRY (in 6429) 0006 ; [.0000.0000.0000.0000] # [0006] ACKNOWLEDGE (in 6429) 0007 ; [.0000.0000.0000.0000] # [0007] BELL (in 6429) 0008 ; [.0000.0000.0000.0000] # [0008] BACKSPACE (in 6429) 000E ; [.0000.0000.0000.0000] # [000E] SHIFT OUT (in 6429) 000F ; [.0000.0000.0000.0000] # [000F] SHIFT IN (in 6429) 0010 ; [.0000.0000.0000.0000] # [0010] DATA LINK ESCAPE (in 6429) 0011 ; [.0000.0000.0000.0000] # [0011] DEVICE CONTROL ONE (in 6429) 0012 ; [.0000.0000.0000.0000] # [0012] DEVICE CONTROL TWO (in 6429) 0013 ; [.0000.0000.0000.0000] # [0013] DEVICE CONTROL THREE (in 6429) 0014 ; [.0000.0000.0000.0000] # [0014] DEVICE CONTROL FOUR (in 6429) 0015 ; [.0000.0000.0000.0000] # [0015] NEGATIVE ACKNOWLEDGE (in 6429) 0016 ; [.0000.0000.0000.0000] # [0016] SYNCHRONOUS IDLE (in 6429) 0017 ; [.0000.0000.0000.0000] # [0017] END OF TRANSMISSION BLOCK (in 6429) 0018 ; [.0000.0000.0000.0000] # [0018] CANCEL (in 6429) 0019 ; [.0000.0000.0000.0000] # [0019] END OF MEDIUM (in 6429) 001A ; [.0000.0000.0000.0000] # [001A] SUBSTITUTE (in 6429) 001B ; [.0000.0000.0000.0000] # [001B] ESCAPE (in 6429) 001C ; [.0000.0000.0000.0000] # [001C] FILE SEPARATOR (in 6429) 001D ; [.0000.0000.0000.0000] # [001D] GROUP SEPARATOR (in 6429) 001E ; [.0000.0000.0000.0000] # [001E] RECORD SEPARATOR (in 6429) 001F ; [.0000.0000.0000.0000] # [001F] UNIT SEPARATOR (in 6429) 007F ; [.0000.0000.0000.0000] # [007F] DELETE (in 6429) 0080 ; [.0000.0000.0000.0000] # [0080] 0081 ; [.0000.0000.0000.0000] # [0081] 0082 ; [.0000.0000.0000.0000] # [0082] BREAK PERMITTED HERE (in 6429) 0083 ; [.0000.0000.0000.0000] # [0083] NO BREAK HERE (in 6429) 0084 ; [.0000.0000.0000.0000] # [0084] 0086 ; [.0000.0000.0000.0000] # [0086] START OF SELECTED AREA (in 6429) 0087 ; [.0000.0000.0000.0000] # [0087] END OF SELECTED AREA (in 6429) 0088 ; [.0000.0000.0000.0000] # [0088] CHARACTER TABULATION SET (in 6429) 0089 ; [.0000.0000.0000.0000] # [0089] CHARACTER TABULATION WITH JUSTIFICATION (in 6429) 008A ; [.0000.0000.0000.0000] # [008A] LINE TABULATION SET (in 6429) 008B ; [.0000.0000.0000.0000] # [008B] PARTIAL LINE FORWARD (in 6429) 008C ; [.0000.0000.0000.0000] # [008C] PARTIAL LINE BACKWARD (in 6429) 008D ; [.0000.0000.0000.0000] # [008D] PARTIAL LINE FEED (in 6429) 008E ; [.0000.0000.0000.0000] # [008E] SINGLE SHIFT TWO (in 6429) 008F ; [.0000.0000.0000.0000] # [008F] SINGLE SHIFT THREE (in 6429) 0090 ; [.0000.0000.0000.0000] # [0090] DEVICE CONTROL STRING (in 6429) 0091 ; [.0000.0000.0000.0000] # [0091] PRIVATE USE ONE (in 6429) 0092 ; [.0000.0000.0000.0000] # [0092] PRIVATE USE TWO (in 6429) 0093 ; [.0000.0000.0000.0000] # [0093] SET TRANSMIT STATE (in 6429) 0094 ; [.0000.0000.0000.0000] # [0094] CANCEL CHARACTER (in 6429) 0095 ; [.0000.0000.0000.0000] # [0095] MESSAGE WAITING (in 6429) 0096 ; [.0000.0000.0000.0000] # [0096] START OF GUARDED AREA (in 6429) 0097 ; [.0000.0000.0000.0000] # [0097] END OF GUARDED AREA (in 6429) 0098 ; [.0000.0000.0000.0000] # [0098] START OF STRING (in 6429) 0099 ; [.0000.0000.0000.0000] # [0099] 009A ; [.0000.0000.0000.0000] # [009A] SINGLE CHARACTER INTRODUCER (in 6429) 009B ; [.0000.0000.0000.0000] # [009B] CONTROL SEQUENCE INTRODUCER (in 6429) 009C ; [.0000.0000.0000.0000] # [009C] STRING TERMINATOR (in 6429) 009D ; [.0000.0000.0000.0000] # [009D] OPERATING SYSTEM COMMAND (in 6429) 009E ; [.0000.0000.0000.0000] # [009E] PRIVACY MESSAGE (in 6429) 009F ; [.0000.0000.0000.0000] # [009F] APPLICATION PROGRAM COMMAND (in 6429) 00AD ; [.0000.0000.0000.0000] # [00AD] SOFT HYPHEN 0009 ; [*0201.0020.0002.0009] # HORIZONTAL TABULATION (in 6429) 000A ; [*0202.0020.0002.000A] # LINE FEED (in 6429) 000B ; [*0203.0020.0002.000B] # VERTICAL TABULATION (in 6429) 000C ; [*0204.0020.0002.000C] # FORM FEED (in 6429) 000D ; [*0205.0020.0002.000D] # CARRIAGE RETURN (in 6429) 0020 ; [*020A.0020.0002.0020] # SPACE 0021 ; [*025E.0020.0002.0021] # EXCLAMATION MARK 0022 ; [*02F1.0020.0002.0022] # QUOTATION MARK 0023 ; [*0376.0020.0002.0023] # NUMBER SIGN 0025 ; [*0377.0020.0002.0025] # PERCENT SIGN 0026 ; [*0374.0020.0002.0026] # AMPERSAND 0027 ; [*02EA.0020.0002.0027] # APOSTROPHE 0028 ; [*02FB.0020.0002.0028] # LEFT PARENTHESIS 0029 ; [*02FC.0020.0002.0029] # RIGHT PARENTHESIS 002A ; [*036D.0020.0002.002A] # ASTERISK 002B ; [*059C.0020.0002.002B] # PLUS SIGN 002C ; [*0221.0020.0002.002C] # COMMA 002D ; [*020E.0020.0002.002D] # HYPHEN-MINUS 002E ; [*0273.0020.0002.002E] # FULL STOP 002F ; [*0372.0020.0002.002F] # SOLIDUS 003A ; [*0237.0020.0002.003A] # COLON 003B ; [*0232.0020.0002.003B] # SEMICOLON 003C ; [*05A0.0020.0002.003C] # LESS-THAN SIGN 003D ; [*05A1.0020.0002.003D] # EQUALS SIGN 003E ; [*05A2.0020.0002.003E] # GREATER-THAN SIGN 003F ; [*0263.0020.0002.003F] # QUESTION MARK 0040 ; [*036C.0020.0002.0040] # COMMERCIAL AT 005B ; [*02FD.0020.0002.005B] # LEFT SQUARE BRACKET 005C ; [*0373.0020.0002.005C] # REVERSE SOLIDUS 005D ; [*02FE.0020.0002.005D] # RIGHT SQUARE BRACKET 005E ; [*0412.0020.0002.005E] # CIRCUMFLEX ACCENT 005F ; [*020C.0020.0002.005F] # LOW LINE 0060 ; [*040F.0020.0002.0060] # GRAVE ACCENT 007B ; [*02FF.0020.0002.007B] # LEFT CURLY BRACKET 007C ; [*05A4.0020.0002.007C] # VERTICAL LINE 007D ; [*0300.0020.0002.007D] # RIGHT CURLY BRACKET 007E ; [*05A6.0020.0002.007E] # TILDE 0085 ; [*0206.0020.0002.0085] # NEXT LINE (in 6429) 00A0 ; [*020A.0020.001B.00A0] # NO-BREAK SPACE 00A1 ; [*025F.0020.0002.00A1] # INVERTED EXCLAMATION MARK 00A6 ; [*05A5.0020.0002.00A6] # BROKEN BAR 00A7 ; [*0368.0020.0002.00A7] # SECTION SIGN 00A8 ; [*0416.0020.0002.00A8] # DIAERESIS 00A9 ; [*050C.0020.0002.00A9] # COPYRIGHT SIGN 00AB ; [*02F9.0020.0002.00AB] # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 00AC ; [*05A3.0020.0002.00AC] # NOT SIGN 00AE ; [*050D.0020.0002.00AE] # REGISTERED SIGN 00AF ; [*0413.0020.0002.00AF] # MACRON 00B0 ; [*0482.0020.0002.00B0] # DEGREE SIGN 00B1 ; [*059D.0020.0002.00B1] # PLUS-MINUS SIGN 00B4 ; [*0410.0020.0002.00B4] # ACUTE ACCENT 00B6 ; [*036A.0020.0002.00B6] # PILCROW SIGN 00B7 ; [*0284.0020.0002.00B7] # MIDDLE DOT 00B8 ; [*0419.0020.0002.00B8] # CEDILLA 00BB ; [*02FA.0020.0002.00BB] # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 00BF ; [*0264.0020.0002.00BF] # INVERTED QUESTION MARK 00D7 ; [*059F.0020.0002.00D7] # MULTIPLICATION SIGN 00F7 ; [*059E.0020.0002.00F7] # DIVISION SIGN 207A ; [*059C.0020.0014.207A] # SUPERSCRIPT PLUS SIGN 207B ; [*05A7.0020.0014.207B] # SUPERSCRIPT MINUS 207C ; [*05A1.0020.0014.207C] # SUPERSCRIPT EQUALS SIGN 207D ; [*02FB.0020.0014.207D] # SUPERSCRIPT LEFT PARENTHESIS 207E ; [*02FC.0020.0014.207E] # SUPERSCRIPT RIGHT PARENTHESIS 208A ; [*059C.0020.0015.208A] # SUBSCRIPT PLUS SIGN 208B ; [*05A7.0020.0015.208B] # SUBSCRIPT MINUS 208C ; [*05A1.0020.0015.208C] # SUBSCRIPT EQUALS SIGN 208D ; [*02FB.0020.0015.208D] # SUBSCRIPT LEFT PARENTHESIS 208E ; [*02FC.0020.0015.208E] # SUBSCRIPT RIGHT PARENTHESIS 2104 ; [*050E.0020.0002.2104] # CENTRE LINE SYMBOL 2108 ; [*050F.0020.0002.2108] # SCRUPLE 2114 ; [*0510.0020.0002.2114] # L B BAR SYMBOL 2117 ; [*0511.0020.0002.2117] # SOUND RECORDING COPYRIGHT 2118 ; [*0512.0020.0002.2118] # SCRIPT CAPITAL P 211E ; [*0513.0020.0002.211E] # PRESCRIPTION TAKE 211F ; [*0514.0020.0002.211F] # RESPONSE 2123 ; [*0515.0020.0002.2123] # VERSICLE 2125 ; [*0516.0020.0002.2125] # OUNCE SIGN 2127 ; [*0517.0020.0002.2127] # INVERTED OHM SIGN 2129 ; [*0518.0020.0002.2129] # TURNED GREEK SMALL LETTER IOTA 212E ; [*0519.0020.0002.212E] # ESTIMATED SYMBOL 213A ; [*051A.0020.0002.213A] # ROTATED CAPITAL Q 2140 ; [*059B.0020.0005.2140] # DOUBLE-STRUCK N-ARY SUMMATION 2141 ; [*051B.0020.0002.2141] # TURNED SANS-SERIF CAPITAL G 2142 ; [*051C.0020.0002.2142] # TURNED SANS-SERIF CAPITAL L 2143 ; [*051D.0020.0002.2143] # REVERSED SANS-SERIF CAPITAL L 2144 ; [*051E.0020.0002.2144] # TURNED SANS-SERIF CAPITAL Y 214A ; [*051F.0020.0002.214A] # PROPERTY LINE 214B ; [*0637.0020.0002.214B] # TURNED AMPERSAND 214C ; [*0520.0020.0002.214C] # PER SIGN 214F ; [*0521.0020.0002.214F] # SYMBOL FOR SAMARITAN SOURCE A720 ; [*047D.0020.0002.A720] # MODIFIER LETTER STRESS AND HIGH TONE A721 ; [*047E.0020.0002.A721] # MODIFIER LETTER STRESS AND LOW TONE A788 ; [*047F.0020.0002.A788] # MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789 ; [*0480.0020.0002.A789] # MODIFIER LETTER COLON A78A ; [*0481.0020.0002.A78A] # MODIFIER LETTER SHORT EQUALS SIGN FB29 ; [*059C.0020.0005.FB29] # HEBREW LETTER ALTERNATIVE PLUS SIGN 1D6C1 ; [*0592.0020.0005.1D6C1] # MATHEMATICAL BOLD NABLA 1D6DB ; [*058E.0020.0005.1D6DB] # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL 1D6FB ; [*0592.0020.0005.1D6FB] # MATHEMATICAL ITALIC NABLA 1D715 ; [*058E.0020.0005.1D715] # MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL 1D735 ; [*0592.0020.0005.1D735] # MATHEMATICAL BOLD ITALIC NABLA 1D74F ; [*058E.0020.0005.1D74F] # MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL 1D76F ; [*0592.0020.0005.1D76F] # MATHEMATICAL SANS-SERIF BOLD NABLA 1D789 ; [*058E.0020.0005.1D789] # MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL 1D7A9 ; [*0592.0020.0005.1D7A9] # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA 1D7C3 ; [*058E.0020.0005.1D7C3] # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL 1F1E6 ; [*0986.0020.0002.1F1E6] # REGIONAL INDICATOR SYMBOL LETTER A 1F1E7 ; [*0987.0020.0002.1F1E7] # REGIONAL INDICATOR SYMBOL LETTER B 1F1E8 ; [*0988.0020.0002.1F1E8] # REGIONAL INDICATOR SYMBOL LETTER C 1F1E9 ; [*0989.0020.0002.1F1E9] # REGIONAL INDICATOR SYMBOL LETTER D 1F1EA ; [*098A.0020.0002.1F1EA] # REGIONAL INDICATOR SYMBOL LETTER E 1F1EB ; [*098B.0020.0002.1F1EB] # REGIONAL INDICATOR SYMBOL LETTER F 1F1EC ; [*098C.0020.0002.1F1EC] # REGIONAL INDICATOR SYMBOL LETTER G 1F1ED ; [*098D.0020.0002.1F1ED] # REGIONAL INDICATOR SYMBOL LETTER H 1F1EE ; [*098E.0020.0002.1F1EE] # REGIONAL INDICATOR SYMBOL LETTER I 1F1EF ; [*098F.0020.0002.1F1EF] # REGIONAL INDICATOR SYMBOL LETTER J 1F1F0 ; [*0990.0020.0002.1F1F0] # REGIONAL INDICATOR SYMBOL LETTER K 1F1F1 ; [*0991.0020.0002.1F1F1] # REGIONAL INDICATOR SYMBOL LETTER L 1F1F2 ; [*0992.0020.0002.1F1F2] # REGIONAL INDICATOR SYMBOL LETTER M 1F1F3 ; [*0993.0020.0002.1F1F3] # REGIONAL INDICATOR SYMBOL LETTER N 1F1F4 ; [*0994.0020.0002.1F1F4] # REGIONAL INDICATOR SYMBOL LETTER O 1F1F5 ; [*0995.0020.0002.1F1F5] # REGIONAL INDICATOR SYMBOL LETTER P 1F1F6 ; [*0996.0020.0002.1F1F6] # REGIONAL INDICATOR SYMBOL LETTER Q 1F1F7 ; [*0997.0020.0002.1F1F7] # REGIONAL INDICATOR SYMBOL LETTER R 1F1F8 ; [*0998.0020.0002.1F1F8] # REGIONAL INDICATOR SYMBOL LETTER S 1F1F9 ; [*0999.0020.0002.1F1F9] # REGIONAL INDICATOR SYMBOL LETTER T 1F1FA ; [*099A.0020.0002.1F1FA] # REGIONAL INDICATOR SYMBOL LETTER U 1F1FB ; [*099B.0020.0002.1F1FB] # REGIONAL INDICATOR SYMBOL LETTER V 1F1FC ; [*099C.0020.0002.1F1FC] # REGIONAL INDICATOR SYMBOL LETTER W 1F1FD ; [*099D.0020.0002.1F1FD] # REGIONAL INDICATOR SYMBOL LETTER X 1F1FE ; [*099E.0020.0002.1F1FE] # REGIONAL INDICATOR SYMBOL LETTER Y 1F1FF ; [*099F.0020.0002.1F1FF] # REGIONAL INDICATOR SYMBOL LETTER Z FB1E ; [.0000.0096.0002.FB1E] # HEBREW POINT JUDEO-SPANISH VARIKA 00A4 ; [.15BC.0020.0002.00A4] # CURRENCY SIGN 00A2 ; [.15BD.0020.0002.00A2] # CENT SIGN 0024 ; [.15BE.0020.0002.0024] # DOLLAR SIGN 00A3 ; [.15BF.0020.0002.00A3] # POUND SIGN 00A5 ; [.15C0.0020.0002.00A5] # YEN SIGN 0030 ; [.15E5.0020.0002.0030] # DIGIT ZERO 1F100 ; [.15E5.0020.0004.1F100][*0273.0020.001F.1F100] # DIGIT ZERO FULL STOP 1F101 ; [.15E5.0020.0004.1F101][*0221.0020.001F.1F101] # DIGIT ZERO COMMA 1D7CE ; [.15E5.0020.0005.1D7CE] # MATHEMATICAL BOLD DIGIT ZERO 1D7D8 ; [.15E5.0020.0005.1D7D8] # MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO 1D7E2 ; [.15E5.0020.0005.1D7E2] # MATHEMATICAL SANS-SERIF DIGIT ZERO 1D7EC ; [.15E5.0020.0005.1D7EC] # MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO 1D7F6 ; [.15E5.0020.0005.1D7F6] # MATHEMATICAL MONOSPACE DIGIT ZERO 24EA ; [.15E5.0020.0006.24EA] # CIRCLED DIGIT ZERO 24FF ; [.15E5.0020.0006.24FF] # NEGATIVE CIRCLED DIGIT ZERO 2070 ; [.15E5.0020.0014.2070] # SUPERSCRIPT ZERO 2080 ; [.15E5.0020.0015.2080] # SUBSCRIPT ZERO 0031 ; [.15E6.0020.0002.0031] # DIGIT ONE 2474 ; [*02FB.0020.0004.2474][.15E6.0020.0004.2474][*02FC.0020.001F.2474] # PARENTHESIZED DIGIT ONE 2488 ; [.15E6.0020.0004.2488][*0273.0020.001F.2488] # DIGIT ONE FULL STOP 1F102 ; [.15E6.0020.0004.1F102][*0221.0020.001F.1F102] # DIGIT ONE COMMA 1D7CF ; [.15E6.0020.0005.1D7CF] # MATHEMATICAL BOLD DIGIT ONE 1D7D9 ; [.15E6.0020.0005.1D7D9] # MATHEMATICAL DOUBLE-STRUCK DIGIT ONE 1D7E3 ; [.15E6.0020.0005.1D7E3] # MATHEMATICAL SANS-SERIF DIGIT ONE 1D7ED ; [.15E6.0020.0005.1D7ED] # MATHEMATICAL SANS-SERIF BOLD DIGIT ONE 1D7F7 ; [.15E6.0020.0005.1D7F7] # MATHEMATICAL MONOSPACE DIGIT ONE 2460 ; [.15E6.0020.0006.2460] # CIRCLED DIGIT ONE 24F5 ; [.15E6.0020.0006.24F5] # DOUBLE CIRCLED DIGIT ONE 00B9 ; [.15E6.0020.0014.00B9] # SUPERSCRIPT ONE 2081 ; [.15E6.0020.0015.2081] # SUBSCRIPT ONE 247D ; [*02FB.0020.0004.247D][.15E6.0020.0004.247D][.15E5.0020.0004.247D][*02FC.0020.001F.247D] # PARENTHESIZED NUMBER TEN 2491 ; [.15E6.0020.0004.2491][.15E5.0020.0004.2491][*0273.0020.001F.2491] # NUMBER TEN FULL STOP 2469 ; [.15E6.0020.0006.2469][.15E5.0020.0006.2469] # CIRCLED NUMBER TEN 24FE ; [.15E6.0020.0006.24FE][.15E5.0020.0006.24FE] # DOUBLE CIRCLED NUMBER TEN 247E ; [*02FB.0020.0004.247E][.15E6.0020.0004.247E][.15E6.0020.0004.247E][*02FC.0020.001F.247E] # PARENTHESIZED NUMBER ELEVEN 2492 ; [.15E6.0020.0004.2492][.15E6.0020.0004.2492][*0273.0020.001F.2492] # NUMBER ELEVEN FULL STOP 246A ; [.15E6.0020.0006.246A][.15E6.0020.0006.246A] # CIRCLED NUMBER ELEVEN 24EB ; [.15E6.0020.0006.24EB][.15E6.0020.0006.24EB] # NEGATIVE CIRCLED NUMBER ELEVEN 247F ; [*02FB.0020.0004.247F][.15E6.0020.0004.247F][.15E7.0020.0004.247F][*02FC.0020.001F.247F] # PARENTHESIZED NUMBER TWELVE 2493 ; [.15E6.0020.0004.2493][.15E7.0020.0004.2493][*0273.0020.001F.2493] # NUMBER TWELVE FULL STOP 246B ; [.15E6.0020.0006.246B][.15E7.0020.0006.246B] # CIRCLED NUMBER TWELVE 24EC ; [.15E6.0020.0006.24EC][.15E7.0020.0006.24EC] # NEGATIVE CIRCLED NUMBER TWELVE 00BD ; [.15E6.0020.001E.00BD][*05AC.0020.001E.00BD][.15E7.0020.001E.00BD] # VULGAR FRACTION ONE HALF 2480 ; [*02FB.0020.0004.2480][.15E6.0020.0004.2480][.15E8.0020.0004.2480][*02FC.0020.001F.2480] # PARENTHESIZED NUMBER THIRTEEN 2494 ; [.15E6.0020.0004.2494][.15E8.0020.0004.2494][*0273.0020.001F.2494] # NUMBER THIRTEEN FULL STOP 246C ; [.15E6.0020.0006.246C][.15E8.0020.0006.246C] # CIRCLED NUMBER THIRTEEN 24ED ; [.15E6.0020.0006.24ED][.15E8.0020.0006.24ED] # NEGATIVE CIRCLED NUMBER THIRTEEN 2481 ; [*02FB.0020.0004.2481][.15E6.0020.0004.2481][.15E9.0020.0004.2481][*02FC.0020.001F.2481] # PARENTHESIZED NUMBER FOURTEEN 2495 ; [.15E6.0020.0004.2495][.15E9.0020.0004.2495][*0273.0020.001F.2495] # NUMBER FOURTEEN FULL STOP 246D ; [.15E6.0020.0006.246D][.15E9.0020.0006.246D] # CIRCLED NUMBER FOURTEEN 24EE ; [.15E6.0020.0006.24EE][.15E9.0020.0006.24EE] # NEGATIVE CIRCLED NUMBER FOURTEEN 00BC ; [.15E6.0020.001E.00BC][*05AC.0020.001E.00BC][.15E9.0020.001E.00BC] # VULGAR FRACTION ONE QUARTER 2482 ; [*02FB.0020.0004.2482][.15E6.0020.0004.2482][.15EA.0020.0004.2482][*02FC.0020.001F.2482] # PARENTHESIZED NUMBER FIFTEEN 2496 ; [.15E6.0020.0004.2496][.15EA.0020.0004.2496][*0273.0020.001F.2496] # NUMBER FIFTEEN FULL STOP 246E ; [.15E6.0020.0006.246E][.15EA.0020.0006.246E] # CIRCLED NUMBER FIFTEEN 24EF ; [.15E6.0020.0006.24EF][.15EA.0020.0006.24EF] # NEGATIVE CIRCLED NUMBER FIFTEEN 2483 ; [*02FB.0020.0004.2483][.15E6.0020.0004.2483][.15EB.0020.0004.2483][*02FC.0020.001F.2483] # PARENTHESIZED NUMBER SIXTEEN 2497 ; [.15E6.0020.0004.2497][.15EB.0020.0004.2497][*0273.0020.001F.2497] # NUMBER SIXTEEN FULL STOP 246F ; [.15E6.0020.0006.246F][.15EB.0020.0006.246F] # CIRCLED NUMBER SIXTEEN 24F0 ; [.15E6.0020.0006.24F0][.15EB.0020.0006.24F0] # NEGATIVE CIRCLED NUMBER SIXTEEN 2484 ; [*02FB.0020.0004.2484][.15E6.0020.0004.2484][.15EC.0020.0004.2484][*02FC.0020.001F.2484] # PARENTHESIZED NUMBER SEVENTEEN 2498 ; [.15E6.0020.0004.2498][.15EC.0020.0004.2498][*0273.0020.001F.2498] # NUMBER SEVENTEEN FULL STOP 2470 ; [.15E6.0020.0006.2470][.15EC.0020.0006.2470] # CIRCLED NUMBER SEVENTEEN 24F1 ; [.15E6.0020.0006.24F1][.15EC.0020.0006.24F1] # NEGATIVE CIRCLED NUMBER SEVENTEEN 2485 ; [*02FB.0020.0004.2485][.15E6.0020.0004.2485][.15ED.0020.0004.2485][*02FC.0020.001F.2485] # PARENTHESIZED NUMBER EIGHTEEN 2499 ; [.15E6.0020.0004.2499][.15ED.0020.0004.2499][*0273.0020.001F.2499] # NUMBER EIGHTEEN FULL STOP 2471 ; [.15E6.0020.0006.2471][.15ED.0020.0006.2471] # CIRCLED NUMBER EIGHTEEN 24F2 ; [.15E6.0020.0006.24F2][.15ED.0020.0006.24F2] # NEGATIVE CIRCLED NUMBER EIGHTEEN 2486 ; [*02FB.0020.0004.2486][.15E6.0020.0004.2486][.15EE.0020.0004.2486][*02FC.0020.001F.2486] # PARENTHESIZED NUMBER NINETEEN 249A ; [.15E6.0020.0004.249A][.15EE.0020.0004.249A][*0273.0020.001F.249A] # NUMBER NINETEEN FULL STOP 2472 ; [.15E6.0020.0006.2472][.15EE.0020.0006.2472] # CIRCLED NUMBER NINETEEN 24F3 ; [.15E6.0020.0006.24F3][.15EE.0020.0006.24F3] # NEGATIVE CIRCLED NUMBER NINETEEN 0032 ; [.15E7.0020.0002.0032] # DIGIT TWO 2475 ; [*02FB.0020.0004.2475][.15E7.0020.0004.2475][*02FC.0020.001F.2475] # PARENTHESIZED DIGIT TWO 2489 ; [.15E7.0020.0004.2489][*0273.0020.001F.2489] # DIGIT TWO FULL STOP 1F103 ; [.15E7.0020.0004.1F103][*0221.0020.001F.1F103] # DIGIT TWO COMMA 1D7D0 ; [.15E7.0020.0005.1D7D0] # MATHEMATICAL BOLD DIGIT TWO 1D7DA ; [.15E7.0020.0005.1D7DA] # MATHEMATICAL DOUBLE-STRUCK DIGIT TWO 1D7E4 ; [.15E7.0020.0005.1D7E4] # MATHEMATICAL SANS-SERIF DIGIT TWO 1D7EE ; [.15E7.0020.0005.1D7EE] # MATHEMATICAL SANS-SERIF BOLD DIGIT TWO 1D7F8 ; [.15E7.0020.0005.1D7F8] # MATHEMATICAL MONOSPACE DIGIT TWO 2461 ; [.15E7.0020.0006.2461] # CIRCLED DIGIT TWO 24F6 ; [.15E7.0020.0006.24F6] # DOUBLE CIRCLED DIGIT TWO 00B2 ; [.15E7.0020.0014.00B2] # SUPERSCRIPT TWO 2082 ; [.15E7.0020.0015.2082] # SUBSCRIPT TWO 2487 ; [*02FB.0020.0004.2487][.15E7.0020.0004.2487][.15E5.0020.0004.2487][*02FC.0020.001F.2487] # PARENTHESIZED NUMBER TWENTY 249B ; [.15E7.0020.0004.249B][.15E5.0020.0004.249B][*0273.0020.001F.249B] # NUMBER TWENTY FULL STOP 2473 ; [.15E7.0020.0006.2473][.15E5.0020.0006.2473] # CIRCLED NUMBER TWENTY 24F4 ; [.15E7.0020.0006.24F4][.15E5.0020.0006.24F4] # NEGATIVE CIRCLED NUMBER TWENTY 0033 ; [.15E8.0020.0002.0033] # DIGIT THREE 2476 ; [*02FB.0020.0004.2476][.15E8.0020.0004.2476][*02FC.0020.001F.2476] # PARENTHESIZED DIGIT THREE 248A ; [.15E8.0020.0004.248A][*0273.0020.001F.248A] # DIGIT THREE FULL STOP 1F104 ; [.15E8.0020.0004.1F104][*0221.0020.001F.1F104] # DIGIT THREE COMMA 1D7D1 ; [.15E8.0020.0005.1D7D1] # MATHEMATICAL BOLD DIGIT THREE 1D7DB ; [.15E8.0020.0005.1D7DB] # MATHEMATICAL DOUBLE-STRUCK DIGIT THREE 1D7E5 ; [.15E8.0020.0005.1D7E5] # MATHEMATICAL SANS-SERIF DIGIT THREE 1D7EF ; [.15E8.0020.0005.1D7EF] # MATHEMATICAL SANS-SERIF BOLD DIGIT THREE 1D7F9 ; [.15E8.0020.0005.1D7F9] # MATHEMATICAL MONOSPACE DIGIT THREE 2462 ; [.15E8.0020.0006.2462] # CIRCLED DIGIT THREE 24F7 ; [.15E8.0020.0006.24F7] # DOUBLE CIRCLED DIGIT THREE 00B3 ; [.15E8.0020.0014.00B3] # SUPERSCRIPT THREE 2083 ; [.15E8.0020.0015.2083] # SUBSCRIPT THREE 00BE ; [.15E8.0020.001E.00BE][*05AC.0020.001E.00BE][.15E9.0020.001E.00BE] # VULGAR FRACTION THREE QUARTERS 0034 ; [.15E9.0020.0002.0034] # DIGIT FOUR 2477 ; [*02FB.0020.0004.2477][.15E9.0020.0004.2477][*02FC.0020.001F.2477] # PARENTHESIZED DIGIT FOUR 248B ; [.15E9.0020.0004.248B][*0273.0020.001F.248B] # DIGIT FOUR FULL STOP 1F105 ; [.15E9.0020.0004.1F105][*0221.0020.001F.1F105] # DIGIT FOUR COMMA 1D7D2 ; [.15E9.0020.0005.1D7D2] # MATHEMATICAL BOLD DIGIT FOUR 1D7DC ; [.15E9.0020.0005.1D7DC] # MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR 1D7E6 ; [.15E9.0020.0005.1D7E6] # MATHEMATICAL SANS-SERIF DIGIT FOUR 1D7F0 ; [.15E9.0020.0005.1D7F0] # MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR 1D7FA ; [.15E9.0020.0005.1D7FA] # MATHEMATICAL MONOSPACE DIGIT FOUR 2463 ; [.15E9.0020.0006.2463] # CIRCLED DIGIT FOUR 24F8 ; [.15E9.0020.0006.24F8] # DOUBLE CIRCLED DIGIT FOUR 2074 ; [.15E9.0020.0014.2074] # SUPERSCRIPT FOUR 2084 ; [.15E9.0020.0015.2084] # SUBSCRIPT FOUR 0035 ; [.15EA.0020.0002.0035] # DIGIT FIVE 2478 ; [*02FB.0020.0004.2478][.15EA.0020.0004.2478][*02FC.0020.001F.2478] # PARENTHESIZED DIGIT FIVE 248C ; [.15EA.0020.0004.248C][*0273.0020.001F.248C] # DIGIT FIVE FULL STOP 1F106 ; [.15EA.0020.0004.1F106][*0221.0020.001F.1F106] # DIGIT FIVE COMMA 1D7D3 ; [.15EA.0020.0005.1D7D3] # MATHEMATICAL BOLD DIGIT FIVE 1D7DD ; [.15EA.0020.0005.1D7DD] # MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE 1D7E7 ; [.15EA.0020.0005.1D7E7] # MATHEMATICAL SANS-SERIF DIGIT FIVE 1D7F1 ; [.15EA.0020.0005.1D7F1] # MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE 1D7FB ; [.15EA.0020.0005.1D7FB] # MATHEMATICAL MONOSPACE DIGIT FIVE 2464 ; [.15EA.0020.0006.2464] # CIRCLED DIGIT FIVE 24F9 ; [.15EA.0020.0006.24F9] # DOUBLE CIRCLED DIGIT FIVE 2075 ; [.15EA.0020.0014.2075] # SUPERSCRIPT FIVE 2085 ; [.15EA.0020.0015.2085] # SUBSCRIPT FIVE 0036 ; [.15EB.0020.0002.0036] # DIGIT SIX 2479 ; [*02FB.0020.0004.2479][.15EB.0020.0004.2479][*02FC.0020.001F.2479] # PARENTHESIZED DIGIT SIX 248D ; [.15EB.0020.0004.248D][*0273.0020.001F.248D] # DIGIT SIX FULL STOP 1F107 ; [.15EB.0020.0004.1F107][*0221.0020.001F.1F107] # DIGIT SIX COMMA 1D7D4 ; [.15EB.0020.0005.1D7D4] # MATHEMATICAL BOLD DIGIT SIX 1D7DE ; [.15EB.0020.0005.1D7DE] # MATHEMATICAL DOUBLE-STRUCK DIGIT SIX 1D7E8 ; [.15EB.0020.0005.1D7E8] # MATHEMATICAL SANS-SERIF DIGIT SIX 1D7F2 ; [.15EB.0020.0005.1D7F2] # MATHEMATICAL SANS-SERIF BOLD DIGIT SIX 1D7FC ; [.15EB.0020.0005.1D7FC] # MATHEMATICAL MONOSPACE DIGIT SIX 2465 ; [.15EB.0020.0006.2465] # CIRCLED DIGIT SIX 24FA ; [.15EB.0020.0006.24FA] # DOUBLE CIRCLED DIGIT SIX 2076 ; [.15EB.0020.0014.2076] # SUPERSCRIPT SIX 2086 ; [.15EB.0020.0015.2086] # SUBSCRIPT SIX 0037 ; [.15EC.0020.0002.0037] # DIGIT SEVEN 247A ; [*02FB.0020.0004.247A][.15EC.0020.0004.247A][*02FC.0020.001F.247A] # PARENTHESIZED DIGIT SEVEN 248E ; [.15EC.0020.0004.248E][*0273.0020.001F.248E] # DIGIT SEVEN FULL STOP 1F108 ; [.15EC.0020.0004.1F108][*0221.0020.001F.1F108] # DIGIT SEVEN COMMA 1D7D5 ; [.15EC.0020.0005.1D7D5] # MATHEMATICAL BOLD DIGIT SEVEN 1D7DF ; [.15EC.0020.0005.1D7DF] # MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN 1D7E9 ; [.15EC.0020.0005.1D7E9] # MATHEMATICAL SANS-SERIF DIGIT SEVEN 1D7F3 ; [.15EC.0020.0005.1D7F3] # MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN 1D7FD ; [.15EC.0020.0005.1D7FD] # MATHEMATICAL MONOSPACE DIGIT SEVEN 2466 ; [.15EC.0020.0006.2466] # CIRCLED DIGIT SEVEN 24FB ; [.15EC.0020.0006.24FB] # DOUBLE CIRCLED DIGIT SEVEN 2077 ; [.15EC.0020.0014.2077] # SUPERSCRIPT SEVEN 2087 ; [.15EC.0020.0015.2087] # SUBSCRIPT SEVEN 0038 ; [.15ED.0020.0002.0038] # DIGIT EIGHT 247B ; [*02FB.0020.0004.247B][.15ED.0020.0004.247B][*02FC.0020.001F.247B] # PARENTHESIZED DIGIT EIGHT 248F ; [.15ED.0020.0004.248F][*0273.0020.001F.248F] # DIGIT EIGHT FULL STOP 1F109 ; [.15ED.0020.0004.1F109][*0221.0020.001F.1F109] # DIGIT EIGHT COMMA 1D7D6 ; [.15ED.0020.0005.1D7D6] # MATHEMATICAL BOLD DIGIT EIGHT 1D7E0 ; [.15ED.0020.0005.1D7E0] # MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT 1D7EA ; [.15ED.0020.0005.1D7EA] # MATHEMATICAL SANS-SERIF DIGIT EIGHT 1D7F4 ; [.15ED.0020.0005.1D7F4] # MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT 1D7FE ; [.15ED.0020.0005.1D7FE] # MATHEMATICAL MONOSPACE DIGIT EIGHT 2467 ; [.15ED.0020.0006.2467] # CIRCLED DIGIT EIGHT 24FC ; [.15ED.0020.0006.24FC] # DOUBLE CIRCLED DIGIT EIGHT 2078 ; [.15ED.0020.0014.2078] # SUPERSCRIPT EIGHT 2088 ; [.15ED.0020.0015.2088] # SUBSCRIPT EIGHT 0039 ; [.15EE.0020.0002.0039] # DIGIT NINE 247C ; [*02FB.0020.0004.247C][.15EE.0020.0004.247C][*02FC.0020.001F.247C] # PARENTHESIZED DIGIT NINE 2490 ; [.15EE.0020.0004.2490][*0273.0020.001F.2490] # DIGIT NINE FULL STOP 1F10A ; [.15EE.0020.0004.1F10A][*0221.0020.001F.1F10A] # DIGIT NINE COMMA 1D7D7 ; [.15EE.0020.0005.1D7D7] # MATHEMATICAL BOLD DIGIT NINE 1D7E1 ; [.15EE.0020.0005.1D7E1] # MATHEMATICAL DOUBLE-STRUCK DIGIT NINE 1D7EB ; [.15EE.0020.0005.1D7EB] # MATHEMATICAL SANS-SERIF DIGIT NINE 1D7F5 ; [.15EE.0020.0005.1D7F5] # MATHEMATICAL SANS-SERIF BOLD DIGIT NINE 1D7FF ; [.15EE.0020.0005.1D7FF] # MATHEMATICAL MONOSPACE DIGIT NINE 2468 ; [.15EE.0020.0006.2468] # CIRCLED DIGIT NINE 24FD ; [.15EE.0020.0006.24FD] # DOUBLE CIRCLED DIGIT NINE 2079 ; [.15EE.0020.0014.2079] # SUPERSCRIPT NINE 2089 ; [.15EE.0020.0015.2089] # SUBSCRIPT NINE 0061 ; [.15EF.0020.0002.0061] # LATIN SMALL LETTER A 249C ; [*02FB.0020.0004.249C][.15EF.0020.0004.249C][*02FC.0020.001F.249C] # PARENTHESIZED LATIN SMALL LETTER A 1D41A ; [.15EF.0020.0005.1D41A] # MATHEMATICAL BOLD SMALL A 1D44E ; [.15EF.0020.0005.1D44E] # MATHEMATICAL ITALIC SMALL A 1D482 ; [.15EF.0020.0005.1D482] # MATHEMATICAL BOLD ITALIC SMALL A 1D4B6 ; [.15EF.0020.0005.1D4B6] # MATHEMATICAL SCRIPT SMALL A 1D4EA ; [.15EF.0020.0005.1D4EA] # MATHEMATICAL BOLD SCRIPT SMALL A 1D51E ; [.15EF.0020.0005.1D51E] # MATHEMATICAL FRAKTUR SMALL A 1D552 ; [.15EF.0020.0005.1D552] # MATHEMATICAL DOUBLE-STRUCK SMALL A 1D586 ; [.15EF.0020.0005.1D586] # MATHEMATICAL BOLD FRAKTUR SMALL A 1D5BA ; [.15EF.0020.0005.1D5BA] # MATHEMATICAL SANS-SERIF SMALL A 1D5EE ; [.15EF.0020.0005.1D5EE] # MATHEMATICAL SANS-SERIF BOLD SMALL A 1D622 ; [.15EF.0020.0005.1D622] # MATHEMATICAL SANS-SERIF ITALIC SMALL A 1D656 ; [.15EF.0020.0005.1D656] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A 1D68A ; [.15EF.0020.0005.1D68A] # MATHEMATICAL MONOSPACE SMALL A 24D0 ; [.15EF.0020.0006.24D0] # CIRCLED LATIN SMALL LETTER A 0041 ; [.15EF.0020.0008.0041] # LATIN CAPITAL LETTER A 1F110 ; [*02FB.0020.0004.1F110][.15EF.0020.000A.1F110][*02FC.0020.001F.1F110] # PARENTHESIZED LATIN CAPITAL LETTER A 1D400 ; [.15EF.0020.000B.1D400] # MATHEMATICAL BOLD CAPITAL A 1D434 ; [.15EF.0020.000B.1D434] # MATHEMATICAL ITALIC CAPITAL A 1D468 ; [.15EF.0020.000B.1D468] # MATHEMATICAL BOLD ITALIC CAPITAL A 1D49C ; [.15EF.0020.000B.1D49C] # MATHEMATICAL SCRIPT CAPITAL A 1D4D0 ; [.15EF.0020.000B.1D4D0] # MATHEMATICAL BOLD SCRIPT CAPITAL A 1D504 ; [.15EF.0020.000B.1D504] # MATHEMATICAL FRAKTUR CAPITAL A 1D538 ; [.15EF.0020.000B.1D538] # MATHEMATICAL DOUBLE-STRUCK CAPITAL A 1D56C ; [.15EF.0020.000B.1D56C] # MATHEMATICAL BOLD FRAKTUR CAPITAL A 1D5A0 ; [.15EF.0020.000B.1D5A0] # MATHEMATICAL SANS-SERIF CAPITAL A 1D5D4 ; [.15EF.0020.000B.1D5D4] # MATHEMATICAL SANS-SERIF BOLD CAPITAL A 1D608 ; [.15EF.0020.000B.1D608] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL A 1D63C ; [.15EF.0020.000B.1D63C] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A 1D670 ; [.15EF.0020.000B.1D670] # MATHEMATICAL MONOSPACE CAPITAL A 24B6 ; [.15EF.0020.000C.24B6] # CIRCLED LATIN CAPITAL LETTER A 1F150 ; [.15EF.0020.000C.1F150] # NEGATIVE CIRCLED LATIN CAPITAL LETTER A 00AA ; [.15EF.0020.0014.00AA] # FEMININE ORDINAL INDICATOR 1D43 ; [.15EF.0020.0014.1D43] # MODIFIER LETTER SMALL A 2090 ; [.15EF.0020.0015.2090] # LATIN SUBSCRIPT SMALL LETTER A 1D2C ; [.15EF.0020.001D.1D2C] # MODIFIER LETTER CAPITAL A 1F130 ; [.15EF.0020.001D.1F130] # SQUARED LATIN CAPITAL LETTER A 1F170 ; [.15EF.0020.001D.1F170] # NEGATIVE SQUARED LATIN CAPITAL LETTER A 00E1 ; [.15EF.0020.0002.0061][.0000.0032.0002.0301] # LATIN SMALL LETTER A WITH ACUTE 00C1 ; [.15EF.0020.0008.0041][.0000.0032.0002.0301] # LATIN CAPITAL LETTER A WITH ACUTE 00E0 ; [.15EF.0020.0002.0061][.0000.0035.0002.0300] # LATIN SMALL LETTER A WITH GRAVE 00C0 ; [.15EF.0020.0008.0041][.0000.0035.0002.0300] # LATIN CAPITAL LETTER A WITH GRAVE 0103 ; [.15EF.0020.0002.0061][.0000.0037.0002.0306] # LATIN SMALL LETTER A WITH BREVE 0102 ; [.15EF.0020.0008.0041][.0000.0037.0002.0306] # LATIN CAPITAL LETTER A WITH BREVE 1EAF ; [.15EF.0020.0002.0061][.0000.0037.0002.0306][.0000.0032.0002.0301] # LATIN SMALL LETTER A WITH BREVE AND ACUTE 1EAE ; [.15EF.0020.0008.0041][.0000.0037.0002.0306][.0000.0032.0002.0301] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE 1EB1 ; [.15EF.0020.0002.0061][.0000.0037.0002.0306][.0000.0035.0002.0300] # LATIN SMALL LETTER A WITH BREVE AND GRAVE 1EB0 ; [.15EF.0020.0008.0041][.0000.0037.0002.0306][.0000.0035.0002.0300] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE 1EB5 ; [.15EF.0020.0002.0061][.0000.0037.0002.0306][.0000.004E.0002.0303] # LATIN SMALL LETTER A WITH BREVE AND TILDE 1EB4 ; [.15EF.0020.0008.0041][.0000.0037.0002.0306][.0000.004E.0002.0303] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE 1EB3 ; [.15EF.0020.0002.0061][.0000.0037.0002.0306][.0000.0064.0002.0309] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE 1EB2 ; [.15EF.0020.0008.0041][.0000.0037.0002.0306][.0000.0064.0002.0309] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE 00E2 ; [.15EF.0020.0002.0061][.0000.003C.0002.0302] # LATIN SMALL LETTER A WITH CIRCUMFLEX 00C2 ; [.15EF.0020.0008.0041][.0000.003C.0002.0302] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 1EA5 ; [.15EF.0020.0002.0061][.0000.003C.0002.0302][.0000.0032.0002.0301] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE 1EA4 ; [.15EF.0020.0008.0041][.0000.003C.0002.0302][.0000.0032.0002.0301] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE 1EA7 ; [.15EF.0020.0002.0061][.0000.003C.0002.0302][.0000.0035.0002.0300] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE 1EA6 ; [.15EF.0020.0008.0041][.0000.003C.0002.0302][.0000.0035.0002.0300] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE 1EAB ; [.15EF.0020.0002.0061][.0000.003C.0002.0302][.0000.004E.0002.0303] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE 1EAA ; [.15EF.0020.0008.0041][.0000.003C.0002.0302][.0000.004E.0002.0303] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE 1EA9 ; [.15EF.0020.0002.0061][.0000.003C.0002.0302][.0000.0064.0002.0309] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 1EA8 ; [.15EF.0020.0008.0041][.0000.003C.0002.0302][.0000.0064.0002.0309] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 01CE ; [.15EF.0020.0002.0061][.0000.0041.0002.030C] # LATIN SMALL LETTER A WITH CARON 01CD ; [.15EF.0020.0008.0041][.0000.0041.0002.030C] # LATIN CAPITAL LETTER A WITH CARON 00E5 ; [.15EF.0020.0002.0061][.0000.0043.0002.030A] # LATIN SMALL LETTER A WITH RING ABOVE 00C5 ; [.15EF.0020.0008.0041][.0000.0043.0002.030A] # LATIN CAPITAL LETTER A WITH RING ABOVE 212B ; [.15EF.0020.0008.0041][.0000.0043.0002.030A] # ANGSTROM SIGN 01FB ; [.15EF.0020.0002.0061][.0000.0043.0002.030A][.0000.0032.0002.0301] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE 01FA ; [.15EF.0020.0008.0041][.0000.0043.0002.030A][.0000.0032.0002.0301] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE 00E4 ; [.15EF.0020.0002.0061][.0000.0047.0002.0308] # LATIN SMALL LETTER A WITH DIAERESIS 00C4 ; [.15EF.0020.0008.0041][.0000.0047.0002.0308] # LATIN CAPITAL LETTER A WITH DIAERESIS 01DF ; [.15EF.0020.0002.0061][.0000.0047.0002.0308][.0000.005B.0002.0304] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON 01DE ; [.15EF.0020.0008.0041][.0000.0047.0002.0308][.0000.005B.0002.0304] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON 00E3 ; [.15EF.0020.0002.0061][.0000.004E.0002.0303] # LATIN SMALL LETTER A WITH TILDE 00C3 ; [.15EF.0020.0008.0041][.0000.004E.0002.0303] # LATIN CAPITAL LETTER A WITH TILDE 0227 ; [.15EF.0020.0002.0061][.0000.0052.0002.0307] # LATIN SMALL LETTER A WITH DOT ABOVE 0226 ; [.15EF.0020.0008.0041][.0000.0052.0002.0307] # LATIN CAPITAL LETTER A WITH DOT ABOVE 01E1 ; [.15EF.0020.0002.0061][.0000.0052.0002.0307][.0000.005B.0002.0304] # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON 01E0 ; [.15EF.0020.0008.0041][.0000.0052.0002.0307][.0000.005B.0002.0304] # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON 0105 ; [.15EF.0020.0002.0061][.0000.0059.0002.0328] # LATIN SMALL LETTER A WITH OGONEK 0104 ; [.15EF.0020.0008.0041][.0000.0059.0002.0328] # LATIN CAPITAL LETTER A WITH OGONEK 0101 ; [.15EF.0020.0002.0061][.0000.005B.0002.0304] # LATIN SMALL LETTER A WITH MACRON 0100 ; [.15EF.0020.0008.0041][.0000.005B.0002.0304] # LATIN CAPITAL LETTER A WITH MACRON 1EA3 ; [.15EF.0020.0002.0061][.0000.0064.0002.0309] # LATIN SMALL LETTER A WITH HOOK ABOVE 1EA2 ; [.15EF.0020.0008.0041][.0000.0064.0002.0309] # LATIN CAPITAL LETTER A WITH HOOK ABOVE 0201 ; [.15EF.0020.0002.0061][.0000.0065.0002.030F] # LATIN SMALL LETTER A WITH DOUBLE GRAVE 0200 ; [.15EF.0020.0008.0041][.0000.0065.0002.030F] # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE 0203 ; [.15EF.0020.0002.0061][.0000.0067.0002.0311] # LATIN SMALL LETTER A WITH INVERTED BREVE 0202 ; [.15EF.0020.0008.0041][.0000.0067.0002.0311] # LATIN CAPITAL LETTER A WITH INVERTED BREVE 1EA1 ; [.15EF.0020.0002.0061][.0000.0070.0002.0323] # LATIN SMALL LETTER A WITH DOT BELOW 1EA0 ; [.15EF.0020.0008.0041][.0000.0070.0002.0323] # LATIN CAPITAL LETTER A WITH DOT BELOW 1EB7 ; [.15EF.0020.0002.0061][.0000.0070.0002.0323][.0000.0037.0002.0306] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW 1EB6 ; [.15EF.0020.0008.0041][.0000.0070.0002.0323][.0000.0037.0002.0306] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW 1EAD ; [.15EF.0020.0002.0061][.0000.0070.0002.0323][.0000.003C.0002.0302] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW 1EAC ; [.15EF.0020.0008.0041][.0000.0070.0002.0323][.0000.003C.0002.0302] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW 1E01 ; [.15EF.0020.0002.0061][.0000.0076.0002.0325] # LATIN SMALL LETTER A WITH RING BELOW 1E00 ; [.15EF.0020.0008.0041][.0000.0076.0002.0325] # LATIN CAPITAL LETTER A WITH RING BELOW A733 ; [.15EF.0020.0004.A733][.15EF.0020.0004.A733] # LATIN SMALL LETTER AA A732 ; [.15EF.0020.000A.A732][.15EF.0020.000A.A732] # LATIN CAPITAL LETTER AA 1F18E ; [.15EF.0020.001D.1F18E][.1605.0020.001D.1F18E] # NEGATIVE SQUARED AB 2100 ; [.15EF.0020.0004.2100][*0372.0020.0004.2100][.161D.0020.0004.2100] # ACCOUNT OF 00E6 ; [.15EF.0020.0004.00E6][.0000.0139.0004.00E6][.164C.0020.0004.00E6] # LATIN SMALL LETTER AE 00C6 ; [.15EF.0020.000A.00C6][.0000.0139.0004.00C6][.164C.0020.000A.00C6] # LATIN CAPITAL LETTER AE 1D2D ; [.15EF.0020.0014.1D2D][.0000.0139.0014.1D2D][.164C.0020.0014.1D2D] # MODIFIER LETTER CAPITAL AE 01FD ; [.15EF.0020.0004.01FD][.0000.0139.0004.01FD][.164C.0020.0004.01FD][.0000.0032.0002.01FD] # LATIN SMALL LETTER AE WITH ACUTE 01FC ; [.15EF.0020.000A.01FC][.0000.0139.0004.01FC][.164C.0020.000A.01FC][.0000.0032.0002.01FC] # LATIN CAPITAL LETTER AE WITH ACUTE 01E3 ; [.15EF.0020.0004.01E3][.0000.0139.0004.01E3][.164C.0020.0004.01E3][.0000.005B.0002.01E3] # LATIN SMALL LETTER AE WITH MACRON 01E2 ; [.15EF.0020.000A.01E2][.0000.0139.0004.01E2][.164C.0020.000A.01E2][.0000.005B.0002.01E2] # LATIN CAPITAL LETTER AE WITH MACRON A735 ; [.15EF.0020.0004.A735][.1771.0020.0004.A735] # LATIN SMALL LETTER AO A734 ; [.15EF.0020.000A.A734][.1771.0020.000A.A734] # LATIN CAPITAL LETTER AO 2101 ; [.15EF.0020.0004.2101][*0372.0020.0004.2101][.17F3.0020.0004.2101] # ADDRESSED TO THE SUBJECT 214D ; [.15EF.0020.000A.214D][*0372.0020.0004.214D][.17F3.0020.000A.214D] # AKTIESELSKAB A737 ; [.15EF.0020.0004.A737][.1836.0020.0004.A737] # LATIN SMALL LETTER AU A736 ; [.15EF.0020.000A.A736][.1836.0020.000A.A736] # LATIN CAPITAL LETTER AU A739 ; [.15EF.0020.0004.A739][.185F.0020.0004.A739] # LATIN SMALL LETTER AV A738 ; [.15EF.0020.000A.A738][.185F.0020.000A.A738] # LATIN CAPITAL LETTER AV A73B ; [.15EF.0020.0004.A73B][.0000.0139.0004.A73B][.185F.0020.0004.A73B] # LATIN SMALL LETTER AV WITH HORIZONTAL BAR A73A ; [.15EF.0020.000A.A73A][.0000.0139.0004.A73A][.185F.0020.000A.A73A] # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR A73D ; [.15EF.0020.0004.A73D][.1880.0020.0004.A73D] # LATIN SMALL LETTER AY A73C ; [.15EF.0020.000A.A73C][.1880.0020.000A.A73C] # LATIN CAPITAL LETTER AY 1E9A ; [.15EF.0020.0004.1E9A][.18F1.0020.0004.1E9A] # LATIN SMALL LETTER A WITH RIGHT HALF RING 1D00 ; [.15F3.0020.0002.1D00] # LATIN LETTER SMALL CAPITAL A 2C65 ; [.15F4.0020.0002.2C65] # LATIN SMALL LETTER A WITH STROKE 023A ; [.15F4.0020.0008.023A] # LATIN CAPITAL LETTER A WITH STROKE 1D8F ; [.15F5.0020.0002.1D8F] # LATIN SMALL LETTER A WITH RETROFLEX HOOK 1D01 ; [.15F6.0020.0002.1D01] # LATIN LETTER SMALL CAPITAL AE 1D02 ; [.15F7.0020.0002.1D02] # LATIN SMALL LETTER TURNED AE 1D46 ; [.15F7.0020.0014.1D46] # MODIFIER LETTER SMALL TURNED AE 0250 ; [.15F8.0020.0002.0250] # LATIN SMALL LETTER TURNED A 2C6F ; [.15F8.0020.0008.2C6F] # LATIN CAPITAL LETTER TURNED A 1D44 ; [.15F8.0020.0014.1D44] # MODIFIER LETTER SMALL TURNED A 0251 ; [.15FC.0020.0002.0251] # LATIN SMALL LETTER ALPHA 2C6D ; [.15FC.0020.0008.2C6D] # LATIN CAPITAL LETTER ALPHA 1D45 ; [.15FC.0020.0014.1D45] # MODIFIER LETTER SMALL ALPHA 1D90 ; [.1600.0020.0002.1D90] # LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK 0252 ; [.1601.0020.0002.0252] # LATIN SMALL LETTER TURNED ALPHA 2C70 ; [.1601.0020.0008.2C70] # LATIN CAPITAL LETTER TURNED ALPHA 1D9B ; [.1601.0020.0014.1D9B] # MODIFIER LETTER SMALL TURNED ALPHA 0062 ; [.1605.0020.0002.0062] # LATIN SMALL LETTER B 249D ; [*02FB.0020.0004.249D][.1605.0020.0004.249D][*02FC.0020.001F.249D] # PARENTHESIZED LATIN SMALL LETTER B 1D41B ; [.1605.0020.0005.1D41B] # MATHEMATICAL BOLD SMALL B 1D44F ; [.1605.0020.0005.1D44F] # MATHEMATICAL ITALIC SMALL B 1D483 ; [.1605.0020.0005.1D483] # MATHEMATICAL BOLD ITALIC SMALL B 1D4B7 ; [.1605.0020.0005.1D4B7] # MATHEMATICAL SCRIPT SMALL B 1D4EB ; [.1605.0020.0005.1D4EB] # MATHEMATICAL BOLD SCRIPT SMALL B 1D51F ; [.1605.0020.0005.1D51F] # MATHEMATICAL FRAKTUR SMALL B 1D553 ; [.1605.0020.0005.1D553] # MATHEMATICAL DOUBLE-STRUCK SMALL B 1D587 ; [.1605.0020.0005.1D587] # MATHEMATICAL BOLD FRAKTUR SMALL B 1D5BB ; [.1605.0020.0005.1D5BB] # MATHEMATICAL SANS-SERIF SMALL B 1D5EF ; [.1605.0020.0005.1D5EF] # MATHEMATICAL SANS-SERIF BOLD SMALL B 1D623 ; [.1605.0020.0005.1D623] # MATHEMATICAL SANS-SERIF ITALIC SMALL B 1D657 ; [.1605.0020.0005.1D657] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B 1D68B ; [.1605.0020.0005.1D68B] # MATHEMATICAL MONOSPACE SMALL B 24D1 ; [.1605.0020.0006.24D1] # CIRCLED LATIN SMALL LETTER B 0042 ; [.1605.0020.0008.0042] # LATIN CAPITAL LETTER B 1F111 ; [*02FB.0020.0004.1F111][.1605.0020.000A.1F111][*02FC.0020.001F.1F111] # PARENTHESIZED LATIN CAPITAL LETTER B 212C ; [.1605.0020.000B.212C] # SCRIPT CAPITAL B 1D401 ; [.1605.0020.000B.1D401] # MATHEMATICAL BOLD CAPITAL B 1D435 ; [.1605.0020.000B.1D435] # MATHEMATICAL ITALIC CAPITAL B 1D469 ; [.1605.0020.000B.1D469] # MATHEMATICAL BOLD ITALIC CAPITAL B 1D4D1 ; [.1605.0020.000B.1D4D1] # MATHEMATICAL BOLD SCRIPT CAPITAL B 1D505 ; [.1605.0020.000B.1D505] # MATHEMATICAL FRAKTUR CAPITAL B 1D539 ; [.1605.0020.000B.1D539] # MATHEMATICAL DOUBLE-STRUCK CAPITAL B 1D56D ; [.1605.0020.000B.1D56D] # MATHEMATICAL BOLD FRAKTUR CAPITAL B 1D5A1 ; [.1605.0020.000B.1D5A1] # MATHEMATICAL SANS-SERIF CAPITAL B 1D5D5 ; [.1605.0020.000B.1D5D5] # MATHEMATICAL SANS-SERIF BOLD CAPITAL B 1D609 ; [.1605.0020.000B.1D609] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL B 1D63D ; [.1605.0020.000B.1D63D] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B 1D671 ; [.1605.0020.000B.1D671] # MATHEMATICAL MONOSPACE CAPITAL B 24B7 ; [.1605.0020.000C.24B7] # CIRCLED LATIN CAPITAL LETTER B 1F151 ; [.1605.0020.000C.1F151] # NEGATIVE CIRCLED LATIN CAPITAL LETTER B 1D47 ; [.1605.0020.0014.1D47] # MODIFIER LETTER SMALL B 1D2E ; [.1605.0020.001D.1D2E] # MODIFIER LETTER CAPITAL B 1F131 ; [.1605.0020.001D.1F131] # SQUARED LATIN CAPITAL LETTER B 1F171 ; [.1605.0020.001D.1F171] # NEGATIVE SQUARED LATIN CAPITAL LETTER B 1E03 ; [.1605.0020.0002.0062][.0000.0052.0002.0307] # LATIN SMALL LETTER B WITH DOT ABOVE 1E02 ; [.1605.0020.0008.0042][.0000.0052.0002.0307] # LATIN CAPITAL LETTER B WITH DOT ABOVE 1E05 ; [.1605.0020.0002.0062][.0000.0070.0002.0323] # LATIN SMALL LETTER B WITH DOT BELOW 1E04 ; [.1605.0020.0008.0042][.0000.0070.0002.0323] # LATIN CAPITAL LETTER B WITH DOT BELOW 1E07 ; [.1605.0020.0002.0062][.0000.007B.0002.0331] # LATIN SMALL LETTER B WITH LINE BELOW 1E06 ; [.1605.0020.0008.0042][.0000.007B.0002.0331] # LATIN CAPITAL LETTER B WITH LINE BELOW 0299 ; [.1609.0020.0002.0299] # LATIN LETTER SMALL CAPITAL B 0180 ; [.160D.0020.0002.0180] # LATIN SMALL LETTER B WITH STROKE 0243 ; [.160D.0020.0008.0243] # LATIN CAPITAL LETTER B WITH STROKE 1D2F ; [.1611.0020.0002.1D2F] # MODIFIER LETTER CAPITAL BARRED B 1D03 ; [.1612.0020.0002.1D03] # LATIN LETTER SMALL CAPITAL BARRED B 1D6C ; [.1613.0020.0002.1D6C] # LATIN SMALL LETTER B WITH MIDDLE TILDE 1D80 ; [.1614.0020.0002.1D80] # LATIN SMALL LETTER B WITH PALATAL HOOK 0253 ; [.1615.0020.0002.0253] # LATIN SMALL LETTER B WITH HOOK 0181 ; [.1615.0020.0008.0181] # LATIN CAPITAL LETTER B WITH HOOK 0183 ; [.1619.0020.0002.0183] # LATIN SMALL LETTER B WITH TOPBAR 0182 ; [.1619.0020.0008.0182] # LATIN CAPITAL LETTER B WITH TOPBAR 0063 ; [.161D.0020.0002.0063] # LATIN SMALL LETTER C 249E ; [*02FB.0020.0004.249E][.161D.0020.0004.249E][*02FC.0020.001F.249E] # PARENTHESIZED LATIN SMALL LETTER C 1D41C ; [.161D.0020.0005.1D41C] # MATHEMATICAL BOLD SMALL C 1D450 ; [.161D.0020.0005.1D450] # MATHEMATICAL ITALIC SMALL C 1D484 ; [.161D.0020.0005.1D484] # MATHEMATICAL BOLD ITALIC SMALL C 1D4B8 ; [.161D.0020.0005.1D4B8] # MATHEMATICAL SCRIPT SMALL C 1D4EC ; [.161D.0020.0005.1D4EC] # MATHEMATICAL BOLD SCRIPT SMALL C 1D520 ; [.161D.0020.0005.1D520] # MATHEMATICAL FRAKTUR SMALL C 1D554 ; [.161D.0020.0005.1D554] # MATHEMATICAL DOUBLE-STRUCK SMALL C 1D588 ; [.161D.0020.0005.1D588] # MATHEMATICAL BOLD FRAKTUR SMALL C 1D5BC ; [.161D.0020.0005.1D5BC] # MATHEMATICAL SANS-SERIF SMALL C 1D5F0 ; [.161D.0020.0005.1D5F0] # MATHEMATICAL SANS-SERIF BOLD SMALL C 1D624 ; [.161D.0020.0005.1D624] # MATHEMATICAL SANS-SERIF ITALIC SMALL C 1D658 ; [.161D.0020.0005.1D658] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C 1D68C ; [.161D.0020.0005.1D68C] # MATHEMATICAL MONOSPACE SMALL C 24D2 ; [.161D.0020.0006.24D2] # CIRCLED LATIN SMALL LETTER C 0043 ; [.161D.0020.0008.0043] # LATIN CAPITAL LETTER C 2103 ; [*0482.0020.0004.2103][.161D.0020.000A.2103] # DEGREE CELSIUS 1F112 ; [*02FB.0020.0004.1F112][.161D.0020.000A.1F112][*02FC.0020.001F.1F112] # PARENTHESIZED LATIN CAPITAL LETTER C 2102 ; [.161D.0020.000B.2102] # DOUBLE-STRUCK CAPITAL C 212D ; [.161D.0020.000B.212D] # BLACK-LETTER CAPITAL C 1D402 ; [.161D.0020.000B.1D402] # MATHEMATICAL BOLD CAPITAL C 1D436 ; [.161D.0020.000B.1D436] # MATHEMATICAL ITALIC CAPITAL C 1D46A ; [.161D.0020.000B.1D46A] # MATHEMATICAL BOLD ITALIC CAPITAL C 1D49E ; [.161D.0020.000B.1D49E] # MATHEMATICAL SCRIPT CAPITAL C 1D4D2 ; [.161D.0020.000B.1D4D2] # MATHEMATICAL BOLD SCRIPT CAPITAL C 1D56E ; [.161D.0020.000B.1D56E] # MATHEMATICAL BOLD FRAKTUR CAPITAL C 1D5A2 ; [.161D.0020.000B.1D5A2] # MATHEMATICAL SANS-SERIF CAPITAL C 1D5D6 ; [.161D.0020.000B.1D5D6] # MATHEMATICAL SANS-SERIF BOLD CAPITAL C 1D60A ; [.161D.0020.000B.1D60A] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL C 1D63E ; [.161D.0020.000B.1D63E] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C 1D672 ; [.161D.0020.000B.1D672] # MATHEMATICAL MONOSPACE CAPITAL C 24B8 ; [.161D.0020.000C.24B8] # CIRCLED LATIN CAPITAL LETTER C 1F12B ; [.161D.0020.000C.1F12B] # CIRCLED ITALIC LATIN CAPITAL LETTER C 1F152 ; [.161D.0020.000C.1F152] # NEGATIVE CIRCLED LATIN CAPITAL LETTER C 1D9C ; [.161D.0020.0014.1D9C] # MODIFIER LETTER SMALL C 1F132 ; [.161D.0020.001D.1F132] # SQUARED LATIN CAPITAL LETTER C 1F172 ; [.161D.0020.001D.1F172] # NEGATIVE SQUARED LATIN CAPITAL LETTER C 0107 ; [.161D.0020.0002.0063][.0000.0032.0002.0301] # LATIN SMALL LETTER C WITH ACUTE 0106 ; [.161D.0020.0008.0043][.0000.0032.0002.0301] # LATIN CAPITAL LETTER C WITH ACUTE 0109 ; [.161D.0020.0002.0063][.0000.003C.0002.0302] # LATIN SMALL LETTER C WITH CIRCUMFLEX 0108 ; [.161D.0020.0008.0043][.0000.003C.0002.0302] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX 010D ; [.161D.0020.0002.0063][.0000.0041.0002.030C] # LATIN SMALL LETTER C WITH CARON 010C ; [.161D.0020.0008.0043][.0000.0041.0002.030C] # LATIN CAPITAL LETTER C WITH CARON 010B ; [.161D.0020.0002.0063][.0000.0052.0002.0307] # LATIN SMALL LETTER C WITH DOT ABOVE 010A ; [.161D.0020.0008.0043][.0000.0052.0002.0307] # LATIN CAPITAL LETTER C WITH DOT ABOVE 00E7 ; [.161D.0020.0002.0063][.0000.0056.0002.0327] # LATIN SMALL LETTER C WITH CEDILLA 00C7 ; [.161D.0020.0008.0043][.0000.0056.0002.0327] # LATIN CAPITAL LETTER C WITH CEDILLA 1E09 ; [.161D.0020.0002.0063][.0000.0056.0002.0327][.0000.0032.0002.0301] # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE 1E08 ; [.161D.0020.0008.0043][.0000.0056.0002.0327][.0000.0032.0002.0301] # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE 1F12D ; [.161D.0020.000C.1F12D][.1631.0020.000C.1F12D] # CIRCLED CD 1F191 ; [.161D.0020.001D.1F191][.1711.0020.001D.1F191] # SQUARED CL 2105 ; [.161D.0020.0004.2105][*0372.0020.0004.2105][.1771.0020.0004.2105] # CARE OF 1F192 ; [.161D.0020.001D.1F192][.1771.0020.001D.1F192][.1771.0020.001D.1F192][.1711.0020.001D.1F192] # SQUARED COOL 2106 ; [.161D.0020.0004.2106][*0372.0020.0004.2106][.1836.0020.0004.2106] # CADA UNA 1D04 ; [.1621.0020.0002.1D04] # LATIN LETTER SMALL CAPITAL C 023C ; [.1622.0020.0002.023C] # LATIN SMALL LETTER C WITH STROKE 023B ; [.1622.0020.0008.023B] # LATIN CAPITAL LETTER C WITH STROKE A793 ; [.1626.0020.0002.A793] # LATIN SMALL LETTER C WITH BAR A792 ; [.1626.0020.0008.A792] # LATIN CAPITAL LETTER C WITH BAR 0188 ; [.1627.0020.0002.0188] # LATIN SMALL LETTER C WITH HOOK 0187 ; [.1627.0020.0008.0187] # LATIN CAPITAL LETTER C WITH HOOK 0255 ; [.162B.0020.0002.0255] # LATIN SMALL LETTER C WITH CURL 1D9D ; [.162B.0020.0014.1D9D] # MODIFIER LETTER SMALL C WITH CURL A73F ; [.1630.0020.0002.A73F] # LATIN SMALL LETTER REVERSED C WITH DOT A73E ; [.1630.0020.0008.A73E] # LATIN CAPITAL LETTER REVERSED C WITH DOT 0064 ; [.1631.0020.0002.0064] # LATIN SMALL LETTER D 249F ; [*02FB.0020.0004.249F][.1631.0020.0004.249F][*02FC.0020.001F.249F] # PARENTHESIZED LATIN SMALL LETTER D 2146 ; [.1631.0020.0005.2146] # DOUBLE-STRUCK ITALIC SMALL D 1D41D ; [.1631.0020.0005.1D41D] # MATHEMATICAL BOLD SMALL D 1D451 ; [.1631.0020.0005.1D451] # MATHEMATICAL ITALIC SMALL D 1D485 ; [.1631.0020.0005.1D485] # MATHEMATICAL BOLD ITALIC SMALL D 1D4B9 ; [.1631.0020.0005.1D4B9] # MATHEMATICAL SCRIPT SMALL D 1D4ED ; [.1631.0020.0005.1D4ED] # MATHEMATICAL BOLD SCRIPT SMALL D 1D521 ; [.1631.0020.0005.1D521] # MATHEMATICAL FRAKTUR SMALL D 1D555 ; [.1631.0020.0005.1D555] # MATHEMATICAL DOUBLE-STRUCK SMALL D 1D589 ; [.1631.0020.0005.1D589] # MATHEMATICAL BOLD FRAKTUR SMALL D 1D5BD ; [.1631.0020.0005.1D5BD] # MATHEMATICAL SANS-SERIF SMALL D 1D5F1 ; [.1631.0020.0005.1D5F1] # MATHEMATICAL SANS-SERIF BOLD SMALL D 1D625 ; [.1631.0020.0005.1D625] # MATHEMATICAL SANS-SERIF ITALIC SMALL D 1D659 ; [.1631.0020.0005.1D659] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D 1D68D ; [.1631.0020.0005.1D68D] # MATHEMATICAL MONOSPACE SMALL D 24D3 ; [.1631.0020.0006.24D3] # CIRCLED LATIN SMALL LETTER D 0044 ; [.1631.0020.0008.0044] # LATIN CAPITAL LETTER D 1F113 ; [*02FB.0020.0004.1F113][.1631.0020.000A.1F113][*02FC.0020.001F.1F113] # PARENTHESIZED LATIN CAPITAL LETTER D 2145 ; [.1631.0020.000B.2145] # DOUBLE-STRUCK ITALIC CAPITAL D 1D403 ; [.1631.0020.000B.1D403] # MATHEMATICAL BOLD CAPITAL D 1D437 ; [.1631.0020.000B.1D437] # MATHEMATICAL ITALIC CAPITAL D 1D46B ; [.1631.0020.000B.1D46B] # MATHEMATICAL BOLD ITALIC CAPITAL D 1D49F ; [.1631.0020.000B.1D49F] # MATHEMATICAL SCRIPT CAPITAL D 1D4D3 ; [.1631.0020.000B.1D4D3] # MATHEMATICAL BOLD SCRIPT CAPITAL D 1D507 ; [.1631.0020.000B.1D507] # MATHEMATICAL FRAKTUR CAPITAL D 1D53B ; [.1631.0020.000B.1D53B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL D 1D56F ; [.1631.0020.000B.1D56F] # MATHEMATICAL BOLD FRAKTUR CAPITAL D 1D5A3 ; [.1631.0020.000B.1D5A3] # MATHEMATICAL SANS-SERIF CAPITAL D 1D5D7 ; [.1631.0020.000B.1D5D7] # MATHEMATICAL SANS-SERIF BOLD CAPITAL D 1D60B ; [.1631.0020.000B.1D60B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL D 1D63F ; [.1631.0020.000B.1D63F] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D 1D673 ; [.1631.0020.000B.1D673] # MATHEMATICAL MONOSPACE CAPITAL D 24B9 ; [.1631.0020.000C.24B9] # CIRCLED LATIN CAPITAL LETTER D 1F153 ; [.1631.0020.000C.1F153] # NEGATIVE CIRCLED LATIN CAPITAL LETTER D 1D48 ; [.1631.0020.0014.1D48] # MODIFIER LETTER SMALL D 1D30 ; [.1631.0020.001D.1D30] # MODIFIER LETTER CAPITAL D 1F133 ; [.1631.0020.001D.1F133] # SQUARED LATIN CAPITAL LETTER D 1F173 ; [.1631.0020.001D.1F173] # NEGATIVE SQUARED LATIN CAPITAL LETTER D 010F ; [.1631.0020.0002.0064][.0000.0041.0002.030C] # LATIN SMALL LETTER D WITH CARON 010E ; [.1631.0020.0008.0044][.0000.0041.0002.030C] # LATIN CAPITAL LETTER D WITH CARON 1E0B ; [.1631.0020.0002.0064][.0000.0052.0002.0307] # LATIN SMALL LETTER D WITH DOT ABOVE 1E0A ; [.1631.0020.0008.0044][.0000.0052.0002.0307] # LATIN CAPITAL LETTER D WITH DOT ABOVE 1E11 ; [.1631.0020.0002.0064][.0000.0056.0002.0327] # LATIN SMALL LETTER D WITH CEDILLA 1E10 ; [.1631.0020.0008.0044][.0000.0056.0002.0327] # LATIN CAPITAL LETTER D WITH CEDILLA 1E0D ; [.1631.0020.0002.0064][.0000.0070.0002.0323] # LATIN SMALL LETTER D WITH DOT BELOW 1E0C ; [.1631.0020.0008.0044][.0000.0070.0002.0323] # LATIN CAPITAL LETTER D WITH DOT BELOW 1E13 ; [.1631.0020.0002.0064][.0000.0078.0002.032D] # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW 1E12 ; [.1631.0020.0008.0044][.0000.0078.0002.032D] # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW 1E0F ; [.1631.0020.0002.0064][.0000.007B.0002.0331] # LATIN SMALL LETTER D WITH LINE BELOW 1E0E ; [.1631.0020.0008.0044][.0000.007B.0002.0331] # LATIN CAPITAL LETTER D WITH LINE BELOW 0111 ; [.1631.0020.0002.0064][.0000.007D.0002.0335] # LATIN SMALL LETTER D WITH STROKE 0110 ; [.1631.0020.0008.0044][.0000.007D.0002.0335] # LATIN CAPITAL LETTER D WITH STROKE 00F0 ; [.1631.0020.0004.00F0][.0000.0139.0004.00F0] # LATIN SMALL LETTER ETH 00D0 ; [.1631.0020.000A.00D0][.0000.0139.0004.00D0] # LATIN CAPITAL LETTER ETH 1D9E ; [.1631.0020.0014.1D9E][.0000.0139.0014.1D9E] # MODIFIER LETTER SMALL ETH A77A ; [.1631.0020.0004.A77A][.0000.013A.0004.A77A] # LATIN SMALL LETTER INSULAR D A779 ; [.1631.0020.000A.A779][.0000.013A.0004.A779] # LATIN CAPITAL LETTER INSULAR D 0238 ; [.1631.0020.0004.0238][.1605.0020.0004.0238] # LATIN SMALL LETTER DB DIGRAPH 1F190 ; [.1631.0020.001D.1F190][.16E6.0020.001D.1F190] # SQUARE DJ 01F3 ; [.1631.0020.0004.01F3][.1895.0020.0004.01F3] # LATIN SMALL LETTER DZ 02A3 ; [.1631.0020.0004.02A3][.1895.0020.0004.02A3] # LATIN SMALL LETTER DZ DIGRAPH 01F2 ; [.1631.0020.000A.01F2][.1895.0020.0004.01F2] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z 01F1 ; [.1631.0020.000A.01F1][.1895.0020.000A.01F1] # LATIN CAPITAL LETTER DZ 01C6 ; [.1631.0020.0004.01C6][.1895.0020.0004.01C6][.0000.0041.0004.01C6] # LATIN SMALL LETTER DZ WITH CARON 01C5 ; [.1631.0020.000A.01C5][.1895.0020.0004.01C5][.0000.0041.0004.01C5] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON 01C4 ; [.1631.0020.000A.01C4][.1895.0020.000A.01C4][.0000.0041.0004.01C4] # LATIN CAPITAL LETTER DZ WITH CARON 02A5 ; [.1631.0020.0004.02A5][.18A8.0020.0004.02A5] # LATIN SMALL LETTER DZ DIGRAPH WITH CURL 02A4 ; [.1631.0020.0004.02A4][.18B2.0020.0004.02A4] # LATIN SMALL LETTER DEZH DIGRAPH 1D05 ; [.1635.0020.0002.1D05] # LATIN LETTER SMALL CAPITAL D 1D06 ; [.1636.0020.0002.1D06] # LATIN LETTER SMALL CAPITAL ETH 1D6D ; [.1637.0020.0002.1D6D] # LATIN SMALL LETTER D WITH MIDDLE TILDE 1D81 ; [.1638.0020.0002.1D81] # LATIN SMALL LETTER D WITH PALATAL HOOK 0256 ; [.1639.0020.0002.0256] # LATIN SMALL LETTER D WITH TAIL 0189 ; [.1639.0020.0008.0189] # LATIN CAPITAL LETTER AFRICAN D 0257 ; [.163D.0020.0002.0257] # LATIN SMALL LETTER D WITH HOOK 018A ; [.163D.0020.0008.018A] # LATIN CAPITAL LETTER D WITH HOOK 1D91 ; [.1641.0020.0002.1D91] # LATIN SMALL LETTER D WITH HOOK AND TAIL 018C ; [.1642.0020.0002.018C] # LATIN SMALL LETTER D WITH TOPBAR 018B ; [.1642.0020.0008.018B] # LATIN CAPITAL LETTER D WITH TOPBAR 0221 ; [.1646.0020.0002.0221] # LATIN SMALL LETTER D WITH CURL A771 ; [.164A.0020.0002.A771] # LATIN SMALL LETTER DUM 1E9F ; [.164B.0020.0002.1E9F] # LATIN SMALL LETTER DELTA 0065 ; [.164C.0020.0002.0065] # LATIN SMALL LETTER E 24A0 ; [*02FB.0020.0004.24A0][.164C.0020.0004.24A0][*02FC.0020.001F.24A0] # PARENTHESIZED LATIN SMALL LETTER E 212F ; [.164C.0020.0005.212F] # SCRIPT SMALL E 2147 ; [.164C.0020.0005.2147] # DOUBLE-STRUCK ITALIC SMALL E 1D41E ; [.164C.0020.0005.1D41E] # MATHEMATICAL BOLD SMALL E 1D452 ; [.164C.0020.0005.1D452] # MATHEMATICAL ITALIC SMALL E 1D486 ; [.164C.0020.0005.1D486] # MATHEMATICAL BOLD ITALIC SMALL E 1D4EE ; [.164C.0020.0005.1D4EE] # MATHEMATICAL BOLD SCRIPT SMALL E 1D522 ; [.164C.0020.0005.1D522] # MATHEMATICAL FRAKTUR SMALL E 1D556 ; [.164C.0020.0005.1D556] # MATHEMATICAL DOUBLE-STRUCK SMALL E 1D58A ; [.164C.0020.0005.1D58A] # MATHEMATICAL BOLD FRAKTUR SMALL E 1D5BE ; [.164C.0020.0005.1D5BE] # MATHEMATICAL SANS-SERIF SMALL E 1D5F2 ; [.164C.0020.0005.1D5F2] # MATHEMATICAL SANS-SERIF BOLD SMALL E 1D626 ; [.164C.0020.0005.1D626] # MATHEMATICAL SANS-SERIF ITALIC SMALL E 1D65A ; [.164C.0020.0005.1D65A] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E 1D68E ; [.164C.0020.0005.1D68E] # MATHEMATICAL MONOSPACE SMALL E 24D4 ; [.164C.0020.0006.24D4] # CIRCLED LATIN SMALL LETTER E 0045 ; [.164C.0020.0008.0045] # LATIN CAPITAL LETTER E 1F114 ; [*02FB.0020.0004.1F114][.164C.0020.000A.1F114][*02FC.0020.001F.1F114] # PARENTHESIZED LATIN CAPITAL LETTER E 2130 ; [.164C.0020.000B.2130] # SCRIPT CAPITAL E 1D404 ; [.164C.0020.000B.1D404] # MATHEMATICAL BOLD CAPITAL E 1D438 ; [.164C.0020.000B.1D438] # MATHEMATICAL ITALIC CAPITAL E 1D46C ; [.164C.0020.000B.1D46C] # MATHEMATICAL BOLD ITALIC CAPITAL E 1D4D4 ; [.164C.0020.000B.1D4D4] # MATHEMATICAL BOLD SCRIPT CAPITAL E 1D508 ; [.164C.0020.000B.1D508] # MATHEMATICAL FRAKTUR CAPITAL E 1D53C ; [.164C.0020.000B.1D53C] # MATHEMATICAL DOUBLE-STRUCK CAPITAL E 1D570 ; [.164C.0020.000B.1D570] # MATHEMATICAL BOLD FRAKTUR CAPITAL E 1D5A4 ; [.164C.0020.000B.1D5A4] # MATHEMATICAL SANS-SERIF CAPITAL E 1D5D8 ; [.164C.0020.000B.1D5D8] # MATHEMATICAL SANS-SERIF BOLD CAPITAL E 1D60C ; [.164C.0020.000B.1D60C] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL E 1D640 ; [.164C.0020.000B.1D640] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E 1D674 ; [.164C.0020.000B.1D674] # MATHEMATICAL MONOSPACE CAPITAL E 24BA ; [.164C.0020.000C.24BA] # CIRCLED LATIN CAPITAL LETTER E 1F154 ; [.164C.0020.000C.1F154] # NEGATIVE CIRCLED LATIN CAPITAL LETTER E 1D49 ; [.164C.0020.0014.1D49] # MODIFIER LETTER SMALL E 2091 ; [.164C.0020.0015.2091] # LATIN SUBSCRIPT SMALL LETTER E 1D31 ; [.164C.0020.001D.1D31] # MODIFIER LETTER CAPITAL E 1F134 ; [.164C.0020.001D.1F134] # SQUARED LATIN CAPITAL LETTER E 1F174 ; [.164C.0020.001D.1F174] # NEGATIVE SQUARED LATIN CAPITAL LETTER E 00E9 ; [.164C.0020.0002.0065][.0000.0032.0002.0301] # LATIN SMALL LETTER E WITH ACUTE 00C9 ; [.164C.0020.0008.0045][.0000.0032.0002.0301] # LATIN CAPITAL LETTER E WITH ACUTE 00E8 ; [.164C.0020.0002.0065][.0000.0035.0002.0300] # LATIN SMALL LETTER E WITH GRAVE 00C8 ; [.164C.0020.0008.0045][.0000.0035.0002.0300] # LATIN CAPITAL LETTER E WITH GRAVE 0115 ; [.164C.0020.0002.0065][.0000.0037.0002.0306] # LATIN SMALL LETTER E WITH BREVE 0114 ; [.164C.0020.0008.0045][.0000.0037.0002.0306] # LATIN CAPITAL LETTER E WITH BREVE 00EA ; [.164C.0020.0002.0065][.0000.003C.0002.0302] # LATIN SMALL LETTER E WITH CIRCUMFLEX 00CA ; [.164C.0020.0008.0045][.0000.003C.0002.0302] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 1EBF ; [.164C.0020.0002.0065][.0000.003C.0002.0302][.0000.0032.0002.0301] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1EBE ; [.164C.0020.0008.0045][.0000.003C.0002.0302][.0000.0032.0002.0301] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 1EC1 ; [.164C.0020.0002.0065][.0000.003C.0002.0302][.0000.0035.0002.0300] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC0 ; [.164C.0020.0008.0045][.0000.003C.0002.0302][.0000.0035.0002.0300] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 1EC5 ; [.164C.0020.0002.0065][.0000.003C.0002.0302][.0000.004E.0002.0303] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1EC4 ; [.164C.0020.0008.0045][.0000.003C.0002.0302][.0000.004E.0002.0303] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1EC3 ; [.164C.0020.0002.0065][.0000.003C.0002.0302][.0000.0064.0002.0309] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 1EC2 ; [.164C.0020.0008.0045][.0000.003C.0002.0302][.0000.0064.0002.0309] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 011B ; [.164C.0020.0002.0065][.0000.0041.0002.030C] # LATIN SMALL LETTER E WITH CARON 011A ; [.164C.0020.0008.0045][.0000.0041.0002.030C] # LATIN CAPITAL LETTER E WITH CARON 00EB ; [.164C.0020.0002.0065][.0000.0047.0002.0308] # LATIN SMALL LETTER E WITH DIAERESIS 00CB ; [.164C.0020.0008.0045][.0000.0047.0002.0308] # LATIN CAPITAL LETTER E WITH DIAERESIS 1EBD ; [.164C.0020.0002.0065][.0000.004E.0002.0303] # LATIN SMALL LETTER E WITH TILDE 1EBC ; [.164C.0020.0008.0045][.0000.004E.0002.0303] # LATIN CAPITAL LETTER E WITH TILDE 0117 ; [.164C.0020.0002.0065][.0000.0052.0002.0307] # LATIN SMALL LETTER E WITH DOT ABOVE 0116 ; [.164C.0020.0008.0045][.0000.0052.0002.0307] # LATIN CAPITAL LETTER E WITH DOT ABOVE 0229 ; [.164C.0020.0002.0065][.0000.0056.0002.0327] # LATIN SMALL LETTER E WITH CEDILLA 0228 ; [.164C.0020.0008.0045][.0000.0056.0002.0327] # LATIN CAPITAL LETTER E WITH CEDILLA 1E1D ; [.164C.0020.0002.0065][.0000.0056.0002.0327][.0000.0037.0002.0306] # LATIN SMALL LETTER E WITH CEDILLA AND BREVE 1E1C ; [.164C.0020.0008.0045][.0000.0056.0002.0327][.0000.0037.0002.0306] # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE 0119 ; [.164C.0020.0002.0065][.0000.0059.0002.0328] # LATIN SMALL LETTER E WITH OGONEK 0118 ; [.164C.0020.0008.0045][.0000.0059.0002.0328] # LATIN CAPITAL LETTER E WITH OGONEK 0113 ; [.164C.0020.0002.0065][.0000.005B.0002.0304] # LATIN SMALL LETTER E WITH MACRON 0112 ; [.164C.0020.0008.0045][.0000.005B.0002.0304] # LATIN CAPITAL LETTER E WITH MACRON 1E17 ; [.164C.0020.0002.0065][.0000.005B.0002.0304][.0000.0032.0002.0301] # LATIN SMALL LETTER E WITH MACRON AND ACUTE 1E16 ; [.164C.0020.0008.0045][.0000.005B.0002.0304][.0000.0032.0002.0301] # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE 1E15 ; [.164C.0020.0002.0065][.0000.005B.0002.0304][.0000.0035.0002.0300] # LATIN SMALL LETTER E WITH MACRON AND GRAVE 1E14 ; [.164C.0020.0008.0045][.0000.005B.0002.0304][.0000.0035.0002.0300] # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE 1EBB ; [.164C.0020.0002.0065][.0000.0064.0002.0309] # LATIN SMALL LETTER E WITH HOOK ABOVE 1EBA ; [.164C.0020.0008.0045][.0000.0064.0002.0309] # LATIN CAPITAL LETTER E WITH HOOK ABOVE 0205 ; [.164C.0020.0002.0065][.0000.0065.0002.030F] # LATIN SMALL LETTER E WITH DOUBLE GRAVE 0204 ; [.164C.0020.0008.0045][.0000.0065.0002.030F] # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE 0207 ; [.164C.0020.0002.0065][.0000.0067.0002.0311] # LATIN SMALL LETTER E WITH INVERTED BREVE 0206 ; [.164C.0020.0008.0045][.0000.0067.0002.0311] # LATIN CAPITAL LETTER E WITH INVERTED BREVE 1EB9 ; [.164C.0020.0002.0065][.0000.0070.0002.0323] # LATIN SMALL LETTER E WITH DOT BELOW 1EB8 ; [.164C.0020.0008.0045][.0000.0070.0002.0323] # LATIN CAPITAL LETTER E WITH DOT BELOW 1EC7 ; [.164C.0020.0002.0065][.0000.0070.0002.0323][.0000.003C.0002.0302] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1EC6 ; [.164C.0020.0008.0045][.0000.0070.0002.0323][.0000.003C.0002.0302] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1E19 ; [.164C.0020.0002.0065][.0000.0078.0002.032D] # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW 1E18 ; [.164C.0020.0008.0045][.0000.0078.0002.032D] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW 1E1B ; [.164C.0020.0002.0065][.0000.007A.0002.0330] # LATIN SMALL LETTER E WITH TILDE BELOW 1E1A ; [.164C.0020.0008.0045][.0000.007A.0002.0330] # LATIN CAPITAL LETTER E WITH TILDE BELOW 1D07 ; [.1650.0020.0002.1D07] # LATIN LETTER SMALL CAPITAL E 0247 ; [.1651.0020.0002.0247] # LATIN SMALL LETTER E WITH STROKE 0246 ; [.1651.0020.0008.0246] # LATIN CAPITAL LETTER E WITH STROKE 1D92 ; [.1655.0020.0002.1D92] # LATIN SMALL LETTER E WITH RETROFLEX HOOK 2C78 ; [.1656.0020.0002.2C78] # LATIN SMALL LETTER E WITH NOTCH 01DD ; [.1657.0020.0002.01DD] # LATIN SMALL LETTER TURNED E 018E ; [.1657.0020.0008.018E] # LATIN CAPITAL LETTER REVERSED E 1D32 ; [.1657.0020.001D.1D32] # MODIFIER LETTER CAPITAL REVERSED E 2C7B ; [.165B.0020.0002.2C7B] # LATIN LETTER SMALL CAPITAL TURNED E 0259 ; [.165C.0020.0002.0259] # LATIN SMALL LETTER SCHWA 018F ; [.165C.0020.0008.018F] # LATIN CAPITAL LETTER SCHWA 1D4A ; [.165C.0020.0014.1D4A] # MODIFIER LETTER SMALL SCHWA 2094 ; [.165C.0020.0015.2094] # LATIN SUBSCRIPT SMALL LETTER SCHWA 1D95 ; [.1660.0020.0002.1D95] # LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK 025B ; [.1661.0020.0002.025B] # LATIN SMALL LETTER OPEN E 0190 ; [.1661.0020.0008.0190] # LATIN CAPITAL LETTER OPEN E 2107 ; [.1661.0020.000A.2107] # EULER CONSTANT 1D4B ; [.1661.0020.0014.1D4B] # MODIFIER LETTER SMALL OPEN E 1D93 ; [.1665.0020.0002.1D93] # LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK 0258 ; [.1666.0020.0002.0258] # LATIN SMALL LETTER REVERSED E 025A ; [.166A.0020.0002.025A] # LATIN SMALL LETTER SCHWA WITH HOOK 025C ; [.166E.0020.0002.025C] # LATIN SMALL LETTER REVERSED OPEN E 1D9F ; [.166E.0020.0014.1D9F] # MODIFIER LETTER SMALL REVERSED OPEN E 1D94 ; [.1672.0020.0002.1D94] # LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK 1D08 ; [.1673.0020.0002.1D08] # LATIN SMALL LETTER TURNED OPEN E 1D4C ; [.1673.0020.0014.1D4C] # MODIFIER LETTER SMALL TURNED OPEN E 025D ; [.1674.0020.0002.025D] # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK 025E ; [.1678.0020.0002.025E] # LATIN SMALL LETTER CLOSED REVERSED OPEN E 029A ; [.167C.0020.0002.029A] # LATIN SMALL LETTER CLOSED OPEN E 0264 ; [.1680.0020.0002.0264] # LATIN SMALL LETTER RAMS HORN 0066 ; [.1684.0020.0002.0066] # LATIN SMALL LETTER F 24A1 ; [*02FB.0020.0004.24A1][.1684.0020.0004.24A1][*02FC.0020.001F.24A1] # PARENTHESIZED LATIN SMALL LETTER F 1D41F ; [.1684.0020.0005.1D41F] # MATHEMATICAL BOLD SMALL F 1D453 ; [.1684.0020.0005.1D453] # MATHEMATICAL ITALIC SMALL F 1D487 ; [.1684.0020.0005.1D487] # MATHEMATICAL BOLD ITALIC SMALL F 1D4BB ; [.1684.0020.0005.1D4BB] # MATHEMATICAL SCRIPT SMALL F 1D4EF ; [.1684.0020.0005.1D4EF] # MATHEMATICAL BOLD SCRIPT SMALL F 1D523 ; [.1684.0020.0005.1D523] # MATHEMATICAL FRAKTUR SMALL F 1D557 ; [.1684.0020.0005.1D557] # MATHEMATICAL DOUBLE-STRUCK SMALL F 1D58B ; [.1684.0020.0005.1D58B] # MATHEMATICAL BOLD FRAKTUR SMALL F 1D5BF ; [.1684.0020.0005.1D5BF] # MATHEMATICAL SANS-SERIF SMALL F 1D5F3 ; [.1684.0020.0005.1D5F3] # MATHEMATICAL SANS-SERIF BOLD SMALL F 1D627 ; [.1684.0020.0005.1D627] # MATHEMATICAL SANS-SERIF ITALIC SMALL F 1D65B ; [.1684.0020.0005.1D65B] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F 1D68F ; [.1684.0020.0005.1D68F] # MATHEMATICAL MONOSPACE SMALL F 24D5 ; [.1684.0020.0006.24D5] # CIRCLED LATIN SMALL LETTER F 0046 ; [.1684.0020.0008.0046] # LATIN CAPITAL LETTER F 2109 ; [*0482.0020.0004.2109][.1684.0020.000A.2109] # DEGREE FAHRENHEIT 1F115 ; [*02FB.0020.0004.1F115][.1684.0020.000A.1F115][*02FC.0020.001F.1F115] # PARENTHESIZED LATIN CAPITAL LETTER F 2131 ; [.1684.0020.000B.2131] # SCRIPT CAPITAL F 1D405 ; [.1684.0020.000B.1D405] # MATHEMATICAL BOLD CAPITAL F 1D439 ; [.1684.0020.000B.1D439] # MATHEMATICAL ITALIC CAPITAL F 1D46D ; [.1684.0020.000B.1D46D] # MATHEMATICAL BOLD ITALIC CAPITAL F 1D4D5 ; [.1684.0020.000B.1D4D5] # MATHEMATICAL BOLD SCRIPT CAPITAL F 1D509 ; [.1684.0020.000B.1D509] # MATHEMATICAL FRAKTUR CAPITAL F 1D53D ; [.1684.0020.000B.1D53D] # MATHEMATICAL DOUBLE-STRUCK CAPITAL F 1D571 ; [.1684.0020.000B.1D571] # MATHEMATICAL BOLD FRAKTUR CAPITAL F 1D5A5 ; [.1684.0020.000B.1D5A5] # MATHEMATICAL SANS-SERIF CAPITAL F 1D5D9 ; [.1684.0020.000B.1D5D9] # MATHEMATICAL SANS-SERIF BOLD CAPITAL F 1D60D ; [.1684.0020.000B.1D60D] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL F 1D641 ; [.1684.0020.000B.1D641] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F 1D675 ; [.1684.0020.000B.1D675] # MATHEMATICAL MONOSPACE CAPITAL F 24BB ; [.1684.0020.000C.24BB] # CIRCLED LATIN CAPITAL LETTER F 1F155 ; [.1684.0020.000C.1F155] # NEGATIVE CIRCLED LATIN CAPITAL LETTER F 1DA0 ; [.1684.0020.0014.1DA0] # MODIFIER LETTER SMALL F 1F135 ; [.1684.0020.001D.1F135] # SQUARED LATIN CAPITAL LETTER F 1F175 ; [.1684.0020.001D.1F175] # NEGATIVE SQUARED LATIN CAPITAL LETTER F 1E1F ; [.1684.0020.0002.0066][.0000.0052.0002.0307] # LATIN SMALL LETTER F WITH DOT ABOVE 1E1E ; [.1684.0020.0008.0046][.0000.0052.0002.0307] # LATIN CAPITAL LETTER F WITH DOT ABOVE A77C ; [.1684.0020.0004.A77C][.0000.013A.0004.A77C] # LATIN SMALL LETTER INSULAR F A77B ; [.1684.0020.000A.A77B][.0000.013A.0004.A77B] # LATIN CAPITAL LETTER INSULAR F 213B ; [.1684.0020.000A.213B][.15EF.0020.000A.213B][.187B.0020.000A.213B] # FACSIMILE SIGN FB00 ; [.1684.0020.0004.FB00][.1684.0020.0004.FB00] # LATIN SMALL LIGATURE FF FB03 ; [.1684.0020.0004.FB03][.1684.0020.0004.FB03][.16CD.0020.0004.FB03] # LATIN SMALL LIGATURE FFI FB04 ; [.1684.0020.0004.FB04][.1684.0020.0004.FB04][.1711.0020.0004.FB04] # LATIN SMALL LIGATURE FFL FB01 ; [.1684.0020.0004.FB01][.16CD.0020.0004.FB01] # LATIN SMALL LIGATURE FI FB02 ; [.1684.0020.0004.FB02][.1711.0020.0004.FB02] # LATIN SMALL LIGATURE FL 02A9 ; [.1684.0020.0004.02A9][.176D.0020.0004.02A9] # LATIN SMALL LETTER FENG DIGRAPH 1F193 ; [.1684.0020.001D.1F193][.17BD.0020.001D.1F193][.164C.0020.001D.1F193][.164C.0020.001D.1F193] # SQUARED FREE A730 ; [.1688.0020.0002.A730] # LATIN LETTER SMALL CAPITAL F 1D6E ; [.1689.0020.0002.1D6E] # LATIN SMALL LETTER F WITH MIDDLE TILDE 1D82 ; [.168A.0020.0002.1D82] # LATIN SMALL LETTER F WITH PALATAL HOOK 0192 ; [.168B.0020.0002.0192] # LATIN SMALL LETTER F WITH HOOK 0191 ; [.168B.0020.0008.0191] # LATIN CAPITAL LETTER F WITH HOOK 214E ; [.168F.0020.0002.214E] # TURNED SMALL F 2132 ; [.168F.0020.0008.2132] # TURNED CAPITAL F A7FB ; [.1690.0020.0002.A7FB] # LATIN EPIGRAPHIC LETTER REVERSED F 0067 ; [.1691.0020.0002.0067] # LATIN SMALL LETTER G 24A2 ; [*02FB.0020.0004.24A2][.1691.0020.0004.24A2][*02FC.0020.001F.24A2] # PARENTHESIZED LATIN SMALL LETTER G 210A ; [.1691.0020.0005.210A] # SCRIPT SMALL G 1D420 ; [.1691.0020.0005.1D420] # MATHEMATICAL BOLD SMALL G 1D454 ; [.1691.0020.0005.1D454] # MATHEMATICAL ITALIC SMALL G 1D488 ; [.1691.0020.0005.1D488] # MATHEMATICAL BOLD ITALIC SMALL G 1D4F0 ; [.1691.0020.0005.1D4F0] # MATHEMATICAL BOLD SCRIPT SMALL G 1D524 ; [.1691.0020.0005.1D524] # MATHEMATICAL FRAKTUR SMALL G 1D558 ; [.1691.0020.0005.1D558] # MATHEMATICAL DOUBLE-STRUCK SMALL G 1D58C ; [.1691.0020.0005.1D58C] # MATHEMATICAL BOLD FRAKTUR SMALL G 1D5C0 ; [.1691.0020.0005.1D5C0] # MATHEMATICAL SANS-SERIF SMALL G 1D5F4 ; [.1691.0020.0005.1D5F4] # MATHEMATICAL SANS-SERIF BOLD SMALL G 1D628 ; [.1691.0020.0005.1D628] # MATHEMATICAL SANS-SERIF ITALIC SMALL G 1D65C ; [.1691.0020.0005.1D65C] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G 1D690 ; [.1691.0020.0005.1D690] # MATHEMATICAL MONOSPACE SMALL G 24D6 ; [.1691.0020.0006.24D6] # CIRCLED LATIN SMALL LETTER G 0047 ; [.1691.0020.0008.0047] # LATIN CAPITAL LETTER G 1F116 ; [*02FB.0020.0004.1F116][.1691.0020.000A.1F116][*02FC.0020.001F.1F116] # PARENTHESIZED LATIN CAPITAL LETTER G 1D406 ; [.1691.0020.000B.1D406] # MATHEMATICAL BOLD CAPITAL G 1D43A ; [.1691.0020.000B.1D43A] # MATHEMATICAL ITALIC CAPITAL G 1D46E ; [.1691.0020.000B.1D46E] # MATHEMATICAL BOLD ITALIC CAPITAL G 1D4A2 ; [.1691.0020.000B.1D4A2] # MATHEMATICAL SCRIPT CAPITAL G 1D4D6 ; [.1691.0020.000B.1D4D6] # MATHEMATICAL BOLD SCRIPT CAPITAL G 1D50A ; [.1691.0020.000B.1D50A] # MATHEMATICAL FRAKTUR CAPITAL G 1D53E ; [.1691.0020.000B.1D53E] # MATHEMATICAL DOUBLE-STRUCK CAPITAL G 1D572 ; [.1691.0020.000B.1D572] # MATHEMATICAL BOLD FRAKTUR CAPITAL G 1D5A6 ; [.1691.0020.000B.1D5A6] # MATHEMATICAL SANS-SERIF CAPITAL G 1D5DA ; [.1691.0020.000B.1D5DA] # MATHEMATICAL SANS-SERIF BOLD CAPITAL G 1D60E ; [.1691.0020.000B.1D60E] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL G 1D642 ; [.1691.0020.000B.1D642] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G 1D676 ; [.1691.0020.000B.1D676] # MATHEMATICAL MONOSPACE CAPITAL G 24BC ; [.1691.0020.000C.24BC] # CIRCLED LATIN CAPITAL LETTER G 1F156 ; [.1691.0020.000C.1F156] # NEGATIVE CIRCLED LATIN CAPITAL LETTER G 1D4D ; [.1691.0020.0014.1D4D] # MODIFIER LETTER SMALL G 1D33 ; [.1691.0020.001D.1D33] # MODIFIER LETTER CAPITAL G 1F136 ; [.1691.0020.001D.1F136] # SQUARED LATIN CAPITAL LETTER G 1F176 ; [.1691.0020.001D.1F176] # NEGATIVE SQUARED LATIN CAPITAL LETTER G 01F5 ; [.1691.0020.0002.0067][.0000.0032.0002.0301] # LATIN SMALL LETTER G WITH ACUTE 01F4 ; [.1691.0020.0008.0047][.0000.0032.0002.0301] # LATIN CAPITAL LETTER G WITH ACUTE 011F ; [.1691.0020.0002.0067][.0000.0037.0002.0306] # LATIN SMALL LETTER G WITH BREVE 011E ; [.1691.0020.0008.0047][.0000.0037.0002.0306] # LATIN CAPITAL LETTER G WITH BREVE 011D ; [.1691.0020.0002.0067][.0000.003C.0002.0302] # LATIN SMALL LETTER G WITH CIRCUMFLEX 011C ; [.1691.0020.0008.0047][.0000.003C.0002.0302] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX 01E7 ; [.1691.0020.0002.0067][.0000.0041.0002.030C] # LATIN SMALL LETTER G WITH CARON 01E6 ; [.1691.0020.0008.0047][.0000.0041.0002.030C] # LATIN CAPITAL LETTER G WITH CARON 0121 ; [.1691.0020.0002.0067][.0000.0052.0002.0307] # LATIN SMALL LETTER G WITH DOT ABOVE 0120 ; [.1691.0020.0008.0047][.0000.0052.0002.0307] # LATIN CAPITAL LETTER G WITH DOT ABOVE 0123 ; [.1691.0020.0002.0067][.0000.0056.0002.0327] # LATIN SMALL LETTER G WITH CEDILLA 0122 ; [.1691.0020.0008.0047][.0000.0056.0002.0327] # LATIN CAPITAL LETTER G WITH CEDILLA 1E21 ; [.1691.0020.0002.0067][.0000.005B.0002.0304] # LATIN SMALL LETTER G WITH MACRON 1E20 ; [.1691.0020.0008.0047][.0000.005B.0002.0304] # LATIN CAPITAL LETTER G WITH MACRON A7A1 ; [.1691.0020.0004.A7A1][.0000.0061.0004.A7A1] # LATIN SMALL LETTER G WITH OBLIQUE STROKE A7A0 ; [.1691.0020.000A.A7A0][.0000.0061.0004.A7A0] # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE 1D79 ; [.1691.0020.0004.1D79][.0000.013A.0004.1D79] # LATIN SMALL LETTER INSULAR G A77D ; [.1691.0020.000A.A77D][.0000.013A.0004.A77D] # LATIN CAPITAL LETTER INSULAR G 0261 ; [.1695.0020.0002.0261] # LATIN SMALL LETTER SCRIPT G 1DA2 ; [.1695.0020.0014.1DA2] # MODIFIER LETTER SMALL SCRIPT G 0262 ; [.1699.0020.0002.0262] # LATIN LETTER SMALL CAPITAL G 01E5 ; [.169D.0020.0002.01E5] # LATIN SMALL LETTER G WITH STROKE 01E4 ; [.169D.0020.0008.01E4] # LATIN CAPITAL LETTER G WITH STROKE 1D83 ; [.16A1.0020.0002.1D83] # LATIN SMALL LETTER G WITH PALATAL HOOK 0260 ; [.16A2.0020.0002.0260] # LATIN SMALL LETTER G WITH HOOK 0193 ; [.16A2.0020.0008.0193] # LATIN CAPITAL LETTER G WITH HOOK 029B ; [.16A6.0020.0002.029B] # LATIN LETTER SMALL CAPITAL G WITH HOOK 1D77 ; [.16AA.0020.0002.1D77] # LATIN SMALL LETTER TURNED G A77F ; [.16AB.0020.0002.A77F] # LATIN SMALL LETTER TURNED INSULAR G A77E ; [.16AB.0020.0008.A77E] # LATIN CAPITAL LETTER TURNED INSULAR G 0263 ; [.16AC.0020.0002.0263] # LATIN SMALL LETTER GAMMA 0194 ; [.16AC.0020.0008.0194] # LATIN CAPITAL LETTER GAMMA 01A3 ; [.16B0.0020.0002.01A3] # LATIN SMALL LETTER OI 01A2 ; [.16B0.0020.0008.01A2] # LATIN CAPITAL LETTER OI 0068 ; [.16B4.0020.0002.0068] # LATIN SMALL LETTER H 24A3 ; [*02FB.0020.0004.24A3][.16B4.0020.0004.24A3][*02FC.0020.001F.24A3] # PARENTHESIZED LATIN SMALL LETTER H 210E ; [.16B4.0020.0005.210E] # PLANCK CONSTANT 1D421 ; [.16B4.0020.0005.1D421] # MATHEMATICAL BOLD SMALL H 1D489 ; [.16B4.0020.0005.1D489] # MATHEMATICAL BOLD ITALIC SMALL H 1D4BD ; [.16B4.0020.0005.1D4BD] # MATHEMATICAL SCRIPT SMALL H 1D4F1 ; [.16B4.0020.0005.1D4F1] # MATHEMATICAL BOLD SCRIPT SMALL H 1D525 ; [.16B4.0020.0005.1D525] # MATHEMATICAL FRAKTUR SMALL H 1D559 ; [.16B4.0020.0005.1D559] # MATHEMATICAL DOUBLE-STRUCK SMALL H 1D58D ; [.16B4.0020.0005.1D58D] # MATHEMATICAL BOLD FRAKTUR SMALL H 1D5C1 ; [.16B4.0020.0005.1D5C1] # MATHEMATICAL SANS-SERIF SMALL H 1D5F5 ; [.16B4.0020.0005.1D5F5] # MATHEMATICAL SANS-SERIF BOLD SMALL H 1D629 ; [.16B4.0020.0005.1D629] # MATHEMATICAL SANS-SERIF ITALIC SMALL H 1D65D ; [.16B4.0020.0005.1D65D] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H 1D691 ; [.16B4.0020.0005.1D691] # MATHEMATICAL MONOSPACE SMALL H 24D7 ; [.16B4.0020.0006.24D7] # CIRCLED LATIN SMALL LETTER H 0048 ; [.16B4.0020.0008.0048] # LATIN CAPITAL LETTER H 1F117 ; [*02FB.0020.0004.1F117][.16B4.0020.000A.1F117][*02FC.0020.001F.1F117] # PARENTHESIZED LATIN CAPITAL LETTER H 210B ; [.16B4.0020.000B.210B] # SCRIPT CAPITAL H 210C ; [.16B4.0020.000B.210C] # BLACK-LETTER CAPITAL H 210D ; [.16B4.0020.000B.210D] # DOUBLE-STRUCK CAPITAL H 1D407 ; [.16B4.0020.000B.1D407] # MATHEMATICAL BOLD CAPITAL H 1D43B ; [.16B4.0020.000B.1D43B] # MATHEMATICAL ITALIC CAPITAL H 1D46F ; [.16B4.0020.000B.1D46F] # MATHEMATICAL BOLD ITALIC CAPITAL H 1D4D7 ; [.16B4.0020.000B.1D4D7] # MATHEMATICAL BOLD SCRIPT CAPITAL H 1D573 ; [.16B4.0020.000B.1D573] # MATHEMATICAL BOLD FRAKTUR CAPITAL H 1D5A7 ; [.16B4.0020.000B.1D5A7] # MATHEMATICAL SANS-SERIF CAPITAL H 1D5DB ; [.16B4.0020.000B.1D5DB] # MATHEMATICAL SANS-SERIF BOLD CAPITAL H 1D60F ; [.16B4.0020.000B.1D60F] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL H 1D643 ; [.16B4.0020.000B.1D643] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H 1D677 ; [.16B4.0020.000B.1D677] # MATHEMATICAL MONOSPACE CAPITAL H 24BD ; [.16B4.0020.000C.24BD] # CIRCLED LATIN CAPITAL LETTER H 1F157 ; [.16B4.0020.000C.1F157] # NEGATIVE CIRCLED LATIN CAPITAL LETTER H 2095 ; [.16B4.0020.0015.2095] # LATIN SUBSCRIPT SMALL LETTER H 1D34 ; [.16B4.0020.001D.1D34] # MODIFIER LETTER CAPITAL H 1F137 ; [.16B4.0020.001D.1F137] # SQUARED LATIN CAPITAL LETTER H 1F177 ; [.16B4.0020.001D.1F177] # NEGATIVE SQUARED LATIN CAPITAL LETTER H 0125 ; [.16B4.0020.0002.0068][.0000.003C.0002.0302] # LATIN SMALL LETTER H WITH CIRCUMFLEX 0124 ; [.16B4.0020.0008.0048][.0000.003C.0002.0302] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX 021F ; [.16B4.0020.0002.0068][.0000.0041.0002.030C] # LATIN SMALL LETTER H WITH CARON 021E ; [.16B4.0020.0008.0048][.0000.0041.0002.030C] # LATIN CAPITAL LETTER H WITH CARON 1E27 ; [.16B4.0020.0002.0068][.0000.0047.0002.0308] # LATIN SMALL LETTER H WITH DIAERESIS 1E26 ; [.16B4.0020.0008.0048][.0000.0047.0002.0308] # LATIN CAPITAL LETTER H WITH DIAERESIS 1E23 ; [.16B4.0020.0002.0068][.0000.0052.0002.0307] # LATIN SMALL LETTER H WITH DOT ABOVE 1E22 ; [.16B4.0020.0008.0048][.0000.0052.0002.0307] # LATIN CAPITAL LETTER H WITH DOT ABOVE 1E29 ; [.16B4.0020.0002.0068][.0000.0056.0002.0327] # LATIN SMALL LETTER H WITH CEDILLA 1E28 ; [.16B4.0020.0008.0048][.0000.0056.0002.0327] # LATIN CAPITAL LETTER H WITH CEDILLA 1E25 ; [.16B4.0020.0002.0068][.0000.0070.0002.0323] # LATIN SMALL LETTER H WITH DOT BELOW 1E24 ; [.16B4.0020.0008.0048][.0000.0070.0002.0323] # LATIN CAPITAL LETTER H WITH DOT BELOW 1E2B ; [.16B4.0020.0002.0068][.0000.0079.0002.032E] # LATIN SMALL LETTER H WITH BREVE BELOW 1E2A ; [.16B4.0020.0008.0048][.0000.0079.0002.032E] # LATIN CAPITAL LETTER H WITH BREVE BELOW 1E96 ; [.16B4.0020.0002.0068][.0000.007B.0002.0331] # LATIN SMALL LETTER H WITH LINE BELOW 0127 ; [.16B4.0020.0002.0068][.0000.007D.0002.0335] # LATIN SMALL LETTER H WITH STROKE 210F ; [.16B4.0020.0002.210F][.0000.007D.0002.210F] # PLANCK CONSTANT OVER TWO PI 0126 ; [.16B4.0020.0008.0048][.0000.007D.0002.0335] # LATIN CAPITAL LETTER H WITH STROKE A7F8 ; [.16B4.0020.0014.A7F8][.0000.007D.0014.A7F8] # MODIFIER LETTER CAPITAL H WITH STROKE 1F14A ; [.16B4.0020.001D.1F14A][.185F.0020.001D.1F14A] # SQUARED HV 029C ; [.16B8.0020.0002.029C] # LATIN LETTER SMALL CAPITAL H 0195 ; [.16BC.0020.0002.0195] # LATIN SMALL LETTER HV 01F6 ; [.16BC.0020.0008.01F6] # LATIN CAPITAL LETTER HWAIR 0266 ; [.16C0.0020.0002.0266] # LATIN SMALL LETTER H WITH HOOK A7AA ; [.16C0.0020.0008.A7AA] # LATIN CAPITAL LETTER H WITH HOOK 2C68 ; [.16C4.0020.0002.2C68] # LATIN SMALL LETTER H WITH DESCENDER 2C67 ; [.16C4.0020.0008.2C67] # LATIN CAPITAL LETTER H WITH DESCENDER 2C76 ; [.16C5.0020.0002.2C76] # LATIN SMALL LETTER HALF H 2C75 ; [.16C5.0020.0008.2C75] # LATIN CAPITAL LETTER HALF H A727 ; [.16C6.0020.0002.A727] # LATIN SMALL LETTER HENG A726 ; [.16C6.0020.0008.A726] # LATIN CAPITAL LETTER HENG 0267 ; [.16C7.0020.0002.0267] # LATIN SMALL LETTER HENG WITH HOOK 0069 ; [.16CD.0020.0002.0069] # LATIN SMALL LETTER I 24A4 ; [*02FB.0020.0004.24A4][.16CD.0020.0004.24A4][*02FC.0020.001F.24A4] # PARENTHESIZED LATIN SMALL LETTER I 2139 ; [.16CD.0020.0005.2139] # INFORMATION SOURCE 2148 ; [.16CD.0020.0005.2148] # DOUBLE-STRUCK ITALIC SMALL I 1D422 ; [.16CD.0020.0005.1D422] # MATHEMATICAL BOLD SMALL I 1D456 ; [.16CD.0020.0005.1D456] # MATHEMATICAL ITALIC SMALL I 1D48A ; [.16CD.0020.0005.1D48A] # MATHEMATICAL BOLD ITALIC SMALL I 1D4BE ; [.16CD.0020.0005.1D4BE] # MATHEMATICAL SCRIPT SMALL I 1D4F2 ; [.16CD.0020.0005.1D4F2] # MATHEMATICAL BOLD SCRIPT SMALL I 1D526 ; [.16CD.0020.0005.1D526] # MATHEMATICAL FRAKTUR SMALL I 1D55A ; [.16CD.0020.0005.1D55A] # MATHEMATICAL DOUBLE-STRUCK SMALL I 1D58E ; [.16CD.0020.0005.1D58E] # MATHEMATICAL BOLD FRAKTUR SMALL I 1D5C2 ; [.16CD.0020.0005.1D5C2] # MATHEMATICAL SANS-SERIF SMALL I 1D5F6 ; [.16CD.0020.0005.1D5F6] # MATHEMATICAL SANS-SERIF BOLD SMALL I 1D62A ; [.16CD.0020.0005.1D62A] # MATHEMATICAL SANS-SERIF ITALIC SMALL I 1D65E ; [.16CD.0020.0005.1D65E] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I 1D692 ; [.16CD.0020.0005.1D692] # MATHEMATICAL MONOSPACE SMALL I 24D8 ; [.16CD.0020.0006.24D8] # CIRCLED LATIN SMALL LETTER I 0049 ; [.16CD.0020.0008.0049] # LATIN CAPITAL LETTER I 1F118 ; [*02FB.0020.0004.1F118][.16CD.0020.000A.1F118][*02FC.0020.001F.1F118] # PARENTHESIZED LATIN CAPITAL LETTER I 2110 ; [.16CD.0020.000B.2110] # SCRIPT CAPITAL I 2111 ; [.16CD.0020.000B.2111] # BLACK-LETTER CAPITAL I 1D408 ; [.16CD.0020.000B.1D408] # MATHEMATICAL BOLD CAPITAL I 1D43C ; [.16CD.0020.000B.1D43C] # MATHEMATICAL ITALIC CAPITAL I 1D470 ; [.16CD.0020.000B.1D470] # MATHEMATICAL BOLD ITALIC CAPITAL I 1D4D8 ; [.16CD.0020.000B.1D4D8] # MATHEMATICAL BOLD SCRIPT CAPITAL I 1D540 ; [.16CD.0020.000B.1D540] # MATHEMATICAL DOUBLE-STRUCK CAPITAL I 1D574 ; [.16CD.0020.000B.1D574] # MATHEMATICAL BOLD FRAKTUR CAPITAL I 1D5A8 ; [.16CD.0020.000B.1D5A8] # MATHEMATICAL SANS-SERIF CAPITAL I 1D5DC ; [.16CD.0020.000B.1D5DC] # MATHEMATICAL SANS-SERIF BOLD CAPITAL I 1D610 ; [.16CD.0020.000B.1D610] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL I 1D644 ; [.16CD.0020.000B.1D644] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I 1D678 ; [.16CD.0020.000B.1D678] # MATHEMATICAL MONOSPACE CAPITAL I 24BE ; [.16CD.0020.000C.24BE] # CIRCLED LATIN CAPITAL LETTER I 1F158 ; [.16CD.0020.000C.1F158] # NEGATIVE CIRCLED LATIN CAPITAL LETTER I 2071 ; [.16CD.0020.0014.2071] # SUPERSCRIPT LATIN SMALL LETTER I 1D62 ; [.16CD.0020.0015.1D62] # LATIN SUBSCRIPT SMALL LETTER I 1D35 ; [.16CD.0020.001D.1D35] # MODIFIER LETTER CAPITAL I 1F138 ; [.16CD.0020.001D.1F138] # SQUARED LATIN CAPITAL LETTER I 1F178 ; [.16CD.0020.001D.1F178] # NEGATIVE SQUARED LATIN CAPITAL LETTER I 00ED ; [.16CD.0020.0002.0069][.0000.0032.0002.0301] # LATIN SMALL LETTER I WITH ACUTE 00CD ; [.16CD.0020.0008.0049][.0000.0032.0002.0301] # LATIN CAPITAL LETTER I WITH ACUTE 00EC ; [.16CD.0020.0002.0069][.0000.0035.0002.0300] # LATIN SMALL LETTER I WITH GRAVE 00CC ; [.16CD.0020.0008.0049][.0000.0035.0002.0300] # LATIN CAPITAL LETTER I WITH GRAVE 012D ; [.16CD.0020.0002.0069][.0000.0037.0002.0306] # LATIN SMALL LETTER I WITH BREVE 012C ; [.16CD.0020.0008.0049][.0000.0037.0002.0306] # LATIN CAPITAL LETTER I WITH BREVE 00EE ; [.16CD.0020.0002.0069][.0000.003C.0002.0302] # LATIN SMALL LETTER I WITH CIRCUMFLEX 00CE ; [.16CD.0020.0008.0049][.0000.003C.0002.0302] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 01D0 ; [.16CD.0020.0002.0069][.0000.0041.0002.030C] # LATIN SMALL LETTER I WITH CARON 01CF ; [.16CD.0020.0008.0049][.0000.0041.0002.030C] # LATIN CAPITAL LETTER I WITH CARON 00EF ; [.16CD.0020.0002.0069][.0000.0047.0002.0308] # LATIN SMALL LETTER I WITH DIAERESIS 00CF ; [.16CD.0020.0008.0049][.0000.0047.0002.0308] # LATIN CAPITAL LETTER I WITH DIAERESIS 1E2F ; [.16CD.0020.0002.0069][.0000.0047.0002.0308][.0000.0032.0002.0301] # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE 1E2E ; [.16CD.0020.0008.0049][.0000.0047.0002.0308][.0000.0032.0002.0301] # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE 0129 ; [.16CD.0020.0002.0069][.0000.004E.0002.0303] # LATIN SMALL LETTER I WITH TILDE 0128 ; [.16CD.0020.0008.0049][.0000.004E.0002.0303] # LATIN CAPITAL LETTER I WITH TILDE 0130 ; [.16CD.0020.0008.0049][.0000.0052.0002.0307] # LATIN CAPITAL LETTER I WITH DOT ABOVE 012F ; [.16CD.0020.0002.0069][.0000.0059.0002.0328] # LATIN SMALL LETTER I WITH OGONEK 012E ; [.16CD.0020.0008.0049][.0000.0059.0002.0328] # LATIN CAPITAL LETTER I WITH OGONEK 012B ; [.16CD.0020.0002.0069][.0000.005B.0002.0304] # LATIN SMALL LETTER I WITH MACRON 012A ; [.16CD.0020.0008.0049][.0000.005B.0002.0304] # LATIN CAPITAL LETTER I WITH MACRON 1EC9 ; [.16CD.0020.0002.0069][.0000.0064.0002.0309] # LATIN SMALL LETTER I WITH HOOK ABOVE 1EC8 ; [.16CD.0020.0008.0049][.0000.0064.0002.0309] # LATIN CAPITAL LETTER I WITH HOOK ABOVE 0209 ; [.16CD.0020.0002.0069][.0000.0065.0002.030F] # LATIN SMALL LETTER I WITH DOUBLE GRAVE 0208 ; [.16CD.0020.0008.0049][.0000.0065.0002.030F] # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE 020B ; [.16CD.0020.0002.0069][.0000.0067.0002.0311] # LATIN SMALL LETTER I WITH INVERTED BREVE 020A ; [.16CD.0020.0008.0049][.0000.0067.0002.0311] # LATIN CAPITAL LETTER I WITH INVERTED BREVE 1ECB ; [.16CD.0020.0002.0069][.0000.0070.0002.0323] # LATIN SMALL LETTER I WITH DOT BELOW 1ECA ; [.16CD.0020.0008.0049][.0000.0070.0002.0323] # LATIN CAPITAL LETTER I WITH DOT BELOW 1E2D ; [.16CD.0020.0002.0069][.0000.007A.0002.0330] # LATIN SMALL LETTER I WITH TILDE BELOW 1E2C ; [.16CD.0020.0008.0049][.0000.007A.0002.0330] # LATIN CAPITAL LETTER I WITH TILDE BELOW 1F18B ; [.16CD.0020.001D.1F18B][.161D.0020.001D.1F18B] # NEGATIVE SQUARED IC 1F194 ; [.16CD.0020.001D.1F194][.1631.0020.001D.1F194] # SQUARED ID 0133 ; [.16CD.0020.0004.0133][.16E6.0020.0004.0133] # LATIN SMALL LIGATURE IJ 0132 ; [.16CD.0020.000A.0132][.16E6.0020.000A.0132] # LATIN CAPITAL LIGATURE IJ 0131 ; [.16D1.0020.0002.0131] # LATIN SMALL LETTER DOTLESS I 1D6A4 ; [.16D1.0020.0005.1D6A4] # MATHEMATICAL ITALIC SMALL DOTLESS I 026A ; [.16D5.0020.0002.026A] # LATIN LETTER SMALL CAPITAL I 1DA6 ; [.16D5.0020.0014.1DA6] # MODIFIER LETTER SMALL CAPITAL I A7FE ; [.16D9.0020.0002.A7FE] # LATIN EPIGRAPHIC LETTER I LONGA 1D09 ; [.16DA.0020.0002.1D09] # LATIN SMALL LETTER TURNED I 1D4E ; [.16DA.0020.0014.1D4E] # MODIFIER LETTER SMALL TURNED I 0268 ; [.16DB.0020.0002.0268] # LATIN SMALL LETTER I WITH STROKE 0197 ; [.16DB.0020.0008.0197] # LATIN CAPITAL LETTER I WITH STROKE 1DA4 ; [.16DB.0020.0014.1DA4] # MODIFIER LETTER SMALL I WITH STROKE 1D7B ; [.16DF.0020.0002.1D7B] # LATIN SMALL CAPITAL LETTER I WITH STROKE 1DA7 ; [.16DF.0020.0014.1DA7] # MODIFIER LETTER SMALL CAPITAL I WITH STROKE 1D96 ; [.16E0.0020.0002.1D96] # LATIN SMALL LETTER I WITH RETROFLEX HOOK 0269 ; [.16E1.0020.0002.0269] # LATIN SMALL LETTER IOTA 0196 ; [.16E1.0020.0008.0196] # LATIN CAPITAL LETTER IOTA 1DA5 ; [.16E1.0020.0014.1DA5] # MODIFIER LETTER SMALL IOTA 1D7C ; [.16E5.0020.0002.1D7C] # LATIN SMALL LETTER IOTA WITH STROKE 006A ; [.16E6.0020.0002.006A] # LATIN SMALL LETTER J 24A5 ; [*02FB.0020.0004.24A5][.16E6.0020.0004.24A5][*02FC.0020.001F.24A5] # PARENTHESIZED LATIN SMALL LETTER J 2149 ; [.16E6.0020.0005.2149] # DOUBLE-STRUCK ITALIC SMALL J 1D423 ; [.16E6.0020.0005.1D423] # MATHEMATICAL BOLD SMALL J 1D457 ; [.16E6.0020.0005.1D457] # MATHEMATICAL ITALIC SMALL J 1D48B ; [.16E6.0020.0005.1D48B] # MATHEMATICAL BOLD ITALIC SMALL J 1D4BF ; [.16E6.0020.0005.1D4BF] # MATHEMATICAL SCRIPT SMALL J 1D4F3 ; [.16E6.0020.0005.1D4F3] # MATHEMATICAL BOLD SCRIPT SMALL J 1D527 ; [.16E6.0020.0005.1D527] # MATHEMATICAL FRAKTUR SMALL J 1D55B ; [.16E6.0020.0005.1D55B] # MATHEMATICAL DOUBLE-STRUCK SMALL J 1D58F ; [.16E6.0020.0005.1D58F] # MATHEMATICAL BOLD FRAKTUR SMALL J 1D5C3 ; [.16E6.0020.0005.1D5C3] # MATHEMATICAL SANS-SERIF SMALL J 1D5F7 ; [.16E6.0020.0005.1D5F7] # MATHEMATICAL SANS-SERIF BOLD SMALL J 1D62B ; [.16E6.0020.0005.1D62B] # MATHEMATICAL SANS-SERIF ITALIC SMALL J 1D65F ; [.16E6.0020.0005.1D65F] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J 1D693 ; [.16E6.0020.0005.1D693] # MATHEMATICAL MONOSPACE SMALL J 24D9 ; [.16E6.0020.0006.24D9] # CIRCLED LATIN SMALL LETTER J 004A ; [.16E6.0020.0008.004A] # LATIN CAPITAL LETTER J 1F119 ; [*02FB.0020.0004.1F119][.16E6.0020.000A.1F119][*02FC.0020.001F.1F119] # PARENTHESIZED LATIN CAPITAL LETTER J 1D409 ; [.16E6.0020.000B.1D409] # MATHEMATICAL BOLD CAPITAL J 1D43D ; [.16E6.0020.000B.1D43D] # MATHEMATICAL ITALIC CAPITAL J 1D471 ; [.16E6.0020.000B.1D471] # MATHEMATICAL BOLD ITALIC CAPITAL J 1D4A5 ; [.16E6.0020.000B.1D4A5] # MATHEMATICAL SCRIPT CAPITAL J 1D4D9 ; [.16E6.0020.000B.1D4D9] # MATHEMATICAL BOLD SCRIPT CAPITAL J 1D50D ; [.16E6.0020.000B.1D50D] # MATHEMATICAL FRAKTUR CAPITAL J 1D541 ; [.16E6.0020.000B.1D541] # MATHEMATICAL DOUBLE-STRUCK CAPITAL J 1D575 ; [.16E6.0020.000B.1D575] # MATHEMATICAL BOLD FRAKTUR CAPITAL J 1D5A9 ; [.16E6.0020.000B.1D5A9] # MATHEMATICAL SANS-SERIF CAPITAL J 1D5DD ; [.16E6.0020.000B.1D5DD] # MATHEMATICAL SANS-SERIF BOLD CAPITAL J 1D611 ; [.16E6.0020.000B.1D611] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL J 1D645 ; [.16E6.0020.000B.1D645] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J 1D679 ; [.16E6.0020.000B.1D679] # MATHEMATICAL MONOSPACE CAPITAL J 24BF ; [.16E6.0020.000C.24BF] # CIRCLED LATIN CAPITAL LETTER J 1F159 ; [.16E6.0020.000C.1F159] # NEGATIVE CIRCLED LATIN CAPITAL LETTER J 2C7C ; [.16E6.0020.0015.2C7C] # LATIN SUBSCRIPT SMALL LETTER J 1D36 ; [.16E6.0020.001D.1D36] # MODIFIER LETTER CAPITAL J 1F139 ; [.16E6.0020.001D.1F139] # SQUARED LATIN CAPITAL LETTER J 1F179 ; [.16E6.0020.001D.1F179] # NEGATIVE SQUARED LATIN CAPITAL LETTER J 0135 ; [.16E6.0020.0002.006A][.0000.003C.0002.0302] # LATIN SMALL LETTER J WITH CIRCUMFLEX 0134 ; [.16E6.0020.0008.004A][.0000.003C.0002.0302] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX 01F0 ; [.16E6.0020.0002.006A][.0000.0041.0002.030C] # LATIN SMALL LETTER J WITH CARON 0237 ; [.16EA.0020.0002.0237] # LATIN SMALL LETTER DOTLESS J 1D6A5 ; [.16EA.0020.0005.1D6A5] # MATHEMATICAL ITALIC SMALL DOTLESS J 1D0A ; [.16EE.0020.0002.1D0A] # LATIN LETTER SMALL CAPITAL J 0249 ; [.16EF.0020.0002.0249] # LATIN SMALL LETTER J WITH STROKE 0248 ; [.16EF.0020.0008.0248] # LATIN CAPITAL LETTER J WITH STROKE 029D ; [.16F3.0020.0002.029D] # LATIN SMALL LETTER J WITH CROSSED-TAIL 1DA8 ; [.16F3.0020.0014.1DA8] # MODIFIER LETTER SMALL J WITH CROSSED-TAIL 025F ; [.16F7.0020.0002.025F] # LATIN SMALL LETTER DOTLESS J WITH STROKE 1DA1 ; [.16F7.0020.0014.1DA1] # MODIFIER LETTER SMALL DOTLESS J WITH STROKE 0284 ; [.16FB.0020.0002.0284] # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK 006B ; [.16FF.0020.0002.006B] # LATIN SMALL LETTER K 24A6 ; [*02FB.0020.0004.24A6][.16FF.0020.0004.24A6][*02FC.0020.001F.24A6] # PARENTHESIZED LATIN SMALL LETTER K 1D424 ; [.16FF.0020.0005.1D424] # MATHEMATICAL BOLD SMALL K 1D458 ; [.16FF.0020.0005.1D458] # MATHEMATICAL ITALIC SMALL K 1D48C ; [.16FF.0020.0005.1D48C] # MATHEMATICAL BOLD ITALIC SMALL K 1D4C0 ; [.16FF.0020.0005.1D4C0] # MATHEMATICAL SCRIPT SMALL K 1D4F4 ; [.16FF.0020.0005.1D4F4] # MATHEMATICAL BOLD SCRIPT SMALL K 1D528 ; [.16FF.0020.0005.1D528] # MATHEMATICAL FRAKTUR SMALL K 1D55C ; [.16FF.0020.0005.1D55C] # MATHEMATICAL DOUBLE-STRUCK SMALL K 1D590 ; [.16FF.0020.0005.1D590] # MATHEMATICAL BOLD FRAKTUR SMALL K 1D5C4 ; [.16FF.0020.0005.1D5C4] # MATHEMATICAL SANS-SERIF SMALL K 1D5F8 ; [.16FF.0020.0005.1D5F8] # MATHEMATICAL SANS-SERIF BOLD SMALL K 1D62C ; [.16FF.0020.0005.1D62C] # MATHEMATICAL SANS-SERIF ITALIC SMALL K 1D660 ; [.16FF.0020.0005.1D660] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K 1D694 ; [.16FF.0020.0005.1D694] # MATHEMATICAL MONOSPACE SMALL K 24DA ; [.16FF.0020.0006.24DA] # CIRCLED LATIN SMALL LETTER K 004B ; [.16FF.0020.0008.004B] # LATIN CAPITAL LETTER K 212A ; [.16FF.0020.0008.212A] # KELVIN SIGN 1F11A ; [*02FB.0020.0004.1F11A][.16FF.0020.000A.1F11A][*02FC.0020.001F.1F11A] # PARENTHESIZED LATIN CAPITAL LETTER K 1D40A ; [.16FF.0020.000B.1D40A] # MATHEMATICAL BOLD CAPITAL K 1D43E ; [.16FF.0020.000B.1D43E] # MATHEMATICAL ITALIC CAPITAL K 1D472 ; [.16FF.0020.000B.1D472] # MATHEMATICAL BOLD ITALIC CAPITAL K 1D4A6 ; [.16FF.0020.000B.1D4A6] # MATHEMATICAL SCRIPT CAPITAL K 1D4DA ; [.16FF.0020.000B.1D4DA] # MATHEMATICAL BOLD SCRIPT CAPITAL K 1D50E ; [.16FF.0020.000B.1D50E] # MATHEMATICAL FRAKTUR CAPITAL K 1D542 ; [.16FF.0020.000B.1D542] # MATHEMATICAL DOUBLE-STRUCK CAPITAL K 1D576 ; [.16FF.0020.000B.1D576] # MATHEMATICAL BOLD FRAKTUR CAPITAL K 1D5AA ; [.16FF.0020.000B.1D5AA] # MATHEMATICAL SANS-SERIF CAPITAL K 1D5DE ; [.16FF.0020.000B.1D5DE] # MATHEMATICAL SANS-SERIF BOLD CAPITAL K 1D612 ; [.16FF.0020.000B.1D612] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL K 1D646 ; [.16FF.0020.000B.1D646] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K 1D67A ; [.16FF.0020.000B.1D67A] # MATHEMATICAL MONOSPACE CAPITAL K 24C0 ; [.16FF.0020.000C.24C0] # CIRCLED LATIN CAPITAL LETTER K 1F15A ; [.16FF.0020.000C.1F15A] # NEGATIVE CIRCLED LATIN CAPITAL LETTER K 1D4F ; [.16FF.0020.0014.1D4F] # MODIFIER LETTER SMALL K 2096 ; [.16FF.0020.0015.2096] # LATIN SUBSCRIPT SMALL LETTER K 1D37 ; [.16FF.0020.001D.1D37] # MODIFIER LETTER CAPITAL K 1F13A ; [.16FF.0020.001D.1F13A] # SQUARED LATIN CAPITAL LETTER K 1F17A ; [.16FF.0020.001D.1F17A] # NEGATIVE SQUARED LATIN CAPITAL LETTER K 1E31 ; [.16FF.0020.0002.006B][.0000.0032.0002.0301] # LATIN SMALL LETTER K WITH ACUTE 1E30 ; [.16FF.0020.0008.004B][.0000.0032.0002.0301] # LATIN CAPITAL LETTER K WITH ACUTE 01E9 ; [.16FF.0020.0002.006B][.0000.0041.0002.030C] # LATIN SMALL LETTER K WITH CARON 01E8 ; [.16FF.0020.0008.004B][.0000.0041.0002.030C] # LATIN CAPITAL LETTER K WITH CARON 0137 ; [.16FF.0020.0002.006B][.0000.0056.0002.0327] # LATIN SMALL LETTER K WITH CEDILLA 0136 ; [.16FF.0020.0008.004B][.0000.0056.0002.0327] # LATIN CAPITAL LETTER K WITH CEDILLA A7A3 ; [.16FF.0020.0004.A7A3][.0000.0061.0004.A7A3] # LATIN SMALL LETTER K WITH OBLIQUE STROKE A7A2 ; [.16FF.0020.000A.A7A2][.0000.0061.0004.A7A2] # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE 1E33 ; [.16FF.0020.0002.006B][.0000.0070.0002.0323] # LATIN SMALL LETTER K WITH DOT BELOW 1E32 ; [.16FF.0020.0008.004B][.0000.0070.0002.0323] # LATIN CAPITAL LETTER K WITH DOT BELOW 1E35 ; [.16FF.0020.0002.006B][.0000.007B.0002.0331] # LATIN SMALL LETTER K WITH LINE BELOW 1E34 ; [.16FF.0020.0008.004B][.0000.007B.0002.0331] # LATIN CAPITAL LETTER K WITH LINE BELOW 1D0B ; [.1703.0020.0002.1D0B] # LATIN LETTER SMALL CAPITAL K 1D84 ; [.1704.0020.0002.1D84] # LATIN SMALL LETTER K WITH PALATAL HOOK 0199 ; [.1705.0020.0002.0199] # LATIN SMALL LETTER K WITH HOOK 0198 ; [.1705.0020.0008.0198] # LATIN CAPITAL LETTER K WITH HOOK 2C6A ; [.1709.0020.0002.2C6A] # LATIN SMALL LETTER K WITH DESCENDER 2C69 ; [.1709.0020.0008.2C69] # LATIN CAPITAL LETTER K WITH DESCENDER A741 ; [.170A.0020.0002.A741] # LATIN SMALL LETTER K WITH STROKE A740 ; [.170A.0020.0008.A740] # LATIN CAPITAL LETTER K WITH STROKE A743 ; [.170B.0020.0002.A743] # LATIN SMALL LETTER K WITH DIAGONAL STROKE A742 ; [.170B.0020.0008.A742] # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE A745 ; [.170C.0020.0002.A745] # LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE A744 ; [.170C.0020.0008.A744] # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE 029E ; [.170D.0020.0002.029E] # LATIN SMALL LETTER TURNED K 006C ; [.1711.0020.0002.006C] # LATIN SMALL LETTER L 24A7 ; [*02FB.0020.0004.24A7][.1711.0020.0004.24A7][*02FC.0020.001F.24A7] # PARENTHESIZED LATIN SMALL LETTER L 2113 ; [.1711.0020.0005.2113] # SCRIPT SMALL L 1D425 ; [.1711.0020.0005.1D425] # MATHEMATICAL BOLD SMALL L 1D459 ; [.1711.0020.0005.1D459] # MATHEMATICAL ITALIC SMALL L 1D48D ; [.1711.0020.0005.1D48D] # MATHEMATICAL BOLD ITALIC SMALL L 1D4C1 ; [.1711.0020.0005.1D4C1] # MATHEMATICAL SCRIPT SMALL L 1D4F5 ; [.1711.0020.0005.1D4F5] # MATHEMATICAL BOLD SCRIPT SMALL L 1D529 ; [.1711.0020.0005.1D529] # MATHEMATICAL FRAKTUR SMALL L 1D55D ; [.1711.0020.0005.1D55D] # MATHEMATICAL DOUBLE-STRUCK SMALL L 1D591 ; [.1711.0020.0005.1D591] # MATHEMATICAL BOLD FRAKTUR SMALL L 1D5C5 ; [.1711.0020.0005.1D5C5] # MATHEMATICAL SANS-SERIF SMALL L 1D5F9 ; [.1711.0020.0005.1D5F9] # MATHEMATICAL SANS-SERIF BOLD SMALL L 1D62D ; [.1711.0020.0005.1D62D] # MATHEMATICAL SANS-SERIF ITALIC SMALL L 1D661 ; [.1711.0020.0005.1D661] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L 1D695 ; [.1711.0020.0005.1D695] # MATHEMATICAL MONOSPACE SMALL L 24DB ; [.1711.0020.0006.24DB] # CIRCLED LATIN SMALL LETTER L 004C ; [.1711.0020.0008.004C] # LATIN CAPITAL LETTER L 1F11B ; [*02FB.0020.0004.1F11B][.1711.0020.000A.1F11B][*02FC.0020.001F.1F11B] # PARENTHESIZED LATIN CAPITAL LETTER L 2112 ; [.1711.0020.000B.2112] # SCRIPT CAPITAL L 1D40B ; [.1711.0020.000B.1D40B] # MATHEMATICAL BOLD CAPITAL L 1D43F ; [.1711.0020.000B.1D43F] # MATHEMATICAL ITALIC CAPITAL L 1D473 ; [.1711.0020.000B.1D473] # MATHEMATICAL BOLD ITALIC CAPITAL L 1D4DB ; [.1711.0020.000B.1D4DB] # MATHEMATICAL BOLD SCRIPT CAPITAL L 1D50F ; [.1711.0020.000B.1D50F] # MATHEMATICAL FRAKTUR CAPITAL L 1D543 ; [.1711.0020.000B.1D543] # MATHEMATICAL DOUBLE-STRUCK CAPITAL L 1D577 ; [.1711.0020.000B.1D577] # MATHEMATICAL BOLD FRAKTUR CAPITAL L 1D5AB ; [.1711.0020.000B.1D5AB] # MATHEMATICAL SANS-SERIF CAPITAL L 1D5DF ; [.1711.0020.000B.1D5DF] # MATHEMATICAL SANS-SERIF BOLD CAPITAL L 1D613 ; [.1711.0020.000B.1D613] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL L 1D647 ; [.1711.0020.000B.1D647] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L 1D67B ; [.1711.0020.000B.1D67B] # MATHEMATICAL MONOSPACE CAPITAL L 24C1 ; [.1711.0020.000C.24C1] # CIRCLED LATIN CAPITAL LETTER L 1F15B ; [.1711.0020.000C.1F15B] # NEGATIVE CIRCLED LATIN CAPITAL LETTER L 2097 ; [.1711.0020.0015.2097] # LATIN SUBSCRIPT SMALL LETTER L 1D38 ; [.1711.0020.001D.1D38] # MODIFIER LETTER CAPITAL L 1F13B ; [.1711.0020.001D.1F13B] # SQUARED LATIN CAPITAL LETTER L 1F17B ; [.1711.0020.001D.1F17B] # NEGATIVE SQUARED LATIN CAPITAL LETTER L 013A ; [.1711.0020.0002.006C][.0000.0032.0002.0301] # LATIN SMALL LETTER L WITH ACUTE 0139 ; [.1711.0020.0008.004C][.0000.0032.0002.0301] # LATIN CAPITAL LETTER L WITH ACUTE 013E ; [.1711.0020.0002.006C][.0000.0041.0002.030C] # LATIN SMALL LETTER L WITH CARON 013D ; [.1711.0020.0008.004C][.0000.0041.0002.030C] # LATIN CAPITAL LETTER L WITH CARON 013C ; [.1711.0020.0002.006C][.0000.0056.0002.0327] # LATIN SMALL LETTER L WITH CEDILLA 013B ; [.1711.0020.0008.004C][.0000.0056.0002.0327] # LATIN CAPITAL LETTER L WITH CEDILLA 1E37 ; [.1711.0020.0002.006C][.0000.0070.0002.0323] # LATIN SMALL LETTER L WITH DOT BELOW 1E36 ; [.1711.0020.0008.004C][.0000.0070.0002.0323] # LATIN CAPITAL LETTER L WITH DOT BELOW 1E39 ; [.1711.0020.0002.006C][.0000.0070.0002.0323][.0000.005B.0002.0304] # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON 1E38 ; [.1711.0020.0008.004C][.0000.0070.0002.0323][.0000.005B.0002.0304] # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON 1E3D ; [.1711.0020.0002.006C][.0000.0078.0002.032D] # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW 1E3C ; [.1711.0020.0008.004C][.0000.0078.0002.032D] # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW 1E3B ; [.1711.0020.0002.006C][.0000.007B.0002.0331] # LATIN SMALL LETTER L WITH LINE BELOW 1E3A ; [.1711.0020.0008.004C][.0000.007B.0002.0331] # LATIN CAPITAL LETTER L WITH LINE BELOW 0142 ; [.1711.0020.0002.006C][.0000.007D.0002.0335] # LATIN SMALL LETTER L WITH STROKE 0141 ; [.1711.0020.0008.004C][.0000.007D.0002.0335] # LATIN CAPITAL LETTER L WITH STROKE 0140 ; [.1711.0020.0002.0140][.0000.0139.0002.0140] # LATIN SMALL LETTER L WITH MIDDLE DOT 013F ; [.1711.0020.0008.013F][.0000.0139.0002.013F] # LATIN CAPITAL LETTER L WITH MIDDLE DOT 01C9 ; [.1711.0020.0004.01C9][.16E6.0020.0004.01C9] # LATIN SMALL LETTER LJ 01C8 ; [.1711.0020.000A.01C8][.16E6.0020.0004.01C8] # LATIN CAPITAL LETTER L WITH SMALL LETTER J 01C7 ; [.1711.0020.000A.01C7][.16E6.0020.000A.01C7] # LATIN CAPITAL LETTER LJ 1EFB ; [.1711.0020.0004.1EFB][.1711.0020.0004.1EFB] # LATIN SMALL LETTER MIDDLE-WELSH LL 1EFA ; [.1711.0020.000A.1EFA][.1711.0020.000A.1EFA] # LATIN CAPITAL LETTER MIDDLE-WELSH LL 02AA ; [.1711.0020.0004.02AA][.17F3.0020.0004.02AA] # LATIN SMALL LETTER LS DIGRAPH 02AB ; [.1711.0020.0004.02AB][.1895.0020.0004.02AB] # LATIN SMALL LETTER LZ DIGRAPH 029F ; [.1715.0020.0002.029F] # LATIN LETTER SMALL CAPITAL L 1DAB ; [.1715.0020.0014.1DAB] # MODIFIER LETTER SMALL CAPITAL L A747 ; [.1719.0020.0002.A747] # LATIN SMALL LETTER BROKEN L A746 ; [.1719.0020.0008.A746] # LATIN CAPITAL LETTER BROKEN L 1D0C ; [.171A.0020.0002.1D0C] # LATIN LETTER SMALL CAPITAL L WITH STROKE A749 ; [.171B.0020.0002.A749] # LATIN SMALL LETTER L WITH HIGH STROKE A748 ; [.171B.0020.0008.A748] # LATIN CAPITAL LETTER L WITH HIGH STROKE 019A ; [.171C.0020.0002.019A] # LATIN SMALL LETTER L WITH BAR 023D ; [.171C.0020.0008.023D] # LATIN CAPITAL LETTER L WITH BAR 2C61 ; [.1720.0020.0002.2C61] # LATIN SMALL LETTER L WITH DOUBLE BAR 2C60 ; [.1720.0020.0008.2C60] # LATIN CAPITAL LETTER L WITH DOUBLE BAR 026B ; [.1721.0020.0002.026B] # LATIN SMALL LETTER L WITH MIDDLE TILDE 2C62 ; [.1721.0020.0008.2C62] # LATIN CAPITAL LETTER L WITH MIDDLE TILDE 026C ; [.1725.0020.0002.026C] # LATIN SMALL LETTER L WITH BELT 1D85 ; [.1729.0020.0002.1D85] # LATIN SMALL LETTER L WITH PALATAL HOOK 1DAA ; [.1729.0020.0014.1DAA] # MODIFIER LETTER SMALL L WITH PALATAL HOOK 026D ; [.172A.0020.0002.026D] # LATIN SMALL LETTER L WITH RETROFLEX HOOK 1DA9 ; [.172A.0020.0014.1DA9] # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK A78E ; [.172E.0020.0002.A78E] # LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT 0234 ; [.172F.0020.0002.0234] # LATIN SMALL LETTER L WITH CURL A772 ; [.1733.0020.0002.A772] # LATIN SMALL LETTER LUM 026E ; [.1734.0020.0002.026E] # LATIN SMALL LETTER LEZH A781 ; [.1738.0020.0002.A781] # LATIN SMALL LETTER TURNED L A780 ; [.1738.0020.0008.A780] # LATIN CAPITAL LETTER TURNED L 019B ; [.1739.0020.0002.019B] # LATIN SMALL LETTER LAMBDA WITH STROKE 028E ; [.173D.0020.0002.028E] # LATIN SMALL LETTER TURNED Y 006D ; [.1741.0020.0002.006D] # LATIN SMALL LETTER M 24A8 ; [*02FB.0020.0004.24A8][.1741.0020.0004.24A8][*02FC.0020.001F.24A8] # PARENTHESIZED LATIN SMALL LETTER M 1D426 ; [.1741.0020.0005.1D426] # MATHEMATICAL BOLD SMALL M 1D45A ; [.1741.0020.0005.1D45A] # MATHEMATICAL ITALIC SMALL M 1D48E ; [.1741.0020.0005.1D48E] # MATHEMATICAL BOLD ITALIC SMALL M 1D4C2 ; [.1741.0020.0005.1D4C2] # MATHEMATICAL SCRIPT SMALL M 1D4F6 ; [.1741.0020.0005.1D4F6] # MATHEMATICAL BOLD SCRIPT SMALL M 1D52A ; [.1741.0020.0005.1D52A] # MATHEMATICAL FRAKTUR SMALL M 1D55E ; [.1741.0020.0005.1D55E] # MATHEMATICAL DOUBLE-STRUCK SMALL M 1D592 ; [.1741.0020.0005.1D592] # MATHEMATICAL BOLD FRAKTUR SMALL M 1D5C6 ; [.1741.0020.0005.1D5C6] # MATHEMATICAL SANS-SERIF SMALL M 1D5FA ; [.1741.0020.0005.1D5FA] # MATHEMATICAL SANS-SERIF BOLD SMALL M 1D62E ; [.1741.0020.0005.1D62E] # MATHEMATICAL SANS-SERIF ITALIC SMALL M 1D662 ; [.1741.0020.0005.1D662] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M 1D696 ; [.1741.0020.0005.1D696] # MATHEMATICAL MONOSPACE SMALL M 24DC ; [.1741.0020.0006.24DC] # CIRCLED LATIN SMALL LETTER M 004D ; [.1741.0020.0008.004D] # LATIN CAPITAL LETTER M 1F11C ; [*02FB.0020.0004.1F11C][.1741.0020.000A.1F11C][*02FC.0020.001F.1F11C] # PARENTHESIZED LATIN CAPITAL LETTER M 2133 ; [.1741.0020.000B.2133] # SCRIPT CAPITAL M 1D40C ; [.1741.0020.000B.1D40C] # MATHEMATICAL BOLD CAPITAL M 1D440 ; [.1741.0020.000B.1D440] # MATHEMATICAL ITALIC CAPITAL M 1D474 ; [.1741.0020.000B.1D474] # MATHEMATICAL BOLD ITALIC CAPITAL M 1D4DC ; [.1741.0020.000B.1D4DC] # MATHEMATICAL BOLD SCRIPT CAPITAL M 1D510 ; [.1741.0020.000B.1D510] # MATHEMATICAL FRAKTUR CAPITAL M 1D544 ; [.1741.0020.000B.1D544] # MATHEMATICAL DOUBLE-STRUCK CAPITAL M 1D578 ; [.1741.0020.000B.1D578] # MATHEMATICAL BOLD FRAKTUR CAPITAL M 1D5AC ; [.1741.0020.000B.1D5AC] # MATHEMATICAL SANS-SERIF CAPITAL M 1D5E0 ; [.1741.0020.000B.1D5E0] # MATHEMATICAL SANS-SERIF BOLD CAPITAL M 1D614 ; [.1741.0020.000B.1D614] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL M 1D648 ; [.1741.0020.000B.1D648] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M 1D67C ; [.1741.0020.000B.1D67C] # MATHEMATICAL MONOSPACE CAPITAL M 24C2 ; [.1741.0020.000C.24C2] # CIRCLED LATIN CAPITAL LETTER M 1F15C ; [.1741.0020.000C.1F15C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER M 1D50 ; [.1741.0020.0014.1D50] # MODIFIER LETTER SMALL M 2098 ; [.1741.0020.0015.2098] # LATIN SUBSCRIPT SMALL LETTER M 1D39 ; [.1741.0020.001D.1D39] # MODIFIER LETTER CAPITAL M 1F13C ; [.1741.0020.001D.1F13C] # SQUARED LATIN CAPITAL LETTER M 1F17C ; [.1741.0020.001D.1F17C] # NEGATIVE SQUARED LATIN CAPITAL LETTER M 1E3F ; [.1741.0020.0002.006D][.0000.0032.0002.0301] # LATIN SMALL LETTER M WITH ACUTE 1E3E ; [.1741.0020.0008.004D][.0000.0032.0002.0301] # LATIN CAPITAL LETTER M WITH ACUTE 1E41 ; [.1741.0020.0002.006D][.0000.0052.0002.0307] # LATIN SMALL LETTER M WITH DOT ABOVE 1E40 ; [.1741.0020.0008.004D][.0000.0052.0002.0307] # LATIN CAPITAL LETTER M WITH DOT ABOVE 1E43 ; [.1741.0020.0002.006D][.0000.0070.0002.0323] # LATIN SMALL LETTER M WITH DOT BELOW 1E42 ; [.1741.0020.0008.004D][.0000.0070.0002.0323] # LATIN CAPITAL LETTER M WITH DOT BELOW 1F16A ; [.1741.0020.0014.1F16A][.161D.0020.0014.1F16A] # RAISED MC SIGN 1F16B ; [.1741.0020.0014.1F16B][.1631.0020.0014.1F16B] # RAISED MD SIGN 1F14B ; [.1741.0020.001D.1F14B][.185F.0020.001D.1F14B] # SQUARED MV 1D0D ; [.1745.0020.0002.1D0D] # LATIN LETTER SMALL CAPITAL M 1D6F ; [.1746.0020.0002.1D6F] # LATIN SMALL LETTER M WITH MIDDLE TILDE 1D86 ; [.1747.0020.0002.1D86] # LATIN SMALL LETTER M WITH PALATAL HOOK 0271 ; [.1748.0020.0002.0271] # LATIN SMALL LETTER M WITH HOOK 2C6E ; [.1748.0020.0008.2C6E] # LATIN CAPITAL LETTER M WITH HOOK 1DAC ; [.1748.0020.0014.1DAC] # MODIFIER LETTER SMALL M WITH HOOK A7FD ; [.174C.0020.0002.A7FD] # LATIN EPIGRAPHIC LETTER INVERTED M A7FF ; [.174D.0020.0002.A7FF] # LATIN EPIGRAPHIC LETTER ARCHAIC M A773 ; [.174E.0020.0002.A773] # LATIN SMALL LETTER MUM 006E ; [.174F.0020.0002.006E] # LATIN SMALL LETTER N 24A9 ; [*02FB.0020.0004.24A9][.174F.0020.0004.24A9][*02FC.0020.001F.24A9] # PARENTHESIZED LATIN SMALL LETTER N 1D427 ; [.174F.0020.0005.1D427] # MATHEMATICAL BOLD SMALL N 1D45B ; [.174F.0020.0005.1D45B] # MATHEMATICAL ITALIC SMALL N 1D48F ; [.174F.0020.0005.1D48F] # MATHEMATICAL BOLD ITALIC SMALL N 1D4C3 ; [.174F.0020.0005.1D4C3] # MATHEMATICAL SCRIPT SMALL N 1D4F7 ; [.174F.0020.0005.1D4F7] # MATHEMATICAL BOLD SCRIPT SMALL N 1D52B ; [.174F.0020.0005.1D52B] # MATHEMATICAL FRAKTUR SMALL N 1D55F ; [.174F.0020.0005.1D55F] # MATHEMATICAL DOUBLE-STRUCK SMALL N 1D593 ; [.174F.0020.0005.1D593] # MATHEMATICAL BOLD FRAKTUR SMALL N 1D5C7 ; [.174F.0020.0005.1D5C7] # MATHEMATICAL SANS-SERIF SMALL N 1D5FB ; [.174F.0020.0005.1D5FB] # MATHEMATICAL SANS-SERIF BOLD SMALL N 1D62F ; [.174F.0020.0005.1D62F] # MATHEMATICAL SANS-SERIF ITALIC SMALL N 1D663 ; [.174F.0020.0005.1D663] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N 1D697 ; [.174F.0020.0005.1D697] # MATHEMATICAL MONOSPACE SMALL N 24DD ; [.174F.0020.0006.24DD] # CIRCLED LATIN SMALL LETTER N 004E ; [.174F.0020.0008.004E] # LATIN CAPITAL LETTER N 1F11D ; [*02FB.0020.0004.1F11D][.174F.0020.000A.1F11D][*02FC.0020.001F.1F11D] # PARENTHESIZED LATIN CAPITAL LETTER N 2115 ; [.174F.0020.000B.2115] # DOUBLE-STRUCK CAPITAL N 1D40D ; [.174F.0020.000B.1D40D] # MATHEMATICAL BOLD CAPITAL N 1D441 ; [.174F.0020.000B.1D441] # MATHEMATICAL ITALIC CAPITAL N 1D475 ; [.174F.0020.000B.1D475] # MATHEMATICAL BOLD ITALIC CAPITAL N 1D4A9 ; [.174F.0020.000B.1D4A9] # MATHEMATICAL SCRIPT CAPITAL N 1D4DD ; [.174F.0020.000B.1D4DD] # MATHEMATICAL BOLD SCRIPT CAPITAL N 1D511 ; [.174F.0020.000B.1D511] # MATHEMATICAL FRAKTUR CAPITAL N 1D579 ; [.174F.0020.000B.1D579] # MATHEMATICAL BOLD FRAKTUR CAPITAL N 1D5AD ; [.174F.0020.000B.1D5AD] # MATHEMATICAL SANS-SERIF CAPITAL N 1D5E1 ; [.174F.0020.000B.1D5E1] # MATHEMATICAL SANS-SERIF BOLD CAPITAL N 1D615 ; [.174F.0020.000B.1D615] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL N 1D649 ; [.174F.0020.000B.1D649] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N 1D67D ; [.174F.0020.000B.1D67D] # MATHEMATICAL MONOSPACE CAPITAL N 24C3 ; [.174F.0020.000C.24C3] # CIRCLED LATIN CAPITAL LETTER N 1F15D ; [.174F.0020.000C.1F15D] # NEGATIVE CIRCLED LATIN CAPITAL LETTER N 207F ; [.174F.0020.0014.207F] # SUPERSCRIPT LATIN SMALL LETTER N 2099 ; [.174F.0020.0015.2099] # LATIN SUBSCRIPT SMALL LETTER N 1D3A ; [.174F.0020.001D.1D3A] # MODIFIER LETTER CAPITAL N 1F13D ; [.174F.0020.001D.1F13D] # SQUARED LATIN CAPITAL LETTER N 1F17D ; [.174F.0020.001D.1F17D] # NEGATIVE SQUARED LATIN CAPITAL LETTER N 0144 ; [.174F.0020.0002.006E][.0000.0032.0002.0301] # LATIN SMALL LETTER N WITH ACUTE 0143 ; [.174F.0020.0008.004E][.0000.0032.0002.0301] # LATIN CAPITAL LETTER N WITH ACUTE 01F9 ; [.174F.0020.0002.006E][.0000.0035.0002.0300] # LATIN SMALL LETTER N WITH GRAVE 01F8 ; [.174F.0020.0008.004E][.0000.0035.0002.0300] # LATIN CAPITAL LETTER N WITH GRAVE 0148 ; [.174F.0020.0002.006E][.0000.0041.0002.030C] # LATIN SMALL LETTER N WITH CARON 0147 ; [.174F.0020.0008.004E][.0000.0041.0002.030C] # LATIN CAPITAL LETTER N WITH CARON 00F1 ; [.174F.0020.0002.006E][.0000.004E.0002.0303] # LATIN SMALL LETTER N WITH TILDE 00D1 ; [.174F.0020.0008.004E][.0000.004E.0002.0303] # LATIN CAPITAL LETTER N WITH TILDE 1E45 ; [.174F.0020.0002.006E][.0000.0052.0002.0307] # LATIN SMALL LETTER N WITH DOT ABOVE 1E44 ; [.174F.0020.0008.004E][.0000.0052.0002.0307] # LATIN CAPITAL LETTER N WITH DOT ABOVE 0146 ; [.174F.0020.0002.006E][.0000.0056.0002.0327] # LATIN SMALL LETTER N WITH CEDILLA 0145 ; [.174F.0020.0008.004E][.0000.0056.0002.0327] # LATIN CAPITAL LETTER N WITH CEDILLA A7A5 ; [.174F.0020.0004.A7A5][.0000.0061.0004.A7A5] # LATIN SMALL LETTER N WITH OBLIQUE STROKE A7A4 ; [.174F.0020.000A.A7A4][.0000.0061.0004.A7A4] # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE 1E47 ; [.174F.0020.0002.006E][.0000.0070.0002.0323] # LATIN SMALL LETTER N WITH DOT BELOW 1E46 ; [.174F.0020.0008.004E][.0000.0070.0002.0323] # LATIN CAPITAL LETTER N WITH DOT BELOW 1E4B ; [.174F.0020.0002.006E][.0000.0078.0002.032D] # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW 1E4A ; [.174F.0020.0008.004E][.0000.0078.0002.032D] # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW 1E49 ; [.174F.0020.0002.006E][.0000.007B.0002.0331] # LATIN SMALL LETTER N WITH LINE BELOW 1E48 ; [.174F.0020.0008.004E][.0000.007B.0002.0331] # LATIN CAPITAL LETTER N WITH LINE BELOW 1F195 ; [.174F.0020.001D.1F195][.164C.0020.001D.1F195][.1871.0020.001D.1F195] # SQUARED NEW 1F196 ; [.174F.0020.001D.1F196][.1691.0020.001D.1F196] # SQUARED NG 01CC ; [.174F.0020.0004.01CC][.16E6.0020.0004.01CC] # LATIN SMALL LETTER NJ 01CB ; [.174F.0020.000A.01CB][.16E6.0020.0004.01CB] # LATIN CAPITAL LETTER N WITH SMALL LETTER J 01CA ; [.174F.0020.000A.01CA][.16E6.0020.000A.01CA] # LATIN CAPITAL LETTER NJ 2116 ; [.174F.0020.000A.2116][.1771.0020.0004.2116] # NUMERO SIGN 0274 ; [.1753.0020.0002.0274] # LATIN LETTER SMALL CAPITAL N 1DB0 ; [.1753.0020.0014.1DB0] # MODIFIER LETTER SMALL CAPITAL N 1D3B ; [.1757.0020.0002.1D3B] # MODIFIER LETTER CAPITAL REVERSED N 1D0E ; [.1758.0020.0002.1D0E] # LATIN LETTER SMALL CAPITAL REVERSED N 1D70 ; [.1759.0020.0002.1D70] # LATIN SMALL LETTER N WITH MIDDLE TILDE 0272 ; [.175A.0020.0002.0272] # LATIN SMALL LETTER N WITH LEFT HOOK 019D ; [.175A.0020.0008.019D] # LATIN CAPITAL LETTER N WITH LEFT HOOK 1DAE ; [.175A.0020.0014.1DAE] # MODIFIER LETTER SMALL N WITH LEFT HOOK 019E ; [.175E.0020.0002.019E] # LATIN SMALL LETTER N WITH LONG RIGHT LEG 0220 ; [.175E.0020.0008.0220] # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG A791 ; [.1762.0020.0002.A791] # LATIN SMALL LETTER N WITH DESCENDER A790 ; [.1762.0020.0008.A790] # LATIN CAPITAL LETTER N WITH DESCENDER 1D87 ; [.1763.0020.0002.1D87] # LATIN SMALL LETTER N WITH PALATAL HOOK 0273 ; [.1764.0020.0002.0273] # LATIN SMALL LETTER N WITH RETROFLEX HOOK 1DAF ; [.1764.0020.0014.1DAF] # MODIFIER LETTER SMALL N WITH RETROFLEX HOOK 0235 ; [.1768.0020.0002.0235] # LATIN SMALL LETTER N WITH CURL A774 ; [.176C.0020.0002.A774] # LATIN SMALL LETTER NUM 014B ; [.176D.0020.0002.014B] # LATIN SMALL LETTER ENG 014A ; [.176D.0020.0008.014A] # LATIN CAPITAL LETTER ENG 1D51 ; [.176D.0020.0014.1D51] # MODIFIER LETTER SMALL ENG 006F ; [.1771.0020.0002.006F] # LATIN SMALL LETTER O 24AA ; [*02FB.0020.0004.24AA][.1771.0020.0004.24AA][*02FC.0020.001F.24AA] # PARENTHESIZED LATIN SMALL LETTER O 2134 ; [.1771.0020.0005.2134] # SCRIPT SMALL O 1D428 ; [.1771.0020.0005.1D428] # MATHEMATICAL BOLD SMALL O 1D45C ; [.1771.0020.0005.1D45C] # MATHEMATICAL ITALIC SMALL O 1D490 ; [.1771.0020.0005.1D490] # MATHEMATICAL BOLD ITALIC SMALL O 1D4F8 ; [.1771.0020.0005.1D4F8] # MATHEMATICAL BOLD SCRIPT SMALL O 1D52C ; [.1771.0020.0005.1D52C] # MATHEMATICAL FRAKTUR SMALL O 1D560 ; [.1771.0020.0005.1D560] # MATHEMATICAL DOUBLE-STRUCK SMALL O 1D594 ; [.1771.0020.0005.1D594] # MATHEMATICAL BOLD FRAKTUR SMALL O 1D5C8 ; [.1771.0020.0005.1D5C8] # MATHEMATICAL SANS-SERIF SMALL O 1D5FC ; [.1771.0020.0005.1D5FC] # MATHEMATICAL SANS-SERIF BOLD SMALL O 1D630 ; [.1771.0020.0005.1D630] # MATHEMATICAL SANS-SERIF ITALIC SMALL O 1D664 ; [.1771.0020.0005.1D664] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O 1D698 ; [.1771.0020.0005.1D698] # MATHEMATICAL MONOSPACE SMALL O 24DE ; [.1771.0020.0006.24DE] # CIRCLED LATIN SMALL LETTER O 004F ; [.1771.0020.0008.004F] # LATIN CAPITAL LETTER O 1F11E ; [*02FB.0020.0004.1F11E][.1771.0020.000A.1F11E][*02FC.0020.001F.1F11E] # PARENTHESIZED LATIN CAPITAL LETTER O 1D40E ; [.1771.0020.000B.1D40E] # MATHEMATICAL BOLD CAPITAL O 1D442 ; [.1771.0020.000B.1D442] # MATHEMATICAL ITALIC CAPITAL O 1D476 ; [.1771.0020.000B.1D476] # MATHEMATICAL BOLD ITALIC CAPITAL O 1D4AA ; [.1771.0020.000B.1D4AA] # MATHEMATICAL SCRIPT CAPITAL O 1D4DE ; [.1771.0020.000B.1D4DE] # MATHEMATICAL BOLD SCRIPT CAPITAL O 1D512 ; [.1771.0020.000B.1D512] # MATHEMATICAL FRAKTUR CAPITAL O 1D546 ; [.1771.0020.000B.1D546] # MATHEMATICAL DOUBLE-STRUCK CAPITAL O 1D57A ; [.1771.0020.000B.1D57A] # MATHEMATICAL BOLD FRAKTUR CAPITAL O 1D5AE ; [.1771.0020.000B.1D5AE] # MATHEMATICAL SANS-SERIF CAPITAL O 1D5E2 ; [.1771.0020.000B.1D5E2] # MATHEMATICAL SANS-SERIF BOLD CAPITAL O 1D616 ; [.1771.0020.000B.1D616] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL O 1D64A ; [.1771.0020.000B.1D64A] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O 1D67E ; [.1771.0020.000B.1D67E] # MATHEMATICAL MONOSPACE CAPITAL O 24C4 ; [.1771.0020.000C.24C4] # CIRCLED LATIN CAPITAL LETTER O 1F15E ; [.1771.0020.000C.1F15E] # NEGATIVE CIRCLED LATIN CAPITAL LETTER O 00BA ; [.1771.0020.0014.00BA] # MASCULINE ORDINAL INDICATOR 1D52 ; [.1771.0020.0014.1D52] # MODIFIER LETTER SMALL O 2092 ; [.1771.0020.0015.2092] # LATIN SUBSCRIPT SMALL LETTER O 1D3C ; [.1771.0020.001D.1D3C] # MODIFIER LETTER CAPITAL O 1F13E ; [.1771.0020.001D.1F13E] # SQUARED LATIN CAPITAL LETTER O 1F17E ; [.1771.0020.001D.1F17E] # NEGATIVE SQUARED LATIN CAPITAL LETTER O 00F3 ; [.1771.0020.0002.006F][.0000.0032.0002.0301] # LATIN SMALL LETTER O WITH ACUTE 00D3 ; [.1771.0020.0008.004F][.0000.0032.0002.0301] # LATIN CAPITAL LETTER O WITH ACUTE 00F2 ; [.1771.0020.0002.006F][.0000.0035.0002.0300] # LATIN SMALL LETTER O WITH GRAVE 00D2 ; [.1771.0020.0008.004F][.0000.0035.0002.0300] # LATIN CAPITAL LETTER O WITH GRAVE 014F ; [.1771.0020.0002.006F][.0000.0037.0002.0306] # LATIN SMALL LETTER O WITH BREVE 014E ; [.1771.0020.0008.004F][.0000.0037.0002.0306] # LATIN CAPITAL LETTER O WITH BREVE 00F4 ; [.1771.0020.0002.006F][.0000.003C.0002.0302] # LATIN SMALL LETTER O WITH CIRCUMFLEX 00D4 ; [.1771.0020.0008.004F][.0000.003C.0002.0302] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 1ED1 ; [.1771.0020.0002.006F][.0000.003C.0002.0302][.0000.0032.0002.0301] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED0 ; [.1771.0020.0008.004F][.0000.003C.0002.0302][.0000.0032.0002.0301] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1ED3 ; [.1771.0020.0002.006F][.0000.003C.0002.0302][.0000.0035.0002.0300] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED2 ; [.1771.0020.0008.004F][.0000.003C.0002.0302][.0000.0035.0002.0300] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1ED7 ; [.1771.0020.0002.006F][.0000.003C.0002.0302][.0000.004E.0002.0303] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE 1ED6 ; [.1771.0020.0008.004F][.0000.003C.0002.0302][.0000.004E.0002.0303] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1ED5 ; [.1771.0020.0002.006F][.0000.003C.0002.0302][.0000.0064.0002.0309] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 1ED4 ; [.1771.0020.0008.004F][.0000.003C.0002.0302][.0000.0064.0002.0309] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 01D2 ; [.1771.0020.0002.006F][.0000.0041.0002.030C] # LATIN SMALL LETTER O WITH CARON 01D1 ; [.1771.0020.0008.004F][.0000.0041.0002.030C] # LATIN CAPITAL LETTER O WITH CARON 00F6 ; [.1771.0020.0002.006F][.0000.0047.0002.0308] # LATIN SMALL LETTER O WITH DIAERESIS 00D6 ; [.1771.0020.0008.004F][.0000.0047.0002.0308] # LATIN CAPITAL LETTER O WITH DIAERESIS 022B ; [.1771.0020.0002.006F][.0000.0047.0002.0308][.0000.005B.0002.0304] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON 022A ; [.1771.0020.0008.004F][.0000.0047.0002.0308][.0000.005B.0002.0304] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON 0151 ; [.1771.0020.0002.006F][.0000.004D.0002.030B] # LATIN SMALL LETTER O WITH DOUBLE ACUTE 0150 ; [.1771.0020.0008.004F][.0000.004D.0002.030B] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE 00F5 ; [.1771.0020.0002.006F][.0000.004E.0002.0303] # LATIN SMALL LETTER O WITH TILDE 00D5 ; [.1771.0020.0008.004F][.0000.004E.0002.0303] # LATIN CAPITAL LETTER O WITH TILDE 1E4D ; [.1771.0020.0002.006F][.0000.004E.0002.0303][.0000.0032.0002.0301] # LATIN SMALL LETTER O WITH TILDE AND ACUTE 1E4C ; [.1771.0020.0008.004F][.0000.004E.0002.0303][.0000.0032.0002.0301] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE 1E4F ; [.1771.0020.0002.006F][.0000.004E.0002.0303][.0000.0047.0002.0308] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS 1E4E ; [.1771.0020.0008.004F][.0000.004E.0002.0303][.0000.0047.0002.0308] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS 022D ; [.1771.0020.0002.006F][.0000.004E.0002.0303][.0000.005B.0002.0304] # LATIN SMALL LETTER O WITH TILDE AND MACRON 022C ; [.1771.0020.0008.004F][.0000.004E.0002.0303][.0000.005B.0002.0304] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON 022F ; [.1771.0020.0002.006F][.0000.0052.0002.0307] # LATIN SMALL LETTER O WITH DOT ABOVE 022E ; [.1771.0020.0008.004F][.0000.0052.0002.0307] # LATIN CAPITAL LETTER O WITH DOT ABOVE 0231 ; [.1771.0020.0002.006F][.0000.0052.0002.0307][.0000.005B.0002.0304] # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON 0230 ; [.1771.0020.0008.004F][.0000.0052.0002.0307][.0000.005B.0002.0304] # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON 00F8 ; [.1771.0020.0002.006F][.0000.0054.0002.0338] # LATIN SMALL LETTER O WITH STROKE 00D8 ; [.1771.0020.0008.004F][.0000.0054.0002.0338] # LATIN CAPITAL LETTER O WITH STROKE 01FF ; [.1771.0020.0002.006F][.0000.0054.0002.0338][.0000.0032.0002.0301] # LATIN SMALL LETTER O WITH STROKE AND ACUTE 01FE ; [.1771.0020.0008.004F][.0000.0054.0002.0338][.0000.0032.0002.0301] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE 01EB ; [.1771.0020.0002.006F][.0000.0059.0002.0328] # LATIN SMALL LETTER O WITH OGONEK 01EA ; [.1771.0020.0008.004F][.0000.0059.0002.0328] # LATIN CAPITAL LETTER O WITH OGONEK 01ED ; [.1771.0020.0002.006F][.0000.0059.0002.0328][.0000.005B.0002.0304] # LATIN SMALL LETTER O WITH OGONEK AND MACRON 01EC ; [.1771.0020.0008.004F][.0000.0059.0002.0328][.0000.005B.0002.0304] # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON 014D ; [.1771.0020.0002.006F][.0000.005B.0002.0304] # LATIN SMALL LETTER O WITH MACRON 014C ; [.1771.0020.0008.004F][.0000.005B.0002.0304] # LATIN CAPITAL LETTER O WITH MACRON 1E53 ; [.1771.0020.0002.006F][.0000.005B.0002.0304][.0000.0032.0002.0301] # LATIN SMALL LETTER O WITH MACRON AND ACUTE 1E52 ; [.1771.0020.0008.004F][.0000.005B.0002.0304][.0000.0032.0002.0301] # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE 1E51 ; [.1771.0020.0002.006F][.0000.005B.0002.0304][.0000.0035.0002.0300] # LATIN SMALL LETTER O WITH MACRON AND GRAVE 1E50 ; [.1771.0020.0008.004F][.0000.005B.0002.0304][.0000.0035.0002.0300] # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE 1ECF ; [.1771.0020.0002.006F][.0000.0064.0002.0309] # LATIN SMALL LETTER O WITH HOOK ABOVE 1ECE ; [.1771.0020.0008.004F][.0000.0064.0002.0309] # LATIN CAPITAL LETTER O WITH HOOK ABOVE 020D ; [.1771.0020.0002.006F][.0000.0065.0002.030F] # LATIN SMALL LETTER O WITH DOUBLE GRAVE 020C ; [.1771.0020.0008.004F][.0000.0065.0002.030F] # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE 020F ; [.1771.0020.0002.006F][.0000.0067.0002.0311] # LATIN SMALL LETTER O WITH INVERTED BREVE 020E ; [.1771.0020.0008.004F][.0000.0067.0002.0311] # LATIN CAPITAL LETTER O WITH INVERTED BREVE 01A1 ; [.1771.0020.0002.006F][.0000.0068.0002.031B] # LATIN SMALL LETTER O WITH HORN 01A0 ; [.1771.0020.0008.004F][.0000.0068.0002.031B] # LATIN CAPITAL LETTER O WITH HORN 1EDB ; [.1771.0020.0002.006F][.0000.0068.0002.031B][.0000.0032.0002.0301] # LATIN SMALL LETTER O WITH HORN AND ACUTE 1EDA ; [.1771.0020.0008.004F][.0000.0068.0002.031B][.0000.0032.0002.0301] # LATIN CAPITAL LETTER O WITH HORN AND ACUTE 1EDD ; [.1771.0020.0002.006F][.0000.0068.0002.031B][.0000.0035.0002.0300] # LATIN SMALL LETTER O WITH HORN AND GRAVE 1EDC ; [.1771.0020.0008.004F][.0000.0068.0002.031B][.0000.0035.0002.0300] # LATIN CAPITAL LETTER O WITH HORN AND GRAVE 1EE1 ; [.1771.0020.0002.006F][.0000.0068.0002.031B][.0000.004E.0002.0303] # LATIN SMALL LETTER O WITH HORN AND TILDE 1EE0 ; [.1771.0020.0008.004F][.0000.0068.0002.031B][.0000.004E.0002.0303] # LATIN CAPITAL LETTER O WITH HORN AND TILDE 1EDF ; [.1771.0020.0002.006F][.0000.0068.0002.031B][.0000.0064.0002.0309] # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE 1EDE ; [.1771.0020.0008.004F][.0000.0068.0002.031B][.0000.0064.0002.0309] # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE 1EE3 ; [.1771.0020.0002.006F][.0000.0068.0002.031B][.0000.0070.0002.0323] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW 1EE2 ; [.1771.0020.0008.004F][.0000.0068.0002.031B][.0000.0070.0002.0323] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW 1ECD ; [.1771.0020.0002.006F][.0000.0070.0002.0323] # LATIN SMALL LETTER O WITH DOT BELOW 1ECC ; [.1771.0020.0008.004F][.0000.0070.0002.0323] # LATIN CAPITAL LETTER O WITH DOT BELOW 1ED9 ; [.1771.0020.0002.006F][.0000.0070.0002.0323][.0000.003C.0002.0302] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1ED8 ; [.1771.0020.0008.004F][.0000.0070.0002.0323][.0000.003C.0002.0302] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 0153 ; [.1771.0020.0004.0153][.0000.0139.0004.0153][.164C.0020.0004.0153] # LATIN SMALL LIGATURE OE 0152 ; [.1771.0020.000A.0152][.0000.0139.0004.0152][.164C.0020.000A.0152] # LATIN CAPITAL LIGATURE OE A7F9 ; [.1771.0020.0014.A7F9][.0000.0139.0014.A7F9][.164C.0020.0014.A7F9] # MODIFIER LETTER SMALL LIGATURE OE 1F197 ; [.1771.0020.001D.1F197][.16FF.0020.001D.1F197] # SQUARED OK A74F ; [.1771.0020.0004.A74F][.1771.0020.0004.A74F] # LATIN SMALL LETTER OO A74E ; [.1771.0020.000A.A74E][.1771.0020.000A.A74E] # LATIN CAPITAL LETTER OO 1D0F ; [.1775.0020.0002.1D0F] # LATIN LETTER SMALL CAPITAL O 1D11 ; [.1776.0020.0002.1D11] # LATIN SMALL LETTER SIDEWAYS O 0276 ; [.1777.0020.0002.0276] # LATIN LETTER SMALL CAPITAL OE 1D14 ; [.177B.0020.0002.1D14] # LATIN SMALL LETTER TURNED OE 1D13 ; [.177C.0020.0002.1D13] # LATIN SMALL LETTER SIDEWAYS O WITH STROKE 0254 ; [.177D.0020.0002.0254] # LATIN SMALL LETTER OPEN O 0186 ; [.177D.0020.0008.0186] # LATIN CAPITAL LETTER OPEN O 1D53 ; [.177D.0020.0014.1D53] # MODIFIER LETTER SMALL OPEN O 1D10 ; [.1781.0020.0002.1D10] # LATIN LETTER SMALL CAPITAL OPEN O 1D12 ; [.1782.0020.0002.1D12] # LATIN SMALL LETTER SIDEWAYS OPEN O 1D97 ; [.1783.0020.0002.1D97] # LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK A74D ; [.1784.0020.0002.A74D] # LATIN SMALL LETTER O WITH LOOP A74C ; [.1784.0020.0008.A74C] # LATIN CAPITAL LETTER O WITH LOOP 1D16 ; [.1785.0020.0002.1D16] # LATIN SMALL LETTER TOP HALF O 1D54 ; [.1785.0020.0014.1D54] # MODIFIER LETTER SMALL TOP HALF O 1D17 ; [.1786.0020.0002.1D17] # LATIN SMALL LETTER BOTTOM HALF O 1D55 ; [.1786.0020.0014.1D55] # MODIFIER LETTER SMALL BOTTOM HALF O 2C7A ; [.1787.0020.0002.2C7A] # LATIN SMALL LETTER O WITH LOW RING INSIDE 0275 ; [.1788.0020.0002.0275] # LATIN SMALL LETTER BARRED O 019F ; [.1788.0020.0008.019F] # LATIN CAPITAL LETTER O WITH MIDDLE TILDE 1DB1 ; [.1788.0020.0014.1DB1] # MODIFIER LETTER SMALL BARRED O A74B ; [.178C.0020.0002.A74B] # LATIN SMALL LETTER O WITH LONG STROKE OVERLAY A74A ; [.178C.0020.0008.A74A] # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY 0277 ; [.178D.0020.0002.0277] # LATIN SMALL LETTER CLOSED OMEGA 0223 ; [.1791.0020.0002.0223] # LATIN SMALL LETTER OU 0222 ; [.1791.0020.0008.0222] # LATIN CAPITAL LETTER OU 1D3D ; [.1791.0020.001D.1D3D] # MODIFIER LETTER CAPITAL OU 1D15 ; [.1795.0020.0002.1D15] # LATIN LETTER SMALL CAPITAL OU 0070 ; [.1796.0020.0002.0070] # LATIN SMALL LETTER P 24AB ; [*02FB.0020.0004.24AB][.1796.0020.0004.24AB][*02FC.0020.001F.24AB] # PARENTHESIZED LATIN SMALL LETTER P 1D429 ; [.1796.0020.0005.1D429] # MATHEMATICAL BOLD SMALL P 1D45D ; [.1796.0020.0005.1D45D] # MATHEMATICAL ITALIC SMALL P 1D491 ; [.1796.0020.0005.1D491] # MATHEMATICAL BOLD ITALIC SMALL P 1D4C5 ; [.1796.0020.0005.1D4C5] # MATHEMATICAL SCRIPT SMALL P 1D4F9 ; [.1796.0020.0005.1D4F9] # MATHEMATICAL BOLD SCRIPT SMALL P 1D52D ; [.1796.0020.0005.1D52D] # MATHEMATICAL FRAKTUR SMALL P 1D561 ; [.1796.0020.0005.1D561] # MATHEMATICAL DOUBLE-STRUCK SMALL P 1D595 ; [.1796.0020.0005.1D595] # MATHEMATICAL BOLD FRAKTUR SMALL P 1D5C9 ; [.1796.0020.0005.1D5C9] # MATHEMATICAL SANS-SERIF SMALL P 1D5FD ; [.1796.0020.0005.1D5FD] # MATHEMATICAL SANS-SERIF BOLD SMALL P 1D631 ; [.1796.0020.0005.1D631] # MATHEMATICAL SANS-SERIF ITALIC SMALL P 1D665 ; [.1796.0020.0005.1D665] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P 1D699 ; [.1796.0020.0005.1D699] # MATHEMATICAL MONOSPACE SMALL P 24DF ; [.1796.0020.0006.24DF] # CIRCLED LATIN SMALL LETTER P 0050 ; [.1796.0020.0008.0050] # LATIN CAPITAL LETTER P 1F11F ; [*02FB.0020.0004.1F11F][.1796.0020.000A.1F11F][*02FC.0020.001F.1F11F] # PARENTHESIZED LATIN CAPITAL LETTER P 2119 ; [.1796.0020.000B.2119] # DOUBLE-STRUCK CAPITAL P 1D40F ; [.1796.0020.000B.1D40F] # MATHEMATICAL BOLD CAPITAL P 1D443 ; [.1796.0020.000B.1D443] # MATHEMATICAL ITALIC CAPITAL P 1D477 ; [.1796.0020.000B.1D477] # MATHEMATICAL BOLD ITALIC CAPITAL P 1D4AB ; [.1796.0020.000B.1D4AB] # MATHEMATICAL SCRIPT CAPITAL P 1D4DF ; [.1796.0020.000B.1D4DF] # MATHEMATICAL BOLD SCRIPT CAPITAL P 1D513 ; [.1796.0020.000B.1D513] # MATHEMATICAL FRAKTUR CAPITAL P 1D57B ; [.1796.0020.000B.1D57B] # MATHEMATICAL BOLD FRAKTUR CAPITAL P 1D5AF ; [.1796.0020.000B.1D5AF] # MATHEMATICAL SANS-SERIF CAPITAL P 1D5E3 ; [.1796.0020.000B.1D5E3] # MATHEMATICAL SANS-SERIF BOLD CAPITAL P 1D617 ; [.1796.0020.000B.1D617] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL P 1D64B ; [.1796.0020.000B.1D64B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P 1D67F ; [.1796.0020.000B.1D67F] # MATHEMATICAL MONOSPACE CAPITAL P 24C5 ; [.1796.0020.000C.24C5] # CIRCLED LATIN CAPITAL LETTER P 1F15F ; [.1796.0020.000C.1F15F] # NEGATIVE CIRCLED LATIN CAPITAL LETTER P 1D56 ; [.1796.0020.0014.1D56] # MODIFIER LETTER SMALL P 209A ; [.1796.0020.0015.209A] # LATIN SUBSCRIPT SMALL LETTER P 1D3E ; [.1796.0020.001D.1D3E] # MODIFIER LETTER CAPITAL P 1F13F ; [.1796.0020.001D.1F13F] # SQUARED LATIN CAPITAL LETTER P 1F17F ; [.1796.0020.001D.1F17F] # NEGATIVE SQUARED LATIN CAPITAL LETTER P 1F18A ; [.1796.0020.001D.1F18A] # CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P 1E55 ; [.1796.0020.0002.0070][.0000.0032.0002.0301] # LATIN SMALL LETTER P WITH ACUTE 1E54 ; [.1796.0020.0008.0050][.0000.0032.0002.0301] # LATIN CAPITAL LETTER P WITH ACUTE 1E57 ; [.1796.0020.0002.0070][.0000.0052.0002.0307] # LATIN SMALL LETTER P WITH DOT ABOVE 1E56 ; [.1796.0020.0008.0050][.0000.0052.0002.0307] # LATIN CAPITAL LETTER P WITH DOT ABOVE 1F18C ; [.1796.0020.001D.1F18C][.15EF.0020.001D.1F18C] # NEGATIVE SQUARED PA 1F14E ; [.1796.0020.001D.1F14E][.1796.0020.001D.1F14E][.185F.0020.001D.1F14E] # SQUARED PPV 1D18 ; [.179A.0020.0002.1D18] # LATIN LETTER SMALL CAPITAL P 1D7D ; [.179B.0020.0002.1D7D] # LATIN SMALL LETTER P WITH STROKE 2C63 ; [.179B.0020.0008.2C63] # LATIN CAPITAL LETTER P WITH STROKE A751 ; [.179C.0020.0002.A751] # LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER A750 ; [.179C.0020.0008.A750] # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER 1D71 ; [.179D.0020.0002.1D71] # LATIN SMALL LETTER P WITH MIDDLE TILDE 1D88 ; [.179E.0020.0002.1D88] # LATIN SMALL LETTER P WITH PALATAL HOOK 01A5 ; [.179F.0020.0002.01A5] # LATIN SMALL LETTER P WITH HOOK 01A4 ; [.179F.0020.0008.01A4] # LATIN CAPITAL LETTER P WITH HOOK A753 ; [.17A3.0020.0002.A753] # LATIN SMALL LETTER P WITH FLOURISH A752 ; [.17A3.0020.0008.A752] # LATIN CAPITAL LETTER P WITH FLOURISH A755 ; [.17A4.0020.0002.A755] # LATIN SMALL LETTER P WITH SQUIRREL TAIL A754 ; [.17A4.0020.0008.A754] # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL A7FC ; [.17A5.0020.0002.A7FC] # LATIN EPIGRAPHIC LETTER REVERSED P 0278 ; [.17A6.0020.0002.0278] # LATIN SMALL LETTER PHI 1DB2 ; [.17A6.0020.0014.1DB2] # MODIFIER LETTER SMALL PHI 2C77 ; [.17AA.0020.0002.2C77] # LATIN SMALL LETTER TAILLESS PHI 0071 ; [.17AB.0020.0002.0071] # LATIN SMALL LETTER Q 24AC ; [*02FB.0020.0004.24AC][.17AB.0020.0004.24AC][*02FC.0020.001F.24AC] # PARENTHESIZED LATIN SMALL LETTER Q 1D42A ; [.17AB.0020.0005.1D42A] # MATHEMATICAL BOLD SMALL Q 1D45E ; [.17AB.0020.0005.1D45E] # MATHEMATICAL ITALIC SMALL Q 1D492 ; [.17AB.0020.0005.1D492] # MATHEMATICAL BOLD ITALIC SMALL Q 1D4C6 ; [.17AB.0020.0005.1D4C6] # MATHEMATICAL SCRIPT SMALL Q 1D4FA ; [.17AB.0020.0005.1D4FA] # MATHEMATICAL BOLD SCRIPT SMALL Q 1D52E ; [.17AB.0020.0005.1D52E] # MATHEMATICAL FRAKTUR SMALL Q 1D562 ; [.17AB.0020.0005.1D562] # MATHEMATICAL DOUBLE-STRUCK SMALL Q 1D596 ; [.17AB.0020.0005.1D596] # MATHEMATICAL BOLD FRAKTUR SMALL Q 1D5CA ; [.17AB.0020.0005.1D5CA] # MATHEMATICAL SANS-SERIF SMALL Q 1D5FE ; [.17AB.0020.0005.1D5FE] # MATHEMATICAL SANS-SERIF BOLD SMALL Q 1D632 ; [.17AB.0020.0005.1D632] # MATHEMATICAL SANS-SERIF ITALIC SMALL Q 1D666 ; [.17AB.0020.0005.1D666] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q 1D69A ; [.17AB.0020.0005.1D69A] # MATHEMATICAL MONOSPACE SMALL Q 24E0 ; [.17AB.0020.0006.24E0] # CIRCLED LATIN SMALL LETTER Q 0051 ; [.17AB.0020.0008.0051] # LATIN CAPITAL LETTER Q 1F120 ; [*02FB.0020.0004.1F120][.17AB.0020.000A.1F120][*02FC.0020.001F.1F120] # PARENTHESIZED LATIN CAPITAL LETTER Q 211A ; [.17AB.0020.000B.211A] # DOUBLE-STRUCK CAPITAL Q 1D410 ; [.17AB.0020.000B.1D410] # MATHEMATICAL BOLD CAPITAL Q 1D444 ; [.17AB.0020.000B.1D444] # MATHEMATICAL ITALIC CAPITAL Q 1D478 ; [.17AB.0020.000B.1D478] # MATHEMATICAL BOLD ITALIC CAPITAL Q 1D4AC ; [.17AB.0020.000B.1D4AC] # MATHEMATICAL SCRIPT CAPITAL Q 1D4E0 ; [.17AB.0020.000B.1D4E0] # MATHEMATICAL BOLD SCRIPT CAPITAL Q 1D514 ; [.17AB.0020.000B.1D514] # MATHEMATICAL FRAKTUR CAPITAL Q 1D57C ; [.17AB.0020.000B.1D57C] # MATHEMATICAL BOLD FRAKTUR CAPITAL Q 1D5B0 ; [.17AB.0020.000B.1D5B0] # MATHEMATICAL SANS-SERIF CAPITAL Q 1D5E4 ; [.17AB.0020.000B.1D5E4] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Q 1D618 ; [.17AB.0020.000B.1D618] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q 1D64C ; [.17AB.0020.000B.1D64C] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q 1D680 ; [.17AB.0020.000B.1D680] # MATHEMATICAL MONOSPACE CAPITAL Q 24C6 ; [.17AB.0020.000C.24C6] # CIRCLED LATIN CAPITAL LETTER Q 1F160 ; [.17AB.0020.000C.1F160] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Q 1F140 ; [.17AB.0020.001D.1F140] # SQUARED LATIN CAPITAL LETTER Q 1F180 ; [.17AB.0020.001D.1F180] # NEGATIVE SQUARED LATIN CAPITAL LETTER Q 0239 ; [.17AB.0020.0004.0239][.1796.0020.0004.0239] # LATIN SMALL LETTER QP DIGRAPH A757 ; [.17AF.0020.0002.A757] # LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER A756 ; [.17AF.0020.0008.A756] # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER A759 ; [.17B0.0020.0002.A759] # LATIN SMALL LETTER Q WITH DIAGONAL STROKE A758 ; [.17B0.0020.0008.A758] # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE 02A0 ; [.17B1.0020.0002.02A0] # LATIN SMALL LETTER Q WITH HOOK 024B ; [.17B5.0020.0002.024B] # LATIN SMALL LETTER Q WITH HOOK TAIL 024A ; [.17B5.0020.0008.024A] # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL 0138 ; [.17B9.0020.0002.0138] # LATIN SMALL LETTER KRA 0072 ; [.17BD.0020.0002.0072] # LATIN SMALL LETTER R 24AD ; [*02FB.0020.0004.24AD][.17BD.0020.0004.24AD][*02FC.0020.001F.24AD] # PARENTHESIZED LATIN SMALL LETTER R 1D42B ; [.17BD.0020.0005.1D42B] # MATHEMATICAL BOLD SMALL R 1D45F ; [.17BD.0020.0005.1D45F] # MATHEMATICAL ITALIC SMALL R 1D493 ; [.17BD.0020.0005.1D493] # MATHEMATICAL BOLD ITALIC SMALL R 1D4C7 ; [.17BD.0020.0005.1D4C7] # MATHEMATICAL SCRIPT SMALL R 1D4FB ; [.17BD.0020.0005.1D4FB] # MATHEMATICAL BOLD SCRIPT SMALL R 1D52F ; [.17BD.0020.0005.1D52F] # MATHEMATICAL FRAKTUR SMALL R 1D563 ; [.17BD.0020.0005.1D563] # MATHEMATICAL DOUBLE-STRUCK SMALL R 1D597 ; [.17BD.0020.0005.1D597] # MATHEMATICAL BOLD FRAKTUR SMALL R 1D5CB ; [.17BD.0020.0005.1D5CB] # MATHEMATICAL SANS-SERIF SMALL R 1D5FF ; [.17BD.0020.0005.1D5FF] # MATHEMATICAL SANS-SERIF BOLD SMALL R 1D633 ; [.17BD.0020.0005.1D633] # MATHEMATICAL SANS-SERIF ITALIC SMALL R 1D667 ; [.17BD.0020.0005.1D667] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R 1D69B ; [.17BD.0020.0005.1D69B] # MATHEMATICAL MONOSPACE SMALL R 24E1 ; [.17BD.0020.0006.24E1] # CIRCLED LATIN SMALL LETTER R 0052 ; [.17BD.0020.0008.0052] # LATIN CAPITAL LETTER R 1F121 ; [*02FB.0020.0004.1F121][.17BD.0020.000A.1F121][*02FC.0020.001F.1F121] # PARENTHESIZED LATIN CAPITAL LETTER R 211B ; [.17BD.0020.000B.211B] # SCRIPT CAPITAL R 211C ; [.17BD.0020.000B.211C] # BLACK-LETTER CAPITAL R 211D ; [.17BD.0020.000B.211D] # DOUBLE-STRUCK CAPITAL R 1D411 ; [.17BD.0020.000B.1D411] # MATHEMATICAL BOLD CAPITAL R 1D445 ; [.17BD.0020.000B.1D445] # MATHEMATICAL ITALIC CAPITAL R 1D479 ; [.17BD.0020.000B.1D479] # MATHEMATICAL BOLD ITALIC CAPITAL R 1D4E1 ; [.17BD.0020.000B.1D4E1] # MATHEMATICAL BOLD SCRIPT CAPITAL R 1D57D ; [.17BD.0020.000B.1D57D] # MATHEMATICAL BOLD FRAKTUR CAPITAL R 1D5B1 ; [.17BD.0020.000B.1D5B1] # MATHEMATICAL SANS-SERIF CAPITAL R 1D5E5 ; [.17BD.0020.000B.1D5E5] # MATHEMATICAL SANS-SERIF BOLD CAPITAL R 1D619 ; [.17BD.0020.000B.1D619] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL R 1D64D ; [.17BD.0020.000B.1D64D] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R 1D681 ; [.17BD.0020.000B.1D681] # MATHEMATICAL MONOSPACE CAPITAL R 24C7 ; [.17BD.0020.000C.24C7] # CIRCLED LATIN CAPITAL LETTER R 1F12C ; [.17BD.0020.000C.1F12C] # CIRCLED ITALIC LATIN CAPITAL LETTER R 1F161 ; [.17BD.0020.000C.1F161] # NEGATIVE CIRCLED LATIN CAPITAL LETTER R 1D63 ; [.17BD.0020.0015.1D63] # LATIN SUBSCRIPT SMALL LETTER R 1D3F ; [.17BD.0020.001D.1D3F] # MODIFIER LETTER CAPITAL R 1F141 ; [.17BD.0020.001D.1F141] # SQUARED LATIN CAPITAL LETTER R 1F181 ; [.17BD.0020.001D.1F181] # NEGATIVE SQUARED LATIN CAPITAL LETTER R 0155 ; [.17BD.0020.0002.0072][.0000.0032.0002.0301] # LATIN SMALL LETTER R WITH ACUTE 0154 ; [.17BD.0020.0008.0052][.0000.0032.0002.0301] # LATIN CAPITAL LETTER R WITH ACUTE 0159 ; [.17BD.0020.0002.0072][.0000.0041.0002.030C] # LATIN SMALL LETTER R WITH CARON 0158 ; [.17BD.0020.0008.0052][.0000.0041.0002.030C] # LATIN CAPITAL LETTER R WITH CARON 1E59 ; [.17BD.0020.0002.0072][.0000.0052.0002.0307] # LATIN SMALL LETTER R WITH DOT ABOVE 1E58 ; [.17BD.0020.0008.0052][.0000.0052.0002.0307] # LATIN CAPITAL LETTER R WITH DOT ABOVE 0157 ; [.17BD.0020.0002.0072][.0000.0056.0002.0327] # LATIN SMALL LETTER R WITH CEDILLA 0156 ; [.17BD.0020.0008.0052][.0000.0056.0002.0327] # LATIN CAPITAL LETTER R WITH CEDILLA A7A7 ; [.17BD.0020.0004.A7A7][.0000.0061.0004.A7A7] # LATIN SMALL LETTER R WITH OBLIQUE STROKE A7A6 ; [.17BD.0020.000A.A7A6][.0000.0061.0004.A7A6] # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE 0211 ; [.17BD.0020.0002.0072][.0000.0065.0002.030F] # LATIN SMALL LETTER R WITH DOUBLE GRAVE 0210 ; [.17BD.0020.0008.0052][.0000.0065.0002.030F] # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE 0213 ; [.17BD.0020.0002.0072][.0000.0067.0002.0311] # LATIN SMALL LETTER R WITH INVERTED BREVE 0212 ; [.17BD.0020.0008.0052][.0000.0067.0002.0311] # LATIN CAPITAL LETTER R WITH INVERTED BREVE 1E5B ; [.17BD.0020.0002.0072][.0000.0070.0002.0323] # LATIN SMALL LETTER R WITH DOT BELOW 1E5A ; [.17BD.0020.0008.0052][.0000.0070.0002.0323] # LATIN CAPITAL LETTER R WITH DOT BELOW 1E5D ; [.17BD.0020.0002.0072][.0000.0070.0002.0323][.0000.005B.0002.0304] # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON 1E5C ; [.17BD.0020.0008.0052][.0000.0070.0002.0323][.0000.005B.0002.0304] # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON 1E5F ; [.17BD.0020.0002.0072][.0000.007B.0002.0331] # LATIN SMALL LETTER R WITH LINE BELOW 1E5E ; [.17BD.0020.0008.0052][.0000.007B.0002.0331] # LATIN CAPITAL LETTER R WITH LINE BELOW A783 ; [.17BD.0020.0004.A783][.0000.013A.0004.A783] # LATIN SMALL LETTER INSULAR R A782 ; [.17BD.0020.000A.A782][.0000.013A.0004.A782] # LATIN CAPITAL LETTER INSULAR R 0280 ; [.17C1.0020.0002.0280] # LATIN LETTER SMALL CAPITAL R 01A6 ; [.17C1.0020.0008.01A6] # LATIN LETTER YR A75B ; [.17C5.0020.0002.A75B] # LATIN SMALL LETTER R ROTUNDA A75A ; [.17C5.0020.0008.A75A] # LATIN CAPITAL LETTER R ROTUNDA 1D19 ; [.17C6.0020.0002.1D19] # LATIN LETTER SMALL CAPITAL REVERSED R 024D ; [.17C7.0020.0002.024D] # LATIN SMALL LETTER R WITH STROKE 024C ; [.17C7.0020.0008.024C] # LATIN CAPITAL LETTER R WITH STROKE 1D72 ; [.17CB.0020.0002.1D72] # LATIN SMALL LETTER R WITH MIDDLE TILDE 0279 ; [.17CC.0020.0002.0279] # LATIN SMALL LETTER TURNED R 1D1A ; [.17D0.0020.0002.1D1A] # LATIN LETTER SMALL CAPITAL TURNED R 027A ; [.17D1.0020.0002.027A] # LATIN SMALL LETTER TURNED R WITH LONG LEG 1D89 ; [.17D5.0020.0002.1D89] # LATIN SMALL LETTER R WITH PALATAL HOOK 027B ; [.17D6.0020.0002.027B] # LATIN SMALL LETTER TURNED R WITH HOOK 2C79 ; [.17DA.0020.0002.2C79] # LATIN SMALL LETTER TURNED R WITH TAIL 027C ; [.17DB.0020.0002.027C] # LATIN SMALL LETTER R WITH LONG LEG 027D ; [.17DF.0020.0002.027D] # LATIN SMALL LETTER R WITH TAIL 2C64 ; [.17DF.0020.0008.2C64] # LATIN CAPITAL LETTER R WITH TAIL 027E ; [.17E3.0020.0002.027E] # LATIN SMALL LETTER R WITH FISHHOOK 1D73 ; [.17E7.0020.0002.1D73] # LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE 027F ; [.17E8.0020.0002.027F] # LATIN SMALL LETTER REVERSED R WITH FISHHOOK 0281 ; [.17EC.0020.0002.0281] # LATIN LETTER SMALL CAPITAL INVERTED R A775 ; [.17F0.0020.0002.A775] # LATIN SMALL LETTER RUM A776 ; [.17F1.0020.0002.A776] # LATIN LETTER SMALL CAPITAL RUM A75D ; [.17F2.0020.0002.A75D] # LATIN SMALL LETTER RUM ROTUNDA A75C ; [.17F2.0020.0008.A75C] # LATIN CAPITAL LETTER RUM ROTUNDA 0073 ; [.17F3.0020.0002.0073] # LATIN SMALL LETTER S 24AE ; [*02FB.0020.0004.24AE][.17F3.0020.0004.24AE][*02FC.0020.001F.24AE] # PARENTHESIZED LATIN SMALL LETTER S 1D42C ; [.17F3.0020.0005.1D42C] # MATHEMATICAL BOLD SMALL S 1D460 ; [.17F3.0020.0005.1D460] # MATHEMATICAL ITALIC SMALL S 1D494 ; [.17F3.0020.0005.1D494] # MATHEMATICAL BOLD ITALIC SMALL S 1D4C8 ; [.17F3.0020.0005.1D4C8] # MATHEMATICAL SCRIPT SMALL S 1D4FC ; [.17F3.0020.0005.1D4FC] # MATHEMATICAL BOLD SCRIPT SMALL S 1D530 ; [.17F3.0020.0005.1D530] # MATHEMATICAL FRAKTUR SMALL S 1D564 ; [.17F3.0020.0005.1D564] # MATHEMATICAL DOUBLE-STRUCK SMALL S 1D598 ; [.17F3.0020.0005.1D598] # MATHEMATICAL BOLD FRAKTUR SMALL S 1D5CC ; [.17F3.0020.0005.1D5CC] # MATHEMATICAL SANS-SERIF SMALL S 1D600 ; [.17F3.0020.0005.1D600] # MATHEMATICAL SANS-SERIF BOLD SMALL S 1D634 ; [.17F3.0020.0005.1D634] # MATHEMATICAL SANS-SERIF ITALIC SMALL S 1D668 ; [.17F3.0020.0005.1D668] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S 1D69C ; [.17F3.0020.0005.1D69C] # MATHEMATICAL MONOSPACE SMALL S 24E2 ; [.17F3.0020.0006.24E2] # CIRCLED LATIN SMALL LETTER S 0053 ; [.17F3.0020.0008.0053] # LATIN CAPITAL LETTER S 1F122 ; [*02FB.0020.0004.1F122][.17F3.0020.000A.1F122][*02FC.0020.001F.1F122] # PARENTHESIZED LATIN CAPITAL LETTER S 1F12A ; [*0359.0020.0004.1F12A][.17F3.0020.000A.1F12A][*035A.0020.001F.1F12A] # TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S 1D412 ; [.17F3.0020.000B.1D412] # MATHEMATICAL BOLD CAPITAL S 1D446 ; [.17F3.0020.000B.1D446] # MATHEMATICAL ITALIC CAPITAL S 1D47A ; [.17F3.0020.000B.1D47A] # MATHEMATICAL BOLD ITALIC CAPITAL S 1D4AE ; [.17F3.0020.000B.1D4AE] # MATHEMATICAL SCRIPT CAPITAL S 1D4E2 ; [.17F3.0020.000B.1D4E2] # MATHEMATICAL BOLD SCRIPT CAPITAL S 1D516 ; [.17F3.0020.000B.1D516] # MATHEMATICAL FRAKTUR CAPITAL S 1D54A ; [.17F3.0020.000B.1D54A] # MATHEMATICAL DOUBLE-STRUCK CAPITAL S 1D57E ; [.17F3.0020.000B.1D57E] # MATHEMATICAL BOLD FRAKTUR CAPITAL S 1D5B2 ; [.17F3.0020.000B.1D5B2] # MATHEMATICAL SANS-SERIF CAPITAL S 1D5E6 ; [.17F3.0020.000B.1D5E6] # MATHEMATICAL SANS-SERIF BOLD CAPITAL S 1D61A ; [.17F3.0020.000B.1D61A] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL S 1D64E ; [.17F3.0020.000B.1D64E] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S 1D682 ; [.17F3.0020.000B.1D682] # MATHEMATICAL MONOSPACE CAPITAL S 24C8 ; [.17F3.0020.000C.24C8] # CIRCLED LATIN CAPITAL LETTER S 1F162 ; [.17F3.0020.000C.1F162] # NEGATIVE CIRCLED LATIN CAPITAL LETTER S 209B ; [.17F3.0020.0015.209B] # LATIN SUBSCRIPT SMALL LETTER S 1F142 ; [.17F3.0020.001D.1F142] # SQUARED LATIN CAPITAL LETTER S 1F182 ; [.17F3.0020.001D.1F182] # NEGATIVE SQUARED LATIN CAPITAL LETTER S 015B ; [.17F3.0020.0002.0073][.0000.0032.0002.0301] # LATIN SMALL LETTER S WITH ACUTE 015A ; [.17F3.0020.0008.0053][.0000.0032.0002.0301] # LATIN CAPITAL LETTER S WITH ACUTE 1E65 ; [.17F3.0020.0002.0073][.0000.0032.0002.0301][.0000.0052.0002.0307] # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE 1E64 ; [.17F3.0020.0008.0053][.0000.0032.0002.0301][.0000.0052.0002.0307] # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE 015D ; [.17F3.0020.0002.0073][.0000.003C.0002.0302] # LATIN SMALL LETTER S WITH CIRCUMFLEX 015C ; [.17F3.0020.0008.0053][.0000.003C.0002.0302] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX 0161 ; [.17F3.0020.0002.0073][.0000.0041.0002.030C] # LATIN SMALL LETTER S WITH CARON 0160 ; [.17F3.0020.0008.0053][.0000.0041.0002.030C] # LATIN CAPITAL LETTER S WITH CARON 1E67 ; [.17F3.0020.0002.0073][.0000.0041.0002.030C][.0000.0052.0002.0307] # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE 1E66 ; [.17F3.0020.0008.0053][.0000.0041.0002.030C][.0000.0052.0002.0307] # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE 1E61 ; [.17F3.0020.0002.0073][.0000.0052.0002.0307] # LATIN SMALL LETTER S WITH DOT ABOVE 1E60 ; [.17F3.0020.0008.0053][.0000.0052.0002.0307] # LATIN CAPITAL LETTER S WITH DOT ABOVE 015F ; [.17F3.0020.0002.0073][.0000.0056.0002.0327] # LATIN SMALL LETTER S WITH CEDILLA 015E ; [.17F3.0020.0008.0053][.0000.0056.0002.0327] # LATIN CAPITAL LETTER S WITH CEDILLA A7A9 ; [.17F3.0020.0004.A7A9][.0000.0061.0004.A7A9] # LATIN SMALL LETTER S WITH OBLIQUE STROKE A7A8 ; [.17F3.0020.000A.A7A8][.0000.0061.0004.A7A8] # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE 1E63 ; [.17F3.0020.0002.0073][.0000.0070.0002.0323] # LATIN SMALL LETTER S WITH DOT BELOW 1E62 ; [.17F3.0020.0008.0053][.0000.0070.0002.0323] # LATIN CAPITAL LETTER S WITH DOT BELOW 1E69 ; [.17F3.0020.0002.0073][.0000.0070.0002.0323][.0000.0052.0002.0307] # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE 1E68 ; [.17F3.0020.0008.0053][.0000.0070.0002.0323][.0000.0052.0002.0307] # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE 0219 ; [.17F3.0020.0002.0073][.0000.0077.0002.0326] # LATIN SMALL LETTER S WITH COMMA BELOW 0218 ; [.17F3.0020.0008.0053][.0000.0077.0002.0326] # LATIN CAPITAL LETTER S WITH COMMA BELOW 017F ; [.17F3.0020.0004.017F][.0000.013A.0004.017F] # LATIN SMALL LETTER LONG S A785 ; [.17F3.0020.0004.A785][.0000.013A.0004.A785] # LATIN SMALL LETTER INSULAR S A784 ; [.17F3.0020.000A.A784][.0000.013A.0004.A784] # LATIN CAPITAL LETTER INSULAR S 1E9B ; [.17F3.0020.0004.1E9B][.0000.013A.0004.1E9B][.0000.0052.0002.1E9B] # LATIN SMALL LETTER LONG S WITH DOT ABOVE 1F18D ; [.17F3.0020.001D.1F18D][.15EF.0020.001D.1F18D] # NEGATIVE SQUARED SA 1F14C ; [.17F3.0020.001D.1F14C][.1631.0020.001D.1F14C] # SQUARED SD 2120 ; [.17F3.0020.0014.2120][.1741.0020.0014.2120] # SERVICE MARK 1F198 ; [.17F3.0020.001D.1F198][.1771.0020.001D.1F198][.17F3.0020.001D.1F198] # SQUARED SOS 1F14D ; [.17F3.0020.001D.1F14D][.17F3.0020.001D.1F14D] # SQUARED SS 00DF ; [.17F3.0020.0004.00DF][.0000.0139.0004.00DF][.17F3.0020.0004.00DF] # LATIN SMALL LETTER SHARP S 1E9E ; [.17F3.0020.000A.1E9E][.0000.0139.0004.1E9E][.17F3.0020.000A.1E9E] # LATIN CAPITAL LETTER SHARP S FB06 ; [.17F3.0020.0004.FB06][.1816.0020.0004.FB06] # LATIN SMALL LIGATURE ST FB05 ; [.17F3.0020.0004.FB05][.0000.013A.0004.FB05][.1816.0020.0004.FB05] # LATIN SMALL LIGATURE LONG S T A731 ; [.17F7.0020.0002.A731] # LATIN LETTER SMALL CAPITAL S 1D74 ; [.17F8.0020.0002.1D74] # LATIN SMALL LETTER S WITH MIDDLE TILDE 1D8A ; [.17F9.0020.0002.1D8A] # LATIN SMALL LETTER S WITH PALATAL HOOK 0282 ; [.17FA.0020.0002.0282] # LATIN SMALL LETTER S WITH HOOK 1DB3 ; [.17FA.0020.0014.1DB3] # MODIFIER LETTER SMALL S WITH HOOK 023F ; [.17FE.0020.0002.023F] # LATIN SMALL LETTER S WITH SWASH TAIL 2C7E ; [.17FE.0020.0008.2C7E] # LATIN CAPITAL LETTER S WITH SWASH TAIL 1E9C ; [.1802.0020.0002.1E9C] # LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE 1E9D ; [.1803.0020.0002.1E9D] # LATIN SMALL LETTER LONG S WITH HIGH STROKE 0283 ; [.1804.0020.0002.0283] # LATIN SMALL LETTER ESH 01A9 ; [.1804.0020.0008.01A9] # LATIN CAPITAL LETTER ESH 1DB4 ; [.1804.0020.0014.1DB4] # MODIFIER LETTER SMALL ESH 1D8B ; [.1808.0020.0002.1D8B] # LATIN SMALL LETTER ESH WITH PALATAL HOOK 01AA ; [.1809.0020.0002.01AA] # LATIN LETTER REVERSED ESH LOOP 0285 ; [.180D.0020.0002.0285] # LATIN SMALL LETTER SQUAT REVERSED ESH 1D98 ; [.1811.0020.0002.1D98] # LATIN SMALL LETTER ESH WITH RETROFLEX HOOK 0286 ; [.1812.0020.0002.0286] # LATIN SMALL LETTER ESH WITH CURL 0074 ; [.1816.0020.0002.0074] # LATIN SMALL LETTER T 24AF ; [*02FB.0020.0004.24AF][.1816.0020.0004.24AF][*02FC.0020.001F.24AF] # PARENTHESIZED LATIN SMALL LETTER T 1D42D ; [.1816.0020.0005.1D42D] # MATHEMATICAL BOLD SMALL T 1D461 ; [.1816.0020.0005.1D461] # MATHEMATICAL ITALIC SMALL T 1D495 ; [.1816.0020.0005.1D495] # MATHEMATICAL BOLD ITALIC SMALL T 1D4C9 ; [.1816.0020.0005.1D4C9] # MATHEMATICAL SCRIPT SMALL T 1D4FD ; [.1816.0020.0005.1D4FD] # MATHEMATICAL BOLD SCRIPT SMALL T 1D531 ; [.1816.0020.0005.1D531] # MATHEMATICAL FRAKTUR SMALL T 1D565 ; [.1816.0020.0005.1D565] # MATHEMATICAL DOUBLE-STRUCK SMALL T 1D599 ; [.1816.0020.0005.1D599] # MATHEMATICAL BOLD FRAKTUR SMALL T 1D5CD ; [.1816.0020.0005.1D5CD] # MATHEMATICAL SANS-SERIF SMALL T 1D601 ; [.1816.0020.0005.1D601] # MATHEMATICAL SANS-SERIF BOLD SMALL T 1D635 ; [.1816.0020.0005.1D635] # MATHEMATICAL SANS-SERIF ITALIC SMALL T 1D669 ; [.1816.0020.0005.1D669] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T 1D69D ; [.1816.0020.0005.1D69D] # MATHEMATICAL MONOSPACE SMALL T 24E3 ; [.1816.0020.0006.24E3] # CIRCLED LATIN SMALL LETTER T 0054 ; [.1816.0020.0008.0054] # LATIN CAPITAL LETTER T 1F123 ; [*02FB.0020.0004.1F123][.1816.0020.000A.1F123][*02FC.0020.001F.1F123] # PARENTHESIZED LATIN CAPITAL LETTER T 1D413 ; [.1816.0020.000B.1D413] # MATHEMATICAL BOLD CAPITAL T 1D447 ; [.1816.0020.000B.1D447] # MATHEMATICAL ITALIC CAPITAL T 1D47B ; [.1816.0020.000B.1D47B] # MATHEMATICAL BOLD ITALIC CAPITAL T 1D4AF ; [.1816.0020.000B.1D4AF] # MATHEMATICAL SCRIPT CAPITAL T 1D4E3 ; [.1816.0020.000B.1D4E3] # MATHEMATICAL BOLD SCRIPT CAPITAL T 1D517 ; [.1816.0020.000B.1D517] # MATHEMATICAL FRAKTUR CAPITAL T 1D54B ; [.1816.0020.000B.1D54B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL T 1D57F ; [.1816.0020.000B.1D57F] # MATHEMATICAL BOLD FRAKTUR CAPITAL T 1D5B3 ; [.1816.0020.000B.1D5B3] # MATHEMATICAL SANS-SERIF CAPITAL T 1D5E7 ; [.1816.0020.000B.1D5E7] # MATHEMATICAL SANS-SERIF BOLD CAPITAL T 1D61B ; [.1816.0020.000B.1D61B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL T 1D64F ; [.1816.0020.000B.1D64F] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T 1D683 ; [.1816.0020.000B.1D683] # MATHEMATICAL MONOSPACE CAPITAL T 24C9 ; [.1816.0020.000C.24C9] # CIRCLED LATIN CAPITAL LETTER T 1F163 ; [.1816.0020.000C.1F163] # NEGATIVE CIRCLED LATIN CAPITAL LETTER T 1D57 ; [.1816.0020.0014.1D57] # MODIFIER LETTER SMALL T 209C ; [.1816.0020.0015.209C] # LATIN SUBSCRIPT SMALL LETTER T 1D40 ; [.1816.0020.001D.1D40] # MODIFIER LETTER CAPITAL T 1F143 ; [.1816.0020.001D.1F143] # SQUARED LATIN CAPITAL LETTER T 1F183 ; [.1816.0020.001D.1F183] # NEGATIVE SQUARED LATIN CAPITAL LETTER T 0165 ; [.1816.0020.0002.0074][.0000.0041.0002.030C] # LATIN SMALL LETTER T WITH CARON 0164 ; [.1816.0020.0008.0054][.0000.0041.0002.030C] # LATIN CAPITAL LETTER T WITH CARON 1E97 ; [.1816.0020.0002.0074][.0000.0047.0002.0308] # LATIN SMALL LETTER T WITH DIAERESIS 1E6B ; [.1816.0020.0002.0074][.0000.0052.0002.0307] # LATIN SMALL LETTER T WITH DOT ABOVE 1E6A ; [.1816.0020.0008.0054][.0000.0052.0002.0307] # LATIN CAPITAL LETTER T WITH DOT ABOVE 0163 ; [.1816.0020.0002.0074][.0000.0056.0002.0327] # LATIN SMALL LETTER T WITH CEDILLA 0162 ; [.1816.0020.0008.0054][.0000.0056.0002.0327] # LATIN CAPITAL LETTER T WITH CEDILLA 1E6D ; [.1816.0020.0002.0074][.0000.0070.0002.0323] # LATIN SMALL LETTER T WITH DOT BELOW 1E6C ; [.1816.0020.0008.0054][.0000.0070.0002.0323] # LATIN CAPITAL LETTER T WITH DOT BELOW 021B ; [.1816.0020.0002.0074][.0000.0077.0002.0326] # LATIN SMALL LETTER T WITH COMMA BELOW 021A ; [.1816.0020.0008.0054][.0000.0077.0002.0326] # LATIN CAPITAL LETTER T WITH COMMA BELOW 1E71 ; [.1816.0020.0002.0074][.0000.0078.0002.032D] # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW 1E70 ; [.1816.0020.0008.0054][.0000.0078.0002.032D] # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW 1E6F ; [.1816.0020.0002.0074][.0000.007B.0002.0331] # LATIN SMALL LETTER T WITH LINE BELOW 1E6E ; [.1816.0020.0008.0054][.0000.007B.0002.0331] # LATIN CAPITAL LETTER T WITH LINE BELOW A787 ; [.1816.0020.0004.A787][.0000.013A.0004.A787] # LATIN SMALL LETTER INSULAR T A786 ; [.1816.0020.000A.A786][.0000.013A.0004.A786] # LATIN CAPITAL LETTER INSULAR T 02A8 ; [.1816.0020.0004.02A8][.162B.0020.0004.02A8] # LATIN SMALL LETTER TC DIGRAPH WITH CURL 2121 ; [.1816.0020.000A.2121][.164C.0020.000A.2121][.1711.0020.000A.2121] # TELEPHONE SIGN 1D7A ; [.1816.0020.0004.1D7A][.0000.0139.0004.1D7A][.16B4.0020.0004.1D7A] # LATIN SMALL LETTER TH WITH STRIKETHROUGH 2122 ; [.1816.0020.0014.2122][.1741.0020.0014.2122] # TRADE MARK SIGN 01BE ; [.1816.0020.0004.01BE][.17F3.0020.0004.01BE] # LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE 02A6 ; [.1816.0020.0004.02A6][.17F3.0020.0004.02A6] # LATIN SMALL LETTER TS DIGRAPH 02A7 ; [.1816.0020.0004.02A7][.1804.0020.0004.02A7] # LATIN SMALL LETTER TESH DIGRAPH A729 ; [.1816.0020.0004.A729][.1895.0020.0004.A729] # LATIN SMALL LETTER TZ A728 ; [.1816.0020.000A.A728][.1895.0020.0004.A728] # LATIN CAPITAL LETTER TZ 1D1B ; [.181A.0020.0002.1D1B] # LATIN LETTER SMALL CAPITAL T 0167 ; [.181B.0020.0002.0167] # LATIN SMALL LETTER T WITH STROKE 0166 ; [.181B.0020.0008.0166] # LATIN CAPITAL LETTER T WITH STROKE 2C66 ; [.181F.0020.0002.2C66] # LATIN SMALL LETTER T WITH DIAGONAL STROKE 023E ; [.181F.0020.0008.023E] # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE 1D75 ; [.1820.0020.0002.1D75] # LATIN SMALL LETTER T WITH MIDDLE TILDE 01AB ; [.1821.0020.0002.01AB] # LATIN SMALL LETTER T WITH PALATAL HOOK 1DB5 ; [.1821.0020.0014.1DB5] # MODIFIER LETTER SMALL T WITH PALATAL HOOK 01AD ; [.1825.0020.0002.01AD] # LATIN SMALL LETTER T WITH HOOK 01AC ; [.1825.0020.0008.01AC] # LATIN CAPITAL LETTER T WITH HOOK 0288 ; [.1829.0020.0002.0288] # LATIN SMALL LETTER T WITH RETROFLEX HOOK 01AE ; [.1829.0020.0008.01AE] # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK 0236 ; [.182D.0020.0002.0236] # LATIN SMALL LETTER T WITH CURL A777 ; [.1831.0020.0002.A777] # LATIN SMALL LETTER TUM 0287 ; [.1832.0020.0002.0287] # LATIN SMALL LETTER TURNED T 0075 ; [.1836.0020.0002.0075] # LATIN SMALL LETTER U 24B0 ; [*02FB.0020.0004.24B0][.1836.0020.0004.24B0][*02FC.0020.001F.24B0] # PARENTHESIZED LATIN SMALL LETTER U 1D42E ; [.1836.0020.0005.1D42E] # MATHEMATICAL BOLD SMALL U 1D462 ; [.1836.0020.0005.1D462] # MATHEMATICAL ITALIC SMALL U 1D496 ; [.1836.0020.0005.1D496] # MATHEMATICAL BOLD ITALIC SMALL U 1D4CA ; [.1836.0020.0005.1D4CA] # MATHEMATICAL SCRIPT SMALL U 1D4FE ; [.1836.0020.0005.1D4FE] # MATHEMATICAL BOLD SCRIPT SMALL U 1D532 ; [.1836.0020.0005.1D532] # MATHEMATICAL FRAKTUR SMALL U 1D566 ; [.1836.0020.0005.1D566] # MATHEMATICAL DOUBLE-STRUCK SMALL U 1D59A ; [.1836.0020.0005.1D59A] # MATHEMATICAL BOLD FRAKTUR SMALL U 1D5CE ; [.1836.0020.0005.1D5CE] # MATHEMATICAL SANS-SERIF SMALL U 1D602 ; [.1836.0020.0005.1D602] # MATHEMATICAL SANS-SERIF BOLD SMALL U 1D636 ; [.1836.0020.0005.1D636] # MATHEMATICAL SANS-SERIF ITALIC SMALL U 1D66A ; [.1836.0020.0005.1D66A] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U 1D69E ; [.1836.0020.0005.1D69E] # MATHEMATICAL MONOSPACE SMALL U 24E4 ; [.1836.0020.0006.24E4] # CIRCLED LATIN SMALL LETTER U 0055 ; [.1836.0020.0008.0055] # LATIN CAPITAL LETTER U 1F124 ; [*02FB.0020.0004.1F124][.1836.0020.000A.1F124][*02FC.0020.001F.1F124] # PARENTHESIZED LATIN CAPITAL LETTER U 1D414 ; [.1836.0020.000B.1D414] # MATHEMATICAL BOLD CAPITAL U 1D448 ; [.1836.0020.000B.1D448] # MATHEMATICAL ITALIC CAPITAL U 1D47C ; [.1836.0020.000B.1D47C] # MATHEMATICAL BOLD ITALIC CAPITAL U 1D4B0 ; [.1836.0020.000B.1D4B0] # MATHEMATICAL SCRIPT CAPITAL U 1D4E4 ; [.1836.0020.000B.1D4E4] # MATHEMATICAL BOLD SCRIPT CAPITAL U 1D518 ; [.1836.0020.000B.1D518] # MATHEMATICAL FRAKTUR CAPITAL U 1D54C ; [.1836.0020.000B.1D54C] # MATHEMATICAL DOUBLE-STRUCK CAPITAL U 1D580 ; [.1836.0020.000B.1D580] # MATHEMATICAL BOLD FRAKTUR CAPITAL U 1D5B4 ; [.1836.0020.000B.1D5B4] # MATHEMATICAL SANS-SERIF CAPITAL U 1D5E8 ; [.1836.0020.000B.1D5E8] # MATHEMATICAL SANS-SERIF BOLD CAPITAL U 1D61C ; [.1836.0020.000B.1D61C] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL U 1D650 ; [.1836.0020.000B.1D650] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U 1D684 ; [.1836.0020.000B.1D684] # MATHEMATICAL MONOSPACE CAPITAL U 24CA ; [.1836.0020.000C.24CA] # CIRCLED LATIN CAPITAL LETTER U 1F164 ; [.1836.0020.000C.1F164] # NEGATIVE CIRCLED LATIN CAPITAL LETTER U 1D58 ; [.1836.0020.0014.1D58] # MODIFIER LETTER SMALL U 1D64 ; [.1836.0020.0015.1D64] # LATIN SUBSCRIPT SMALL LETTER U 1D41 ; [.1836.0020.001D.1D41] # MODIFIER LETTER CAPITAL U 1F144 ; [.1836.0020.001D.1F144] # SQUARED LATIN CAPITAL LETTER U 1F184 ; [.1836.0020.001D.1F184] # NEGATIVE SQUARED LATIN CAPITAL LETTER U 00FA ; [.1836.0020.0002.0075][.0000.0032.0002.0301] # LATIN SMALL LETTER U WITH ACUTE 00DA ; [.1836.0020.0008.0055][.0000.0032.0002.0301] # LATIN CAPITAL LETTER U WITH ACUTE 00F9 ; [.1836.0020.0002.0075][.0000.0035.0002.0300] # LATIN SMALL LETTER U WITH GRAVE 00D9 ; [.1836.0020.0008.0055][.0000.0035.0002.0300] # LATIN CAPITAL LETTER U WITH GRAVE 016D ; [.1836.0020.0002.0075][.0000.0037.0002.0306] # LATIN SMALL LETTER U WITH BREVE 016C ; [.1836.0020.0008.0055][.0000.0037.0002.0306] # LATIN CAPITAL LETTER U WITH BREVE 00FB ; [.1836.0020.0002.0075][.0000.003C.0002.0302] # LATIN SMALL LETTER U WITH CIRCUMFLEX 00DB ; [.1836.0020.0008.0055][.0000.003C.0002.0302] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 01D4 ; [.1836.0020.0002.0075][.0000.0041.0002.030C] # LATIN SMALL LETTER U WITH CARON 01D3 ; [.1836.0020.0008.0055][.0000.0041.0002.030C] # LATIN CAPITAL LETTER U WITH CARON 016F ; [.1836.0020.0002.0075][.0000.0043.0002.030A] # LATIN SMALL LETTER U WITH RING ABOVE 016E ; [.1836.0020.0008.0055][.0000.0043.0002.030A] # LATIN CAPITAL LETTER U WITH RING ABOVE 00FC ; [.1836.0020.0002.0075][.0000.0047.0002.0308] # LATIN SMALL LETTER U WITH DIAERESIS 00DC ; [.1836.0020.0008.0055][.0000.0047.0002.0308] # LATIN CAPITAL LETTER U WITH DIAERESIS 01D8 ; [.1836.0020.0002.0075][.0000.0047.0002.0308][.0000.0032.0002.0301] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE 01D7 ; [.1836.0020.0008.0055][.0000.0047.0002.0308][.0000.0032.0002.0301] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE 01DC ; [.1836.0020.0002.0075][.0000.0047.0002.0308][.0000.0035.0002.0300] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE 01DB ; [.1836.0020.0008.0055][.0000.0047.0002.0308][.0000.0035.0002.0300] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE 01DA ; [.1836.0020.0002.0075][.0000.0047.0002.0308][.0000.0041.0002.030C] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON 01D9 ; [.1836.0020.0008.0055][.0000.0047.0002.0308][.0000.0041.0002.030C] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON 01D6 ; [.1836.0020.0002.0075][.0000.0047.0002.0308][.0000.005B.0002.0304] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON 01D5 ; [.1836.0020.0008.0055][.0000.0047.0002.0308][.0000.005B.0002.0304] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON 0171 ; [.1836.0020.0002.0075][.0000.004D.0002.030B] # LATIN SMALL LETTER U WITH DOUBLE ACUTE 0170 ; [.1836.0020.0008.0055][.0000.004D.0002.030B] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE 0169 ; [.1836.0020.0002.0075][.0000.004E.0002.0303] # LATIN SMALL LETTER U WITH TILDE 0168 ; [.1836.0020.0008.0055][.0000.004E.0002.0303] # LATIN CAPITAL LETTER U WITH TILDE 1E79 ; [.1836.0020.0002.0075][.0000.004E.0002.0303][.0000.0032.0002.0301] # LATIN SMALL LETTER U WITH TILDE AND ACUTE 1E78 ; [.1836.0020.0008.0055][.0000.004E.0002.0303][.0000.0032.0002.0301] # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE 0173 ; [.1836.0020.0002.0075][.0000.0059.0002.0328] # LATIN SMALL LETTER U WITH OGONEK 0172 ; [.1836.0020.0008.0055][.0000.0059.0002.0328] # LATIN CAPITAL LETTER U WITH OGONEK 016B ; [.1836.0020.0002.0075][.0000.005B.0002.0304] # LATIN SMALL LETTER U WITH MACRON 016A ; [.1836.0020.0008.0055][.0000.005B.0002.0304] # LATIN CAPITAL LETTER U WITH MACRON 1E7B ; [.1836.0020.0002.0075][.0000.005B.0002.0304][.0000.0047.0002.0308] # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS 1E7A ; [.1836.0020.0008.0055][.0000.005B.0002.0304][.0000.0047.0002.0308] # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS 1EE7 ; [.1836.0020.0002.0075][.0000.0064.0002.0309] # LATIN SMALL LETTER U WITH HOOK ABOVE 1EE6 ; [.1836.0020.0008.0055][.0000.0064.0002.0309] # LATIN CAPITAL LETTER U WITH HOOK ABOVE 0215 ; [.1836.0020.0002.0075][.0000.0065.0002.030F] # LATIN SMALL LETTER U WITH DOUBLE GRAVE 0214 ; [.1836.0020.0008.0055][.0000.0065.0002.030F] # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE 0217 ; [.1836.0020.0002.0075][.0000.0067.0002.0311] # LATIN SMALL LETTER U WITH INVERTED BREVE 0216 ; [.1836.0020.0008.0055][.0000.0067.0002.0311] # LATIN CAPITAL LETTER U WITH INVERTED BREVE 01B0 ; [.1836.0020.0002.0075][.0000.0068.0002.031B] # LATIN SMALL LETTER U WITH HORN 01AF ; [.1836.0020.0008.0055][.0000.0068.0002.031B] # LATIN CAPITAL LETTER U WITH HORN 1EE9 ; [.1836.0020.0002.0075][.0000.0068.0002.031B][.0000.0032.0002.0301] # LATIN SMALL LETTER U WITH HORN AND ACUTE 1EE8 ; [.1836.0020.0008.0055][.0000.0068.0002.031B][.0000.0032.0002.0301] # LATIN CAPITAL LETTER U WITH HORN AND ACUTE 1EEB ; [.1836.0020.0002.0075][.0000.0068.0002.031B][.0000.0035.0002.0300] # LATIN SMALL LETTER U WITH HORN AND GRAVE 1EEA ; [.1836.0020.0008.0055][.0000.0068.0002.031B][.0000.0035.0002.0300] # LATIN CAPITAL LETTER U WITH HORN AND GRAVE 1EEF ; [.1836.0020.0002.0075][.0000.0068.0002.031B][.0000.004E.0002.0303] # LATIN SMALL LETTER U WITH HORN AND TILDE 1EEE ; [.1836.0020.0008.0055][.0000.0068.0002.031B][.0000.004E.0002.0303] # LATIN CAPITAL LETTER U WITH HORN AND TILDE 1EED ; [.1836.0020.0002.0075][.0000.0068.0002.031B][.0000.0064.0002.0309] # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE 1EEC ; [.1836.0020.0008.0055][.0000.0068.0002.031B][.0000.0064.0002.0309] # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE 1EF1 ; [.1836.0020.0002.0075][.0000.0068.0002.031B][.0000.0070.0002.0323] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW 1EF0 ; [.1836.0020.0008.0055][.0000.0068.0002.031B][.0000.0070.0002.0323] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW 1EE5 ; [.1836.0020.0002.0075][.0000.0070.0002.0323] # LATIN SMALL LETTER U WITH DOT BELOW 1EE4 ; [.1836.0020.0008.0055][.0000.0070.0002.0323] # LATIN CAPITAL LETTER U WITH DOT BELOW 1E73 ; [.1836.0020.0002.0075][.0000.0075.0002.0324] # LATIN SMALL LETTER U WITH DIAERESIS BELOW 1E72 ; [.1836.0020.0008.0055][.0000.0075.0002.0324] # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW 1E77 ; [.1836.0020.0002.0075][.0000.0078.0002.032D] # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW 1E76 ; [.1836.0020.0008.0055][.0000.0078.0002.032D] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW 1E75 ; [.1836.0020.0002.0075][.0000.007A.0002.0330] # LATIN SMALL LETTER U WITH TILDE BELOW 1E74 ; [.1836.0020.0008.0055][.0000.007A.0002.0330] # LATIN CAPITAL LETTER U WITH TILDE BELOW 1F199 ; [.1836.0020.001D.1F199][.1796.0020.001D.1F199][*025E.0020.001C.1F199] # SQUARED UP WITH EXCLAMATION MARK 1D1C ; [.183A.0020.0002.1D1C] # LATIN LETTER SMALL CAPITAL U 1DB8 ; [.183A.0020.0014.1DB8] # MODIFIER LETTER SMALL CAPITAL U 1D1D ; [.183B.0020.0002.1D1D] # LATIN SMALL LETTER SIDEWAYS U 1D59 ; [.183B.0020.0014.1D59] # MODIFIER LETTER SMALL SIDEWAYS U 1D1E ; [.183C.0020.0002.1D1E] # LATIN SMALL LETTER SIDEWAYS DIAERESIZED U 1D6B ; [.183D.0020.0002.1D6B] # LATIN SMALL LETTER UE 0289 ; [.183E.0020.0002.0289] # LATIN SMALL LETTER U BAR 0244 ; [.183E.0020.0008.0244] # LATIN CAPITAL LETTER U BAR 1DB6 ; [.183E.0020.0014.1DB6] # MODIFIER LETTER SMALL U BAR 1D7E ; [.1842.0020.0002.1D7E] # LATIN SMALL CAPITAL LETTER U WITH STROKE 1D99 ; [.1843.0020.0002.1D99] # LATIN SMALL LETTER U WITH RETROFLEX HOOK 0265 ; [.1844.0020.0002.0265] # LATIN SMALL LETTER TURNED H A78D ; [.1844.0020.0008.A78D] # LATIN CAPITAL LETTER TURNED H 1DA3 ; [.1844.0020.0014.1DA3] # MODIFIER LETTER SMALL TURNED H 02AE ; [.1848.0020.0002.02AE] # LATIN SMALL LETTER TURNED H WITH FISHHOOK 02AF ; [.184C.0020.0002.02AF] # LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 026F ; [.1850.0020.0002.026F] # LATIN SMALL LETTER TURNED M 019C ; [.1850.0020.0008.019C] # LATIN CAPITAL LETTER TURNED M 1D5A ; [.1850.0020.0014.1D5A] # MODIFIER LETTER SMALL TURNED M A7FA ; [.1854.0020.0002.A7FA] # LATIN LETTER SMALL CAPITAL TURNED M 1D1F ; [.1855.0020.0002.1D1F] # LATIN SMALL LETTER SIDEWAYS TURNED M 0270 ; [.1856.0020.0002.0270] # LATIN SMALL LETTER TURNED M WITH LONG LEG 1DAD ; [.1856.0020.0014.1DAD] # MODIFIER LETTER SMALL TURNED M WITH LONG LEG 028A ; [.185A.0020.0002.028A] # LATIN SMALL LETTER UPSILON 01B1 ; [.185A.0020.0008.01B1] # LATIN CAPITAL LETTER UPSILON 1DB7 ; [.185A.0020.0014.1DB7] # MODIFIER LETTER SMALL UPSILON 1D7F ; [.185E.0020.0002.1D7F] # LATIN SMALL LETTER UPSILON WITH STROKE 0076 ; [.185F.0020.0002.0076] # LATIN SMALL LETTER V 24B1 ; [*02FB.0020.0004.24B1][.185F.0020.0004.24B1][*02FC.0020.001F.24B1] # PARENTHESIZED LATIN SMALL LETTER V 1D42F ; [.185F.0020.0005.1D42F] # MATHEMATICAL BOLD SMALL V 1D463 ; [.185F.0020.0005.1D463] # MATHEMATICAL ITALIC SMALL V 1D497 ; [.185F.0020.0005.1D497] # MATHEMATICAL BOLD ITALIC SMALL V 1D4CB ; [.185F.0020.0005.1D4CB] # MATHEMATICAL SCRIPT SMALL V 1D4FF ; [.185F.0020.0005.1D4FF] # MATHEMATICAL BOLD SCRIPT SMALL V 1D533 ; [.185F.0020.0005.1D533] # MATHEMATICAL FRAKTUR SMALL V 1D567 ; [.185F.0020.0005.1D567] # MATHEMATICAL DOUBLE-STRUCK SMALL V 1D59B ; [.185F.0020.0005.1D59B] # MATHEMATICAL BOLD FRAKTUR SMALL V 1D5CF ; [.185F.0020.0005.1D5CF] # MATHEMATICAL SANS-SERIF SMALL V 1D603 ; [.185F.0020.0005.1D603] # MATHEMATICAL SANS-SERIF BOLD SMALL V 1D637 ; [.185F.0020.0005.1D637] # MATHEMATICAL SANS-SERIF ITALIC SMALL V 1D66B ; [.185F.0020.0005.1D66B] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V 1D69F ; [.185F.0020.0005.1D69F] # MATHEMATICAL MONOSPACE SMALL V 24E5 ; [.185F.0020.0006.24E5] # CIRCLED LATIN SMALL LETTER V 0056 ; [.185F.0020.0008.0056] # LATIN CAPITAL LETTER V 1F125 ; [*02FB.0020.0004.1F125][.185F.0020.000A.1F125][*02FC.0020.001F.1F125] # PARENTHESIZED LATIN CAPITAL LETTER V 1D415 ; [.185F.0020.000B.1D415] # MATHEMATICAL BOLD CAPITAL V 1D449 ; [.185F.0020.000B.1D449] # MATHEMATICAL ITALIC CAPITAL V 1D47D ; [.185F.0020.000B.1D47D] # MATHEMATICAL BOLD ITALIC CAPITAL V 1D4B1 ; [.185F.0020.000B.1D4B1] # MATHEMATICAL SCRIPT CAPITAL V 1D4E5 ; [.185F.0020.000B.1D4E5] # MATHEMATICAL BOLD SCRIPT CAPITAL V 1D519 ; [.185F.0020.000B.1D519] # MATHEMATICAL FRAKTUR CAPITAL V 1D54D ; [.185F.0020.000B.1D54D] # MATHEMATICAL DOUBLE-STRUCK CAPITAL V 1D581 ; [.185F.0020.000B.1D581] # MATHEMATICAL BOLD FRAKTUR CAPITAL V 1D5B5 ; [.185F.0020.000B.1D5B5] # MATHEMATICAL SANS-SERIF CAPITAL V 1D5E9 ; [.185F.0020.000B.1D5E9] # MATHEMATICAL SANS-SERIF BOLD CAPITAL V 1D61D ; [.185F.0020.000B.1D61D] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL V 1D651 ; [.185F.0020.000B.1D651] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V 1D685 ; [.185F.0020.000B.1D685] # MATHEMATICAL MONOSPACE CAPITAL V 24CB ; [.185F.0020.000C.24CB] # CIRCLED LATIN CAPITAL LETTER V 1F165 ; [.185F.0020.000C.1F165] # NEGATIVE CIRCLED LATIN CAPITAL LETTER V 1D5B ; [.185F.0020.0014.1D5B] # MODIFIER LETTER SMALL V 1D65 ; [.185F.0020.0015.1D65] # LATIN SUBSCRIPT SMALL LETTER V 2C7D ; [.185F.0020.001D.2C7D] # MODIFIER LETTER CAPITAL V 1F145 ; [.185F.0020.001D.1F145] # SQUARED LATIN CAPITAL LETTER V 1F185 ; [.185F.0020.001D.1F185] # NEGATIVE SQUARED LATIN CAPITAL LETTER V 1E7D ; [.185F.0020.0002.0076][.0000.004E.0002.0303] # LATIN SMALL LETTER V WITH TILDE 1E7C ; [.185F.0020.0008.0056][.0000.004E.0002.0303] # LATIN CAPITAL LETTER V WITH TILDE 1E7F ; [.185F.0020.0002.0076][.0000.0070.0002.0323] # LATIN SMALL LETTER V WITH DOT BELOW 1E7E ; [.185F.0020.0008.0056][.0000.0070.0002.0323] # LATIN CAPITAL LETTER V WITH DOT BELOW 1F19A ; [.185F.0020.001D.1F19A][.17F3.0020.001D.1F19A] # SQUARED VS A761 ; [.185F.0020.0004.A761][.1880.0020.0004.A761] # LATIN SMALL LETTER VY A760 ; [.185F.0020.000A.A760][.1880.0020.000A.A760] # LATIN CAPITAL LETTER VY 1D20 ; [.1863.0020.0002.1D20] # LATIN LETTER SMALL CAPITAL V A75F ; [.1864.0020.0002.A75F] # LATIN SMALL LETTER V WITH DIAGONAL STROKE A75E ; [.1864.0020.0008.A75E] # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE 1D8C ; [.1865.0020.0002.1D8C] # LATIN SMALL LETTER V WITH PALATAL HOOK 028B ; [.1866.0020.0002.028B] # LATIN SMALL LETTER V WITH HOOK 01B2 ; [.1866.0020.0008.01B2] # LATIN CAPITAL LETTER V WITH HOOK 1DB9 ; [.1866.0020.0014.1DB9] # MODIFIER LETTER SMALL V WITH HOOK 2C71 ; [.186A.0020.0002.2C71] # LATIN SMALL LETTER V WITH RIGHT HOOK 2C74 ; [.186B.0020.0002.2C74] # LATIN SMALL LETTER V WITH CURL 1EFD ; [.186C.0020.0002.1EFD] # LATIN SMALL LETTER MIDDLE-WELSH V 1EFC ; [.186C.0020.0008.1EFC] # LATIN CAPITAL LETTER MIDDLE-WELSH V 028C ; [.186D.0020.0002.028C] # LATIN SMALL LETTER TURNED V 0245 ; [.186D.0020.0008.0245] # LATIN CAPITAL LETTER TURNED V 1DBA ; [.186D.0020.0014.1DBA] # MODIFIER LETTER SMALL TURNED V 0077 ; [.1871.0020.0002.0077] # LATIN SMALL LETTER W 24B2 ; [*02FB.0020.0004.24B2][.1871.0020.0004.24B2][*02FC.0020.001F.24B2] # PARENTHESIZED LATIN SMALL LETTER W 1D430 ; [.1871.0020.0005.1D430] # MATHEMATICAL BOLD SMALL W 1D464 ; [.1871.0020.0005.1D464] # MATHEMATICAL ITALIC SMALL W 1D498 ; [.1871.0020.0005.1D498] # MATHEMATICAL BOLD ITALIC SMALL W 1D4CC ; [.1871.0020.0005.1D4CC] # MATHEMATICAL SCRIPT SMALL W 1D500 ; [.1871.0020.0005.1D500] # MATHEMATICAL BOLD SCRIPT SMALL W 1D534 ; [.1871.0020.0005.1D534] # MATHEMATICAL FRAKTUR SMALL W 1D568 ; [.1871.0020.0005.1D568] # MATHEMATICAL DOUBLE-STRUCK SMALL W 1D59C ; [.1871.0020.0005.1D59C] # MATHEMATICAL BOLD FRAKTUR SMALL W 1D5D0 ; [.1871.0020.0005.1D5D0] # MATHEMATICAL SANS-SERIF SMALL W 1D604 ; [.1871.0020.0005.1D604] # MATHEMATICAL SANS-SERIF BOLD SMALL W 1D638 ; [.1871.0020.0005.1D638] # MATHEMATICAL SANS-SERIF ITALIC SMALL W 1D66C ; [.1871.0020.0005.1D66C] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W 1D6A0 ; [.1871.0020.0005.1D6A0] # MATHEMATICAL MONOSPACE SMALL W 24E6 ; [.1871.0020.0006.24E6] # CIRCLED LATIN SMALL LETTER W 0057 ; [.1871.0020.0008.0057] # LATIN CAPITAL LETTER W 1F126 ; [*02FB.0020.0004.1F126][.1871.0020.000A.1F126][*02FC.0020.001F.1F126] # PARENTHESIZED LATIN CAPITAL LETTER W 1D416 ; [.1871.0020.000B.1D416] # MATHEMATICAL BOLD CAPITAL W 1D44A ; [.1871.0020.000B.1D44A] # MATHEMATICAL ITALIC CAPITAL W 1D47E ; [.1871.0020.000B.1D47E] # MATHEMATICAL BOLD ITALIC CAPITAL W 1D4B2 ; [.1871.0020.000B.1D4B2] # MATHEMATICAL SCRIPT CAPITAL W 1D4E6 ; [.1871.0020.000B.1D4E6] # MATHEMATICAL BOLD SCRIPT CAPITAL W 1D51A ; [.1871.0020.000B.1D51A] # MATHEMATICAL FRAKTUR CAPITAL W 1D54E ; [.1871.0020.000B.1D54E] # MATHEMATICAL DOUBLE-STRUCK CAPITAL W 1D582 ; [.1871.0020.000B.1D582] # MATHEMATICAL BOLD FRAKTUR CAPITAL W 1D5B6 ; [.1871.0020.000B.1D5B6] # MATHEMATICAL SANS-SERIF CAPITAL W 1D5EA ; [.1871.0020.000B.1D5EA] # MATHEMATICAL SANS-SERIF BOLD CAPITAL W 1D61E ; [.1871.0020.000B.1D61E] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL W 1D652 ; [.1871.0020.000B.1D652] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W 1D686 ; [.1871.0020.000B.1D686] # MATHEMATICAL MONOSPACE CAPITAL W 24CC ; [.1871.0020.000C.24CC] # CIRCLED LATIN CAPITAL LETTER W 1F166 ; [.1871.0020.000C.1F166] # NEGATIVE CIRCLED LATIN CAPITAL LETTER W 1D42 ; [.1871.0020.001D.1D42] # MODIFIER LETTER CAPITAL W 1F146 ; [.1871.0020.001D.1F146] # SQUARED LATIN CAPITAL LETTER W 1F186 ; [.1871.0020.001D.1F186] # NEGATIVE SQUARED LATIN CAPITAL LETTER W 1E83 ; [.1871.0020.0002.0077][.0000.0032.0002.0301] # LATIN SMALL LETTER W WITH ACUTE 1E82 ; [.1871.0020.0008.0057][.0000.0032.0002.0301] # LATIN CAPITAL LETTER W WITH ACUTE 1E81 ; [.1871.0020.0002.0077][.0000.0035.0002.0300] # LATIN SMALL LETTER W WITH GRAVE 1E80 ; [.1871.0020.0008.0057][.0000.0035.0002.0300] # LATIN CAPITAL LETTER W WITH GRAVE 0175 ; [.1871.0020.0002.0077][.0000.003C.0002.0302] # LATIN SMALL LETTER W WITH CIRCUMFLEX 0174 ; [.1871.0020.0008.0057][.0000.003C.0002.0302] # LATIN CAPITAL LETTER W WITH CIRCUMFLEX 1E98 ; [.1871.0020.0002.0077][.0000.0043.0002.030A] # LATIN SMALL LETTER W WITH RING ABOVE 1E85 ; [.1871.0020.0002.0077][.0000.0047.0002.0308] # LATIN SMALL LETTER W WITH DIAERESIS 1E84 ; [.1871.0020.0008.0057][.0000.0047.0002.0308] # LATIN CAPITAL LETTER W WITH DIAERESIS 1E87 ; [.1871.0020.0002.0077][.0000.0052.0002.0307] # LATIN SMALL LETTER W WITH DOT ABOVE 1E86 ; [.1871.0020.0008.0057][.0000.0052.0002.0307] # LATIN CAPITAL LETTER W WITH DOT ABOVE 1E89 ; [.1871.0020.0002.0077][.0000.0070.0002.0323] # LATIN SMALL LETTER W WITH DOT BELOW 1E88 ; [.1871.0020.0008.0057][.0000.0070.0002.0323] # LATIN CAPITAL LETTER W WITH DOT BELOW 1F14F ; [.1871.0020.001D.1F14F][.161D.0020.001D.1F14F] # SQUARED WC 1F18F ; [.1871.0020.001D.1F18F][.161D.0020.001D.1F18F] # NEGATIVE SQUARED WC 1F12E ; [.1871.0020.000C.1F12E][.1895.0020.000C.1F12E] # CIRCLED WZ 1D21 ; [.1875.0020.0002.1D21] # LATIN LETTER SMALL CAPITAL W 2C73 ; [.1876.0020.0002.2C73] # LATIN SMALL LETTER W WITH HOOK 2C72 ; [.1876.0020.0008.2C72] # LATIN CAPITAL LETTER W WITH HOOK 028D ; [.1877.0020.0002.028D] # LATIN SMALL LETTER TURNED W 0078 ; [.187B.0020.0002.0078] # LATIN SMALL LETTER X 24B3 ; [*02FB.0020.0004.24B3][.187B.0020.0004.24B3][*02FC.0020.001F.24B3] # PARENTHESIZED LATIN SMALL LETTER X 1D431 ; [.187B.0020.0005.1D431] # MATHEMATICAL BOLD SMALL X 1D465 ; [.187B.0020.0005.1D465] # MATHEMATICAL ITALIC SMALL X 1D499 ; [.187B.0020.0005.1D499] # MATHEMATICAL BOLD ITALIC SMALL X 1D4CD ; [.187B.0020.0005.1D4CD] # MATHEMATICAL SCRIPT SMALL X 1D501 ; [.187B.0020.0005.1D501] # MATHEMATICAL BOLD SCRIPT SMALL X 1D535 ; [.187B.0020.0005.1D535] # MATHEMATICAL FRAKTUR SMALL X 1D569 ; [.187B.0020.0005.1D569] # MATHEMATICAL DOUBLE-STRUCK SMALL X 1D59D ; [.187B.0020.0005.1D59D] # MATHEMATICAL BOLD FRAKTUR SMALL X 1D5D1 ; [.187B.0020.0005.1D5D1] # MATHEMATICAL SANS-SERIF SMALL X 1D605 ; [.187B.0020.0005.1D605] # MATHEMATICAL SANS-SERIF BOLD SMALL X 1D639 ; [.187B.0020.0005.1D639] # MATHEMATICAL SANS-SERIF ITALIC SMALL X 1D66D ; [.187B.0020.0005.1D66D] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X 1D6A1 ; [.187B.0020.0005.1D6A1] # MATHEMATICAL MONOSPACE SMALL X 24E7 ; [.187B.0020.0006.24E7] # CIRCLED LATIN SMALL LETTER X 0058 ; [.187B.0020.0008.0058] # LATIN CAPITAL LETTER X 1F127 ; [*02FB.0020.0004.1F127][.187B.0020.000A.1F127][*02FC.0020.001F.1F127] # PARENTHESIZED LATIN CAPITAL LETTER X 1D417 ; [.187B.0020.000B.1D417] # MATHEMATICAL BOLD CAPITAL X 1D44B ; [.187B.0020.000B.1D44B] # MATHEMATICAL ITALIC CAPITAL X 1D47F ; [.187B.0020.000B.1D47F] # MATHEMATICAL BOLD ITALIC CAPITAL X 1D4B3 ; [.187B.0020.000B.1D4B3] # MATHEMATICAL SCRIPT CAPITAL X 1D4E7 ; [.187B.0020.000B.1D4E7] # MATHEMATICAL BOLD SCRIPT CAPITAL X 1D51B ; [.187B.0020.000B.1D51B] # MATHEMATICAL FRAKTUR CAPITAL X 1D54F ; [.187B.0020.000B.1D54F] # MATHEMATICAL DOUBLE-STRUCK CAPITAL X 1D583 ; [.187B.0020.000B.1D583] # MATHEMATICAL BOLD FRAKTUR CAPITAL X 1D5B7 ; [.187B.0020.000B.1D5B7] # MATHEMATICAL SANS-SERIF CAPITAL X 1D5EB ; [.187B.0020.000B.1D5EB] # MATHEMATICAL SANS-SERIF BOLD CAPITAL X 1D61F ; [.187B.0020.000B.1D61F] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL X 1D653 ; [.187B.0020.000B.1D653] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X 1D687 ; [.187B.0020.000B.1D687] # MATHEMATICAL MONOSPACE CAPITAL X 24CD ; [.187B.0020.000C.24CD] # CIRCLED LATIN CAPITAL LETTER X 1F167 ; [.187B.0020.000C.1F167] # NEGATIVE CIRCLED LATIN CAPITAL LETTER X 2093 ; [.187B.0020.0015.2093] # LATIN SUBSCRIPT SMALL LETTER X 1F147 ; [.187B.0020.001D.1F147] # SQUARED LATIN CAPITAL LETTER X 1F187 ; [.187B.0020.001D.1F187] # NEGATIVE SQUARED LATIN CAPITAL LETTER X 1E8D ; [.187B.0020.0002.0078][.0000.0047.0002.0308] # LATIN SMALL LETTER X WITH DIAERESIS 1E8C ; [.187B.0020.0008.0058][.0000.0047.0002.0308] # LATIN CAPITAL LETTER X WITH DIAERESIS 1E8B ; [.187B.0020.0002.0078][.0000.0052.0002.0307] # LATIN SMALL LETTER X WITH DOT ABOVE 1E8A ; [.187B.0020.0008.0058][.0000.0052.0002.0307] # LATIN CAPITAL LETTER X WITH DOT ABOVE 1D8D ; [.187F.0020.0002.1D8D] # LATIN SMALL LETTER X WITH PALATAL HOOK 0079 ; [.1880.0020.0002.0079] # LATIN SMALL LETTER Y 24B4 ; [*02FB.0020.0004.24B4][.1880.0020.0004.24B4][*02FC.0020.001F.24B4] # PARENTHESIZED LATIN SMALL LETTER Y 1D432 ; [.1880.0020.0005.1D432] # MATHEMATICAL BOLD SMALL Y 1D466 ; [.1880.0020.0005.1D466] # MATHEMATICAL ITALIC SMALL Y 1D49A ; [.1880.0020.0005.1D49A] # MATHEMATICAL BOLD ITALIC SMALL Y 1D4CE ; [.1880.0020.0005.1D4CE] # MATHEMATICAL SCRIPT SMALL Y 1D502 ; [.1880.0020.0005.1D502] # MATHEMATICAL BOLD SCRIPT SMALL Y 1D536 ; [.1880.0020.0005.1D536] # MATHEMATICAL FRAKTUR SMALL Y 1D56A ; [.1880.0020.0005.1D56A] # MATHEMATICAL DOUBLE-STRUCK SMALL Y 1D59E ; [.1880.0020.0005.1D59E] # MATHEMATICAL BOLD FRAKTUR SMALL Y 1D5D2 ; [.1880.0020.0005.1D5D2] # MATHEMATICAL SANS-SERIF SMALL Y 1D606 ; [.1880.0020.0005.1D606] # MATHEMATICAL SANS-SERIF BOLD SMALL Y 1D63A ; [.1880.0020.0005.1D63A] # MATHEMATICAL SANS-SERIF ITALIC SMALL Y 1D66E ; [.1880.0020.0005.1D66E] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y 1D6A2 ; [.1880.0020.0005.1D6A2] # MATHEMATICAL MONOSPACE SMALL Y 24E8 ; [.1880.0020.0006.24E8] # CIRCLED LATIN SMALL LETTER Y 0059 ; [.1880.0020.0008.0059] # LATIN CAPITAL LETTER Y 1F128 ; [*02FB.0020.0004.1F128][.1880.0020.000A.1F128][*02FC.0020.001F.1F128] # PARENTHESIZED LATIN CAPITAL LETTER Y 1D418 ; [.1880.0020.000B.1D418] # MATHEMATICAL BOLD CAPITAL Y 1D44C ; [.1880.0020.000B.1D44C] # MATHEMATICAL ITALIC CAPITAL Y 1D480 ; [.1880.0020.000B.1D480] # MATHEMATICAL BOLD ITALIC CAPITAL Y 1D4B4 ; [.1880.0020.000B.1D4B4] # MATHEMATICAL SCRIPT CAPITAL Y 1D4E8 ; [.1880.0020.000B.1D4E8] # MATHEMATICAL BOLD SCRIPT CAPITAL Y 1D51C ; [.1880.0020.000B.1D51C] # MATHEMATICAL FRAKTUR CAPITAL Y 1D550 ; [.1880.0020.000B.1D550] # MATHEMATICAL DOUBLE-STRUCK CAPITAL Y 1D584 ; [.1880.0020.000B.1D584] # MATHEMATICAL BOLD FRAKTUR CAPITAL Y 1D5B8 ; [.1880.0020.000B.1D5B8] # MATHEMATICAL SANS-SERIF CAPITAL Y 1D5EC ; [.1880.0020.000B.1D5EC] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Y 1D620 ; [.1880.0020.000B.1D620] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y 1D654 ; [.1880.0020.000B.1D654] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y 1D688 ; [.1880.0020.000B.1D688] # MATHEMATICAL MONOSPACE CAPITAL Y 24CE ; [.1880.0020.000C.24CE] # CIRCLED LATIN CAPITAL LETTER Y 1F168 ; [.1880.0020.000C.1F168] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Y 1F148 ; [.1880.0020.001D.1F148] # SQUARED LATIN CAPITAL LETTER Y 1F188 ; [.1880.0020.001D.1F188] # NEGATIVE SQUARED LATIN CAPITAL LETTER Y 00FD ; [.1880.0020.0002.0079][.0000.0032.0002.0301] # LATIN SMALL LETTER Y WITH ACUTE 00DD ; [.1880.0020.0008.0059][.0000.0032.0002.0301] # LATIN CAPITAL LETTER Y WITH ACUTE 1EF3 ; [.1880.0020.0002.0079][.0000.0035.0002.0300] # LATIN SMALL LETTER Y WITH GRAVE 1EF2 ; [.1880.0020.0008.0059][.0000.0035.0002.0300] # LATIN CAPITAL LETTER Y WITH GRAVE 0177 ; [.1880.0020.0002.0079][.0000.003C.0002.0302] # LATIN SMALL LETTER Y WITH CIRCUMFLEX 0176 ; [.1880.0020.0008.0059][.0000.003C.0002.0302] # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX 1E99 ; [.1880.0020.0002.0079][.0000.0043.0002.030A] # LATIN SMALL LETTER Y WITH RING ABOVE 00FF ; [.1880.0020.0002.0079][.0000.0047.0002.0308] # LATIN SMALL LETTER Y WITH DIAERESIS 0178 ; [.1880.0020.0008.0059][.0000.0047.0002.0308] # LATIN CAPITAL LETTER Y WITH DIAERESIS 1EF9 ; [.1880.0020.0002.0079][.0000.004E.0002.0303] # LATIN SMALL LETTER Y WITH TILDE 1EF8 ; [.1880.0020.0008.0059][.0000.004E.0002.0303] # LATIN CAPITAL LETTER Y WITH TILDE 1E8F ; [.1880.0020.0002.0079][.0000.0052.0002.0307] # LATIN SMALL LETTER Y WITH DOT ABOVE 1E8E ; [.1880.0020.0008.0059][.0000.0052.0002.0307] # LATIN CAPITAL LETTER Y WITH DOT ABOVE 0233 ; [.1880.0020.0002.0079][.0000.005B.0002.0304] # LATIN SMALL LETTER Y WITH MACRON 0232 ; [.1880.0020.0008.0059][.0000.005B.0002.0304] # LATIN CAPITAL LETTER Y WITH MACRON 1EF7 ; [.1880.0020.0002.0079][.0000.0064.0002.0309] # LATIN SMALL LETTER Y WITH HOOK ABOVE 1EF6 ; [.1880.0020.0008.0059][.0000.0064.0002.0309] # LATIN CAPITAL LETTER Y WITH HOOK ABOVE 1EF5 ; [.1880.0020.0002.0079][.0000.0070.0002.0323] # LATIN SMALL LETTER Y WITH DOT BELOW 1EF4 ; [.1880.0020.0008.0059][.0000.0070.0002.0323] # LATIN CAPITAL LETTER Y WITH DOT BELOW 028F ; [.1884.0020.0002.028F] # LATIN LETTER SMALL CAPITAL Y 024F ; [.1888.0020.0002.024F] # LATIN SMALL LETTER Y WITH STROKE 024E ; [.1888.0020.0008.024E] # LATIN CAPITAL LETTER Y WITH STROKE 01B4 ; [.188C.0020.0002.01B4] # LATIN SMALL LETTER Y WITH HOOK 01B3 ; [.188C.0020.0008.01B3] # LATIN CAPITAL LETTER Y WITH HOOK 1EFF ; [.1890.0020.0002.1EFF] # LATIN SMALL LETTER Y WITH LOOP 1EFE ; [.1890.0020.0008.1EFE] # LATIN CAPITAL LETTER Y WITH LOOP 021D ; [.1891.0020.0002.021D] # LATIN SMALL LETTER YOGH 021C ; [.1891.0020.0008.021C] # LATIN CAPITAL LETTER YOGH 007A ; [.1895.0020.0002.007A] # LATIN SMALL LETTER Z 24B5 ; [*02FB.0020.0004.24B5][.1895.0020.0004.24B5][*02FC.0020.001F.24B5] # PARENTHESIZED LATIN SMALL LETTER Z 1D433 ; [.1895.0020.0005.1D433] # MATHEMATICAL BOLD SMALL Z 1D467 ; [.1895.0020.0005.1D467] # MATHEMATICAL ITALIC SMALL Z 1D49B ; [.1895.0020.0005.1D49B] # MATHEMATICAL BOLD ITALIC SMALL Z 1D4CF ; [.1895.0020.0005.1D4CF] # MATHEMATICAL SCRIPT SMALL Z 1D503 ; [.1895.0020.0005.1D503] # MATHEMATICAL BOLD SCRIPT SMALL Z 1D537 ; [.1895.0020.0005.1D537] # MATHEMATICAL FRAKTUR SMALL Z 1D56B ; [.1895.0020.0005.1D56B] # MATHEMATICAL DOUBLE-STRUCK SMALL Z 1D59F ; [.1895.0020.0005.1D59F] # MATHEMATICAL BOLD FRAKTUR SMALL Z 1D5D3 ; [.1895.0020.0005.1D5D3] # MATHEMATICAL SANS-SERIF SMALL Z 1D607 ; [.1895.0020.0005.1D607] # MATHEMATICAL SANS-SERIF BOLD SMALL Z 1D63B ; [.1895.0020.0005.1D63B] # MATHEMATICAL SANS-SERIF ITALIC SMALL Z 1D66F ; [.1895.0020.0005.1D66F] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z 1D6A3 ; [.1895.0020.0005.1D6A3] # MATHEMATICAL MONOSPACE SMALL Z 24E9 ; [.1895.0020.0006.24E9] # CIRCLED LATIN SMALL LETTER Z 005A ; [.1895.0020.0008.005A] # LATIN CAPITAL LETTER Z 1F129 ; [*02FB.0020.0004.1F129][.1895.0020.000A.1F129][*02FC.0020.001F.1F129] # PARENTHESIZED LATIN CAPITAL LETTER Z 2124 ; [.1895.0020.000B.2124] # DOUBLE-STRUCK CAPITAL Z 2128 ; [.1895.0020.000B.2128] # BLACK-LETTER CAPITAL Z 1D419 ; [.1895.0020.000B.1D419] # MATHEMATICAL BOLD CAPITAL Z 1D44D ; [.1895.0020.000B.1D44D] # MATHEMATICAL ITALIC CAPITAL Z 1D481 ; [.1895.0020.000B.1D481] # MATHEMATICAL BOLD ITALIC CAPITAL Z 1D4B5 ; [.1895.0020.000B.1D4B5] # MATHEMATICAL SCRIPT CAPITAL Z 1D4E9 ; [.1895.0020.000B.1D4E9] # MATHEMATICAL BOLD SCRIPT CAPITAL Z 1D585 ; [.1895.0020.000B.1D585] # MATHEMATICAL BOLD FRAKTUR CAPITAL Z 1D5B9 ; [.1895.0020.000B.1D5B9] # MATHEMATICAL SANS-SERIF CAPITAL Z 1D5ED ; [.1895.0020.000B.1D5ED] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Z 1D621 ; [.1895.0020.000B.1D621] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z 1D655 ; [.1895.0020.000B.1D655] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z 1D689 ; [.1895.0020.000B.1D689] # MATHEMATICAL MONOSPACE CAPITAL Z 24CF ; [.1895.0020.000C.24CF] # CIRCLED LATIN CAPITAL LETTER Z 1F169 ; [.1895.0020.000C.1F169] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1DBB ; [.1895.0020.0014.1DBB] # MODIFIER LETTER SMALL Z 1F149 ; [.1895.0020.001D.1F149] # SQUARED LATIN CAPITAL LETTER Z 1F189 ; [.1895.0020.001D.1F189] # NEGATIVE SQUARED LATIN CAPITAL LETTER Z 017A ; [.1895.0020.0002.007A][.0000.0032.0002.0301] # LATIN SMALL LETTER Z WITH ACUTE 0179 ; [.1895.0020.0008.005A][.0000.0032.0002.0301] # LATIN CAPITAL LETTER Z WITH ACUTE 1E91 ; [.1895.0020.0002.007A][.0000.003C.0002.0302] # LATIN SMALL LETTER Z WITH CIRCUMFLEX 1E90 ; [.1895.0020.0008.005A][.0000.003C.0002.0302] # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX 017E ; [.1895.0020.0002.007A][.0000.0041.0002.030C] # LATIN SMALL LETTER Z WITH CARON 017D ; [.1895.0020.0008.005A][.0000.0041.0002.030C] # LATIN CAPITAL LETTER Z WITH CARON 017C ; [.1895.0020.0002.007A][.0000.0052.0002.0307] # LATIN SMALL LETTER Z WITH DOT ABOVE 017B ; [.1895.0020.0008.005A][.0000.0052.0002.0307] # LATIN CAPITAL LETTER Z WITH DOT ABOVE 1E93 ; [.1895.0020.0002.007A][.0000.0070.0002.0323] # LATIN SMALL LETTER Z WITH DOT BELOW 1E92 ; [.1895.0020.0008.005A][.0000.0070.0002.0323] # LATIN CAPITAL LETTER Z WITH DOT BELOW 1E95 ; [.1895.0020.0002.007A][.0000.007B.0002.0331] # LATIN SMALL LETTER Z WITH LINE BELOW 1E94 ; [.1895.0020.0008.005A][.0000.007B.0002.0331] # LATIN CAPITAL LETTER Z WITH LINE BELOW 018D ; [.1895.0020.0004.018D][.1871.0020.0004.018D] # LATIN SMALL LETTER TURNED DELTA 1D22 ; [.1899.0020.0002.1D22] # LATIN LETTER SMALL CAPITAL Z 01B6 ; [.189A.0020.0002.01B6] # LATIN SMALL LETTER Z WITH STROKE 01B5 ; [.189A.0020.0008.01B5] # LATIN CAPITAL LETTER Z WITH STROKE 1D76 ; [.189E.0020.0002.1D76] # LATIN SMALL LETTER Z WITH MIDDLE TILDE 1D8E ; [.189F.0020.0002.1D8E] # LATIN SMALL LETTER Z WITH PALATAL HOOK 0225 ; [.18A0.0020.0002.0225] # LATIN SMALL LETTER Z WITH HOOK 0224 ; [.18A0.0020.0008.0224] # LATIN CAPITAL LETTER Z WITH HOOK 0290 ; [.18A4.0020.0002.0290] # LATIN SMALL LETTER Z WITH RETROFLEX HOOK 1DBC ; [.18A4.0020.0014.1DBC] # MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK 0291 ; [.18A8.0020.0002.0291] # LATIN SMALL LETTER Z WITH CURL 1DBD ; [.18A8.0020.0014.1DBD] # MODIFIER LETTER SMALL Z WITH CURL 0240 ; [.18AC.0020.0002.0240] # LATIN SMALL LETTER Z WITH SWASH TAIL 2C7F ; [.18AC.0020.0008.2C7F] # LATIN CAPITAL LETTER Z WITH SWASH TAIL 2C6C ; [.18B0.0020.0002.2C6C] # LATIN SMALL LETTER Z WITH DESCENDER 2C6B ; [.18B0.0020.0008.2C6B] # LATIN CAPITAL LETTER Z WITH DESCENDER A763 ; [.18B1.0020.0002.A763] # LATIN SMALL LETTER VISIGOTHIC Z A762 ; [.18B1.0020.0008.A762] # LATIN CAPITAL LETTER VISIGOTHIC Z 0292 ; [.18B2.0020.0002.0292] # LATIN SMALL LETTER EZH 01B7 ; [.18B2.0020.0008.01B7] # LATIN CAPITAL LETTER EZH 1DBE ; [.18B2.0020.0014.1DBE] # MODIFIER LETTER SMALL EZH 01EF ; [.18B2.0020.0002.0292][.0000.0041.0002.030C] # LATIN SMALL LETTER EZH WITH CARON 01EE ; [.18B2.0020.0008.01B7][.0000.0041.0002.030C] # LATIN CAPITAL LETTER EZH WITH CARON 1D23 ; [.18B6.0020.0002.1D23] # LATIN LETTER SMALL CAPITAL EZH 01B9 ; [.18B7.0020.0002.01B9] # LATIN SMALL LETTER EZH REVERSED 01B8 ; [.18B7.0020.0008.01B8] # LATIN CAPITAL LETTER EZH REVERSED 1D9A ; [.18BB.0020.0002.1D9A] # LATIN SMALL LETTER EZH WITH RETROFLEX HOOK 01BA ; [.18BC.0020.0002.01BA] # LATIN SMALL LETTER EZH WITH TAIL 0293 ; [.18C0.0020.0002.0293] # LATIN SMALL LETTER EZH WITH CURL 00FE ; [.18C4.0020.0002.00FE] # LATIN SMALL LETTER THORN 00DE ; [.18C4.0020.0008.00DE] # LATIN CAPITAL LETTER THORN A765 ; [.18C8.0020.0002.A765] # LATIN SMALL LETTER THORN WITH STROKE A764 ; [.18C8.0020.0008.A764] # LATIN CAPITAL LETTER THORN WITH STROKE A767 ; [.18C9.0020.0002.A767] # LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER A766 ; [.18C9.0020.0008.A766] # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER 01BF ; [.18CA.0020.0002.01BF] # LATIN LETTER WYNN 01F7 ; [.18CA.0020.0008.01F7] # LATIN CAPITAL LETTER WYNN A769 ; [.18CE.0020.0002.A769] # LATIN SMALL LETTER VEND A768 ; [.18CE.0020.0008.A768] # LATIN CAPITAL LETTER VEND A76B ; [.18CF.0020.0002.A76B] # LATIN SMALL LETTER ET A76A ; [.18CF.0020.0008.A76A] # LATIN CAPITAL LETTER ET A76D ; [.18D0.0020.0002.A76D] # LATIN SMALL LETTER IS A76C ; [.18D0.0020.0008.A76C] # LATIN CAPITAL LETTER IS A76F ; [.18D1.0020.0002.A76F] # LATIN SMALL LETTER CON A76E ; [.18D1.0020.0008.A76E] # LATIN CAPITAL LETTER CON A770 ; [.18D1.0020.0014.A770] # MODIFIER LETTER US A778 ; [.18D2.0020.0002.A778] # LATIN SMALL LETTER UM 01BB ; [.18D3.0020.0002.01BB] # LATIN LETTER TWO WITH STROKE A72B ; [.18D7.0020.0002.A72B] # LATIN SMALL LETTER TRESILLO A72A ; [.18D7.0020.0008.A72A] # LATIN CAPITAL LETTER TRESILLO A72D ; [.18D8.0020.0002.A72D] # LATIN SMALL LETTER CUATRILLO A72C ; [.18D8.0020.0008.A72C] # LATIN CAPITAL LETTER CUATRILLO A72F ; [.18D9.0020.0002.A72F] # LATIN SMALL LETTER CUATRILLO WITH COMMA A72E ; [.18D9.0020.0008.A72E] # LATIN CAPITAL LETTER CUATRILLO WITH COMMA 01A8 ; [.18DA.0020.0002.01A8] # LATIN SMALL LETTER TONE TWO 01A7 ; [.18DA.0020.0008.01A7] # LATIN CAPITAL LETTER TONE TWO 01BD ; [.18DE.0020.0002.01BD] # LATIN SMALL LETTER TONE FIVE 01BC ; [.18DE.0020.0008.01BC] # LATIN CAPITAL LETTER TONE FIVE 0185 ; [.18E2.0020.0002.0185] # LATIN SMALL LETTER TONE SIX 0184 ; [.18E2.0020.0008.0184] # LATIN CAPITAL LETTER TONE SIX 0294 ; [.18E6.0020.0002.0294] # LATIN LETTER GLOTTAL STOP 0242 ; [.18EA.0020.0002.0242] # LATIN SMALL LETTER GLOTTAL STOP 0241 ; [.18EA.0020.0008.0241] # LATIN CAPITAL LETTER GLOTTAL STOP 0149 ; [.18EF.0020.0004.0149][.174F.0020.0004.0149] # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE A723 ; [.18F2.0020.0002.A723] # LATIN SMALL LETTER EGYPTOLOGICAL ALEF A722 ; [.18F2.0020.0008.A722] # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF A78C ; [.18F3.0020.0002.A78C] # LATIN SMALL LETTER SALTILLO A78B ; [.18F3.0020.0008.A78B] # LATIN CAPITAL LETTER SALTILLO 0295 ; [.18F4.0020.0002.0295] # LATIN LETTER PHARYNGEAL VOICED FRICATIVE 1D24 ; [.18FA.0020.0002.1D24] # LATIN LETTER VOICED LARYNGEAL SPIRANT 1D25 ; [.18FB.0020.0002.1D25] # LATIN LETTER AIN 1D5C ; [.18FB.0020.0014.1D5C] # MODIFIER LETTER SMALL AIN A725 ; [.18FC.0020.0002.A725] # LATIN SMALL LETTER EGYPTOLOGICAL AIN A724 ; [.18FC.0020.0008.A724] # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN 02A1 ; [.18FD.0020.0002.02A1] # LATIN LETTER GLOTTAL STOP WITH STROKE 02A2 ; [.1901.0020.0002.02A2] # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE 0296 ; [.1905.0020.0002.0296] # LATIN LETTER INVERTED GLOTTAL STOP 01C0 ; [.1909.0020.0002.01C0] # LATIN LETTER DENTAL CLICK 01C1 ; [.190D.0020.0002.01C1] # LATIN LETTER LATERAL CLICK 01C2 ; [.1911.0020.0002.01C2] # LATIN LETTER ALVEOLAR CLICK 01C3 ; [.1915.0020.0002.01C3] # LATIN LETTER RETROFLEX CLICK 0297 ; [.1919.0020.0002.0297] # LATIN LETTER STRETCHED C 0298 ; [.191D.0020.0002.0298] # LATIN LETTER BILABIAL CLICK 02AC ; [.1921.0020.0002.02AC] # LATIN LETTER BILABIAL PERCUSSIVE 02AD ; [.1925.0020.0002.02AD] # LATIN LETTER BIDENTAL PERCUSSIVE 1D6C2 ; [.1929.0020.0005.1D6C2] # MATHEMATICAL BOLD SMALL ALPHA 1D6FC ; [.1929.0020.0005.1D6FC] # MATHEMATICAL ITALIC SMALL ALPHA 1D736 ; [.1929.0020.0005.1D736] # MATHEMATICAL BOLD ITALIC SMALL ALPHA 1D770 ; [.1929.0020.0005.1D770] # MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA 1D7AA ; [.1929.0020.0005.1D7AA] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA 1D6A8 ; [.1929.0020.000B.1D6A8] # MATHEMATICAL BOLD CAPITAL ALPHA 1D6E2 ; [.1929.0020.000B.1D6E2] # MATHEMATICAL ITALIC CAPITAL ALPHA 1D71C ; [.1929.0020.000B.1D71C] # MATHEMATICAL BOLD ITALIC CAPITAL ALPHA 1D756 ; [.1929.0020.000B.1D756] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA 1D790 ; [.1929.0020.000B.1D790] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA 1D6C3 ; [.192A.0020.0005.1D6C3] # MATHEMATICAL BOLD SMALL BETA 1D6FD ; [.192A.0020.0005.1D6FD] # MATHEMATICAL ITALIC SMALL BETA 1D737 ; [.192A.0020.0005.1D737] # MATHEMATICAL BOLD ITALIC SMALL BETA 1D771 ; [.192A.0020.0005.1D771] # MATHEMATICAL SANS-SERIF BOLD SMALL BETA 1D7AB ; [.192A.0020.0005.1D7AB] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA 1D6A9 ; [.192A.0020.000B.1D6A9] # MATHEMATICAL BOLD CAPITAL BETA 1D6E3 ; [.192A.0020.000B.1D6E3] # MATHEMATICAL ITALIC CAPITAL BETA 1D71D ; [.192A.0020.000B.1D71D] # MATHEMATICAL BOLD ITALIC CAPITAL BETA 1D757 ; [.192A.0020.000B.1D757] # MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA 1D791 ; [.192A.0020.000B.1D791] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA 1D5D ; [.192A.0020.0014.1D5D] # MODIFIER LETTER SMALL BETA 1D66 ; [.192A.0020.0015.1D66] # GREEK SUBSCRIPT SMALL LETTER BETA 213D ; [.192B.0020.0005.213D] # DOUBLE-STRUCK SMALL GAMMA 1D6C4 ; [.192B.0020.0005.1D6C4] # MATHEMATICAL BOLD SMALL GAMMA 1D6FE ; [.192B.0020.0005.1D6FE] # MATHEMATICAL ITALIC SMALL GAMMA 1D738 ; [.192B.0020.0005.1D738] # MATHEMATICAL BOLD ITALIC SMALL GAMMA 1D772 ; [.192B.0020.0005.1D772] # MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA 1D7AC ; [.192B.0020.0005.1D7AC] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA 213E ; [.192B.0020.000B.213E] # DOUBLE-STRUCK CAPITAL GAMMA 1D6AA ; [.192B.0020.000B.1D6AA] # MATHEMATICAL BOLD CAPITAL GAMMA 1D6E4 ; [.192B.0020.000B.1D6E4] # MATHEMATICAL ITALIC CAPITAL GAMMA 1D71E ; [.192B.0020.000B.1D71E] # MATHEMATICAL BOLD ITALIC CAPITAL GAMMA 1D758 ; [.192B.0020.000B.1D758] # MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA 1D792 ; [.192B.0020.000B.1D792] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA 1D5E ; [.192B.0020.0014.1D5E] # MODIFIER LETTER SMALL GREEK GAMMA 1D67 ; [.192B.0020.0015.1D67] # GREEK SUBSCRIPT SMALL LETTER GAMMA 1D26 ; [.192C.0020.0002.1D26] # GREEK LETTER SMALL CAPITAL GAMMA 1D6C5 ; [.192D.0020.0005.1D6C5] # MATHEMATICAL BOLD SMALL DELTA 1D6FF ; [.192D.0020.0005.1D6FF] # MATHEMATICAL ITALIC SMALL DELTA 1D739 ; [.192D.0020.0005.1D739] # MATHEMATICAL BOLD ITALIC SMALL DELTA 1D773 ; [.192D.0020.0005.1D773] # MATHEMATICAL SANS-SERIF BOLD SMALL DELTA 1D7AD ; [.192D.0020.0005.1D7AD] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA 1D6AB ; [.192D.0020.000B.1D6AB] # MATHEMATICAL BOLD CAPITAL DELTA 1D6E5 ; [.192D.0020.000B.1D6E5] # MATHEMATICAL ITALIC CAPITAL DELTA 1D71F ; [.192D.0020.000B.1D71F] # MATHEMATICAL BOLD ITALIC CAPITAL DELTA 1D759 ; [.192D.0020.000B.1D759] # MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA 1D793 ; [.192D.0020.000B.1D793] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA 1D5F ; [.192D.0020.0014.1D5F] # MODIFIER LETTER SMALL DELTA 1D6C6 ; [.192E.0020.0005.1D6C6] # MATHEMATICAL BOLD SMALL EPSILON 1D6DC ; [.192E.0020.0005.1D6DC] # MATHEMATICAL BOLD EPSILON SYMBOL 1D700 ; [.192E.0020.0005.1D700] # MATHEMATICAL ITALIC SMALL EPSILON 1D716 ; [.192E.0020.0005.1D716] # MATHEMATICAL ITALIC EPSILON SYMBOL 1D73A ; [.192E.0020.0005.1D73A] # MATHEMATICAL BOLD ITALIC SMALL EPSILON 1D750 ; [.192E.0020.0005.1D750] # MATHEMATICAL BOLD ITALIC EPSILON SYMBOL 1D774 ; [.192E.0020.0005.1D774] # MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON 1D78A ; [.192E.0020.0005.1D78A] # MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL 1D7AE ; [.192E.0020.0005.1D7AE] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON 1D7C4 ; [.192E.0020.0005.1D7C4] # MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL 1D6AC ; [.192E.0020.000B.1D6AC] # MATHEMATICAL BOLD CAPITAL EPSILON 1D6E6 ; [.192E.0020.000B.1D6E6] # MATHEMATICAL ITALIC CAPITAL EPSILON 1D720 ; [.192E.0020.000B.1D720] # MATHEMATICAL BOLD ITALIC CAPITAL EPSILON 1D75A ; [.192E.0020.000B.1D75A] # MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON 1D794 ; [.192E.0020.000B.1D794] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON 1D7CB ; [.192F.0020.0005.1D7CB] # MATHEMATICAL BOLD SMALL DIGAMMA 1D7CA ; [.192F.0020.000B.1D7CA] # MATHEMATICAL BOLD CAPITAL DIGAMMA 1D6C7 ; [.1932.0020.0005.1D6C7] # MATHEMATICAL BOLD SMALL ZETA 1D701 ; [.1932.0020.0005.1D701] # MATHEMATICAL ITALIC SMALL ZETA 1D73B ; [.1932.0020.0005.1D73B] # MATHEMATICAL BOLD ITALIC SMALL ZETA 1D775 ; [.1932.0020.0005.1D775] # MATHEMATICAL SANS-SERIF BOLD SMALL ZETA 1D7AF ; [.1932.0020.0005.1D7AF] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA 1D6AD ; [.1932.0020.000B.1D6AD] # MATHEMATICAL BOLD CAPITAL ZETA 1D6E7 ; [.1932.0020.000B.1D6E7] # MATHEMATICAL ITALIC CAPITAL ZETA 1D721 ; [.1932.0020.000B.1D721] # MATHEMATICAL BOLD ITALIC CAPITAL ZETA 1D75B ; [.1932.0020.000B.1D75B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA 1D795 ; [.1932.0020.000B.1D795] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA 1D6C8 ; [.1934.0020.0005.1D6C8] # MATHEMATICAL BOLD SMALL ETA 1D702 ; [.1934.0020.0005.1D702] # MATHEMATICAL ITALIC SMALL ETA 1D73C ; [.1934.0020.0005.1D73C] # MATHEMATICAL BOLD ITALIC SMALL ETA 1D776 ; [.1934.0020.0005.1D776] # MATHEMATICAL SANS-SERIF BOLD SMALL ETA 1D7B0 ; [.1934.0020.0005.1D7B0] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA 1D6AE ; [.1934.0020.000B.1D6AE] # MATHEMATICAL BOLD CAPITAL ETA 1D6E8 ; [.1934.0020.000B.1D6E8] # MATHEMATICAL ITALIC CAPITAL ETA 1D722 ; [.1934.0020.000B.1D722] # MATHEMATICAL BOLD ITALIC CAPITAL ETA 1D75C ; [.1934.0020.000B.1D75C] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA 1D796 ; [.1934.0020.000B.1D796] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA 1D6C9 ; [.1935.0020.0005.1D6C9] # MATHEMATICAL BOLD SMALL THETA 1D6DD ; [.1935.0020.0005.1D6DD] # MATHEMATICAL BOLD THETA SYMBOL 1D703 ; [.1935.0020.0005.1D703] # MATHEMATICAL ITALIC SMALL THETA 1D717 ; [.1935.0020.0005.1D717] # MATHEMATICAL ITALIC THETA SYMBOL 1D73D ; [.1935.0020.0005.1D73D] # MATHEMATICAL BOLD ITALIC SMALL THETA 1D751 ; [.1935.0020.0005.1D751] # MATHEMATICAL BOLD ITALIC THETA SYMBOL 1D777 ; [.1935.0020.0005.1D777] # MATHEMATICAL SANS-SERIF BOLD SMALL THETA 1D78B ; [.1935.0020.0005.1D78B] # MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL 1D7B1 ; [.1935.0020.0005.1D7B1] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA 1D7C5 ; [.1935.0020.0005.1D7C5] # MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL 1D6AF ; [.1935.0020.000B.1D6AF] # MATHEMATICAL BOLD CAPITAL THETA 1D6B9 ; [.1935.0020.000B.1D6B9] # MATHEMATICAL BOLD CAPITAL THETA SYMBOL 1D6E9 ; [.1935.0020.000B.1D6E9] # MATHEMATICAL ITALIC CAPITAL THETA 1D6F3 ; [.1935.0020.000B.1D6F3] # MATHEMATICAL ITALIC CAPITAL THETA SYMBOL 1D723 ; [.1935.0020.000B.1D723] # MATHEMATICAL BOLD ITALIC CAPITAL THETA 1D72D ; [.1935.0020.000B.1D72D] # MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL 1D75D ; [.1935.0020.000B.1D75D] # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA 1D767 ; [.1935.0020.000B.1D767] # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL 1D797 ; [.1935.0020.000B.1D797] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA 1D7A1 ; [.1935.0020.000B.1D7A1] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL 1DBF ; [.1935.0020.0014.1DBF] # MODIFIER LETTER SMALL THETA 1D6CA ; [.1936.0020.0005.1D6CA] # MATHEMATICAL BOLD SMALL IOTA 1D704 ; [.1936.0020.0005.1D704] # MATHEMATICAL ITALIC SMALL IOTA 1D73E ; [.1936.0020.0005.1D73E] # MATHEMATICAL BOLD ITALIC SMALL IOTA 1D778 ; [.1936.0020.0005.1D778] # MATHEMATICAL SANS-SERIF BOLD SMALL IOTA 1D7B2 ; [.1936.0020.0005.1D7B2] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA 1D6B0 ; [.1936.0020.000B.1D6B0] # MATHEMATICAL BOLD CAPITAL IOTA 1D6EA ; [.1936.0020.000B.1D6EA] # MATHEMATICAL ITALIC CAPITAL IOTA 1D724 ; [.1936.0020.000B.1D724] # MATHEMATICAL BOLD ITALIC CAPITAL IOTA 1D75E ; [.1936.0020.000B.1D75E] # MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA 1D798 ; [.1936.0020.000B.1D798] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA 1D6CB ; [.1938.0020.0005.1D6CB] # MATHEMATICAL BOLD SMALL KAPPA 1D6DE ; [.1938.0020.0005.1D6DE] # MATHEMATICAL BOLD KAPPA SYMBOL 1D705 ; [.1938.0020.0005.1D705] # MATHEMATICAL ITALIC SMALL KAPPA 1D718 ; [.1938.0020.0005.1D718] # MATHEMATICAL ITALIC KAPPA SYMBOL 1D73F ; [.1938.0020.0005.1D73F] # MATHEMATICAL BOLD ITALIC SMALL KAPPA 1D752 ; [.1938.0020.0005.1D752] # MATHEMATICAL BOLD ITALIC KAPPA SYMBOL 1D779 ; [.1938.0020.0005.1D779] # MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA 1D78C ; [.1938.0020.0005.1D78C] # MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL 1D7B3 ; [.1938.0020.0005.1D7B3] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA 1D7C6 ; [.1938.0020.0005.1D7C6] # MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL 1D6B1 ; [.1938.0020.000B.1D6B1] # MATHEMATICAL BOLD CAPITAL KAPPA 1D6EB ; [.1938.0020.000B.1D6EB] # MATHEMATICAL ITALIC CAPITAL KAPPA 1D725 ; [.1938.0020.000B.1D725] # MATHEMATICAL BOLD ITALIC CAPITAL KAPPA 1D75F ; [.1938.0020.000B.1D75F] # MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA 1D799 ; [.1938.0020.000B.1D799] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA 1D6CC ; [.1939.0020.0005.1D6CC] # MATHEMATICAL BOLD SMALL LAMDA 1D706 ; [.1939.0020.0005.1D706] # MATHEMATICAL ITALIC SMALL LAMDA 1D740 ; [.1939.0020.0005.1D740] # MATHEMATICAL BOLD ITALIC SMALL LAMDA 1D77A ; [.1939.0020.0005.1D77A] # MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA 1D7B4 ; [.1939.0020.0005.1D7B4] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA 1D6B2 ; [.1939.0020.000B.1D6B2] # MATHEMATICAL BOLD CAPITAL LAMDA 1D6EC ; [.1939.0020.000B.1D6EC] # MATHEMATICAL ITALIC CAPITAL LAMDA 1D726 ; [.1939.0020.000B.1D726] # MATHEMATICAL BOLD ITALIC CAPITAL LAMDA 1D760 ; [.1939.0020.000B.1D760] # MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA 1D79A ; [.1939.0020.000B.1D79A] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA 1D27 ; [.193A.0020.0002.1D27] # GREEK LETTER SMALL CAPITAL LAMDA 00B5 ; [.193B.0020.0004.00B5] # MICRO SIGN 1D6CD ; [.193B.0020.0005.1D6CD] # MATHEMATICAL BOLD SMALL MU 1D707 ; [.193B.0020.0005.1D707] # MATHEMATICAL ITALIC SMALL MU 1D741 ; [.193B.0020.0005.1D741] # MATHEMATICAL BOLD ITALIC SMALL MU 1D77B ; [.193B.0020.0005.1D77B] # MATHEMATICAL SANS-SERIF BOLD SMALL MU 1D7B5 ; [.193B.0020.0005.1D7B5] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU 1D6B3 ; [.193B.0020.000B.1D6B3] # MATHEMATICAL BOLD CAPITAL MU 1D6ED ; [.193B.0020.000B.1D6ED] # MATHEMATICAL ITALIC CAPITAL MU 1D727 ; [.193B.0020.000B.1D727] # MATHEMATICAL BOLD ITALIC CAPITAL MU 1D761 ; [.193B.0020.000B.1D761] # MATHEMATICAL SANS-SERIF BOLD CAPITAL MU 1D79B ; [.193B.0020.000B.1D79B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU 1D6CE ; [.193C.0020.0005.1D6CE] # MATHEMATICAL BOLD SMALL NU 1D708 ; [.193C.0020.0005.1D708] # MATHEMATICAL ITALIC SMALL NU 1D742 ; [.193C.0020.0005.1D742] # MATHEMATICAL BOLD ITALIC SMALL NU 1D77C ; [.193C.0020.0005.1D77C] # MATHEMATICAL SANS-SERIF BOLD SMALL NU 1D7B6 ; [.193C.0020.0005.1D7B6] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU 1D6B4 ; [.193C.0020.000B.1D6B4] # MATHEMATICAL BOLD CAPITAL NU 1D6EE ; [.193C.0020.000B.1D6EE] # MATHEMATICAL ITALIC CAPITAL NU 1D728 ; [.193C.0020.000B.1D728] # MATHEMATICAL BOLD ITALIC CAPITAL NU 1D762 ; [.193C.0020.000B.1D762] # MATHEMATICAL SANS-SERIF BOLD CAPITAL NU 1D79C ; [.193C.0020.000B.1D79C] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU 1D6CF ; [.193D.0020.0005.1D6CF] # MATHEMATICAL BOLD SMALL XI 1D709 ; [.193D.0020.0005.1D709] # MATHEMATICAL ITALIC SMALL XI 1D743 ; [.193D.0020.0005.1D743] # MATHEMATICAL BOLD ITALIC SMALL XI 1D77D ; [.193D.0020.0005.1D77D] # MATHEMATICAL SANS-SERIF BOLD SMALL XI 1D7B7 ; [.193D.0020.0005.1D7B7] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI 1D6B5 ; [.193D.0020.000B.1D6B5] # MATHEMATICAL BOLD CAPITAL XI 1D6EF ; [.193D.0020.000B.1D6EF] # MATHEMATICAL ITALIC CAPITAL XI 1D729 ; [.193D.0020.000B.1D729] # MATHEMATICAL BOLD ITALIC CAPITAL XI 1D763 ; [.193D.0020.000B.1D763] # MATHEMATICAL SANS-SERIF BOLD CAPITAL XI 1D79D ; [.193D.0020.000B.1D79D] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI 1D6D0 ; [.193E.0020.0005.1D6D0] # MATHEMATICAL BOLD SMALL OMICRON 1D70A ; [.193E.0020.0005.1D70A] # MATHEMATICAL ITALIC SMALL OMICRON 1D744 ; [.193E.0020.0005.1D744] # MATHEMATICAL BOLD ITALIC SMALL OMICRON 1D77E ; [.193E.0020.0005.1D77E] # MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON 1D7B8 ; [.193E.0020.0005.1D7B8] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON 1D6B6 ; [.193E.0020.000B.1D6B6] # MATHEMATICAL BOLD CAPITAL OMICRON 1D6F0 ; [.193E.0020.000B.1D6F0] # MATHEMATICAL ITALIC CAPITAL OMICRON 1D72A ; [.193E.0020.000B.1D72A] # MATHEMATICAL BOLD ITALIC CAPITAL OMICRON 1D764 ; [.193E.0020.000B.1D764] # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON 1D79E ; [.193E.0020.000B.1D79E] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON 213C ; [.193F.0020.0005.213C] # DOUBLE-STRUCK SMALL PI 1D6D1 ; [.193F.0020.0005.1D6D1] # MATHEMATICAL BOLD SMALL PI 1D6E1 ; [.193F.0020.0005.1D6E1] # MATHEMATICAL BOLD PI SYMBOL 1D70B ; [.193F.0020.0005.1D70B] # MATHEMATICAL ITALIC SMALL PI 1D71B ; [.193F.0020.0005.1D71B] # MATHEMATICAL ITALIC PI SYMBOL 1D745 ; [.193F.0020.0005.1D745] # MATHEMATICAL BOLD ITALIC SMALL PI 1D755 ; [.193F.0020.0005.1D755] # MATHEMATICAL BOLD ITALIC PI SYMBOL 1D77F ; [.193F.0020.0005.1D77F] # MATHEMATICAL SANS-SERIF BOLD SMALL PI 1D78F ; [.193F.0020.0005.1D78F] # MATHEMATICAL SANS-SERIF BOLD PI SYMBOL 1D7B9 ; [.193F.0020.0005.1D7B9] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI 1D7C9 ; [.193F.0020.0005.1D7C9] # MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL 213F ; [.193F.0020.000B.213F] # DOUBLE-STRUCK CAPITAL PI 1D6B7 ; [.193F.0020.000B.1D6B7] # MATHEMATICAL BOLD CAPITAL PI 1D6F1 ; [.193F.0020.000B.1D6F1] # MATHEMATICAL ITALIC CAPITAL PI 1D72B ; [.193F.0020.000B.1D72B] # MATHEMATICAL BOLD ITALIC CAPITAL PI 1D765 ; [.193F.0020.000B.1D765] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PI 1D79F ; [.193F.0020.000B.1D79F] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI 1D28 ; [.1940.0020.0002.1D28] # GREEK LETTER SMALL CAPITAL PI 1D6D2 ; [.1944.0020.0005.1D6D2] # MATHEMATICAL BOLD SMALL RHO 1D6E0 ; [.1944.0020.0005.1D6E0] # MATHEMATICAL BOLD RHO SYMBOL 1D70C ; [.1944.0020.0005.1D70C] # MATHEMATICAL ITALIC SMALL RHO 1D71A ; [.1944.0020.0005.1D71A] # MATHEMATICAL ITALIC RHO SYMBOL 1D746 ; [.1944.0020.0005.1D746] # MATHEMATICAL BOLD ITALIC SMALL RHO 1D754 ; [.1944.0020.0005.1D754] # MATHEMATICAL BOLD ITALIC RHO SYMBOL 1D780 ; [.1944.0020.0005.1D780] # MATHEMATICAL SANS-SERIF BOLD SMALL RHO 1D78E ; [.1944.0020.0005.1D78E] # MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL 1D7BA ; [.1944.0020.0005.1D7BA] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO 1D7C8 ; [.1944.0020.0005.1D7C8] # MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL 1D6B8 ; [.1944.0020.000B.1D6B8] # MATHEMATICAL BOLD CAPITAL RHO 1D6F2 ; [.1944.0020.000B.1D6F2] # MATHEMATICAL ITALIC CAPITAL RHO 1D72C ; [.1944.0020.000B.1D72C] # MATHEMATICAL BOLD ITALIC CAPITAL RHO 1D766 ; [.1944.0020.000B.1D766] # MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO 1D7A0 ; [.1944.0020.000B.1D7A0] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO 1D68 ; [.1944.0020.0015.1D68] # GREEK SUBSCRIPT SMALL LETTER RHO 1D29 ; [.1945.0020.0002.1D29] # GREEK LETTER SMALL CAPITAL RHO 1D6D3 ; [.1947.0020.0005.1D6D3] # MATHEMATICAL BOLD SMALL FINAL SIGMA 1D6D4 ; [.1947.0020.0005.1D6D4] # MATHEMATICAL BOLD SMALL SIGMA 1D70D ; [.1947.0020.0005.1D70D] # MATHEMATICAL ITALIC SMALL FINAL SIGMA 1D70E ; [.1947.0020.0005.1D70E] # MATHEMATICAL ITALIC SMALL SIGMA 1D747 ; [.1947.0020.0005.1D747] # MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA 1D748 ; [.1947.0020.0005.1D748] # MATHEMATICAL BOLD ITALIC SMALL SIGMA 1D781 ; [.1947.0020.0005.1D781] # MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA 1D782 ; [.1947.0020.0005.1D782] # MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA 1D7BB ; [.1947.0020.0005.1D7BB] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA 1D7BC ; [.1947.0020.0005.1D7BC] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA 1D6BA ; [.1947.0020.000B.1D6BA] # MATHEMATICAL BOLD CAPITAL SIGMA 1D6F4 ; [.1947.0020.000B.1D6F4] # MATHEMATICAL ITALIC CAPITAL SIGMA 1D72E ; [.1947.0020.000B.1D72E] # MATHEMATICAL BOLD ITALIC CAPITAL SIGMA 1D768 ; [.1947.0020.000B.1D768] # MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA 1D7A2 ; [.1947.0020.000B.1D7A2] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA 1D6D5 ; [.194B.0020.0005.1D6D5] # MATHEMATICAL BOLD SMALL TAU 1D70F ; [.194B.0020.0005.1D70F] # MATHEMATICAL ITALIC SMALL TAU 1D749 ; [.194B.0020.0005.1D749] # MATHEMATICAL BOLD ITALIC SMALL TAU 1D783 ; [.194B.0020.0005.1D783] # MATHEMATICAL SANS-SERIF BOLD SMALL TAU 1D7BD ; [.194B.0020.0005.1D7BD] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU 1D6BB ; [.194B.0020.000B.1D6BB] # MATHEMATICAL BOLD CAPITAL TAU 1D6F5 ; [.194B.0020.000B.1D6F5] # MATHEMATICAL ITALIC CAPITAL TAU 1D72F ; [.194B.0020.000B.1D72F] # MATHEMATICAL BOLD ITALIC CAPITAL TAU 1D769 ; [.194B.0020.000B.1D769] # MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU 1D7A3 ; [.194B.0020.000B.1D7A3] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU 1D6D6 ; [.194C.0020.0005.1D6D6] # MATHEMATICAL BOLD SMALL UPSILON 1D710 ; [.194C.0020.0005.1D710] # MATHEMATICAL ITALIC SMALL UPSILON 1D74A ; [.194C.0020.0005.1D74A] # MATHEMATICAL BOLD ITALIC SMALL UPSILON 1D784 ; [.194C.0020.0005.1D784] # MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON 1D7BE ; [.194C.0020.0005.1D7BE] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON 1D6BC ; [.194C.0020.000B.1D6BC] # MATHEMATICAL BOLD CAPITAL UPSILON 1D6F6 ; [.194C.0020.000B.1D6F6] # MATHEMATICAL ITALIC CAPITAL UPSILON 1D730 ; [.194C.0020.000B.1D730] # MATHEMATICAL BOLD ITALIC CAPITAL UPSILON 1D76A ; [.194C.0020.000B.1D76A] # MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON 1D7A4 ; [.194C.0020.000B.1D7A4] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON 1D6D7 ; [.194D.0020.0005.1D6D7] # MATHEMATICAL BOLD SMALL PHI 1D6DF ; [.194D.0020.0005.1D6DF] # MATHEMATICAL BOLD PHI SYMBOL 1D711 ; [.194D.0020.0005.1D711] # MATHEMATICAL ITALIC SMALL PHI 1D719 ; [.194D.0020.0005.1D719] # MATHEMATICAL ITALIC PHI SYMBOL 1D74B ; [.194D.0020.0005.1D74B] # MATHEMATICAL BOLD ITALIC SMALL PHI 1D753 ; [.194D.0020.0005.1D753] # MATHEMATICAL BOLD ITALIC PHI SYMBOL 1D785 ; [.194D.0020.0005.1D785] # MATHEMATICAL SANS-SERIF BOLD SMALL PHI 1D78D ; [.194D.0020.0005.1D78D] # MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL 1D7BF ; [.194D.0020.0005.1D7BF] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI 1D7C7 ; [.194D.0020.0005.1D7C7] # MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL 1D6BD ; [.194D.0020.000B.1D6BD] # MATHEMATICAL BOLD CAPITAL PHI 1D6F7 ; [.194D.0020.000B.1D6F7] # MATHEMATICAL ITALIC CAPITAL PHI 1D731 ; [.194D.0020.000B.1D731] # MATHEMATICAL BOLD ITALIC CAPITAL PHI 1D76B ; [.194D.0020.000B.1D76B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI 1D7A5 ; [.194D.0020.000B.1D7A5] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI 1D60 ; [.194D.0020.0014.1D60] # MODIFIER LETTER SMALL GREEK PHI 1D69 ; [.194D.0020.0015.1D69] # GREEK SUBSCRIPT SMALL LETTER PHI 1D6D8 ; [.194E.0020.0005.1D6D8] # MATHEMATICAL BOLD SMALL CHI 1D712 ; [.194E.0020.0005.1D712] # MATHEMATICAL ITALIC SMALL CHI 1D74C ; [.194E.0020.0005.1D74C] # MATHEMATICAL BOLD ITALIC SMALL CHI 1D786 ; [.194E.0020.0005.1D786] # MATHEMATICAL SANS-SERIF BOLD SMALL CHI 1D7C0 ; [.194E.0020.0005.1D7C0] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI 1D6BE ; [.194E.0020.000B.1D6BE] # MATHEMATICAL BOLD CAPITAL CHI 1D6F8 ; [.194E.0020.000B.1D6F8] # MATHEMATICAL ITALIC CAPITAL CHI 1D732 ; [.194E.0020.000B.1D732] # MATHEMATICAL BOLD ITALIC CAPITAL CHI 1D76C ; [.194E.0020.000B.1D76C] # MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI 1D7A6 ; [.194E.0020.000B.1D7A6] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI 1D61 ; [.194E.0020.0014.1D61] # MODIFIER LETTER SMALL CHI 1D6A ; [.194E.0020.0015.1D6A] # GREEK SUBSCRIPT SMALL LETTER CHI 1D6D9 ; [.194F.0020.0005.1D6D9] # MATHEMATICAL BOLD SMALL PSI 1D713 ; [.194F.0020.0005.1D713] # MATHEMATICAL ITALIC SMALL PSI 1D74D ; [.194F.0020.0005.1D74D] # MATHEMATICAL BOLD ITALIC SMALL PSI 1D787 ; [.194F.0020.0005.1D787] # MATHEMATICAL SANS-SERIF BOLD SMALL PSI 1D7C1 ; [.194F.0020.0005.1D7C1] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI 1D6BF ; [.194F.0020.000B.1D6BF] # MATHEMATICAL BOLD CAPITAL PSI 1D6F9 ; [.194F.0020.000B.1D6F9] # MATHEMATICAL ITALIC CAPITAL PSI 1D733 ; [.194F.0020.000B.1D733] # MATHEMATICAL BOLD ITALIC CAPITAL PSI 1D76D ; [.194F.0020.000B.1D76D] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI 1D7A7 ; [.194F.0020.000B.1D7A7] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI 1D2A ; [.1950.0020.0002.1D2A] # GREEK LETTER SMALL CAPITAL PSI 1D6DA ; [.1951.0020.0005.1D6DA] # MATHEMATICAL BOLD SMALL OMEGA 1D714 ; [.1951.0020.0005.1D714] # MATHEMATICAL ITALIC SMALL OMEGA 1D74E ; [.1951.0020.0005.1D74E] # MATHEMATICAL BOLD ITALIC SMALL OMEGA 1D788 ; [.1951.0020.0005.1D788] # MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA 1D7C2 ; [.1951.0020.0005.1D7C2] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 2126 ; [.1951.0020.0008.2126] # OHM SIGN 1D6C0 ; [.1951.0020.000B.1D6C0] # MATHEMATICAL BOLD CAPITAL OMEGA 1D6FA ; [.1951.0020.000B.1D6FA] # MATHEMATICAL ITALIC CAPITAL OMEGA 1D734 ; [.1951.0020.000B.1D734] # MATHEMATICAL BOLD ITALIC CAPITAL OMEGA 1D76E ; [.1951.0020.000B.1D76E] # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA 1D7A8 ; [.1951.0020.000B.1D7A8] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA 1D2B ; [.1A46.0020.0002.1D2B] # CYRILLIC LETTER SMALL CAPITAL EL 1D78 ; [.1A5D.0020.0014.1D78] # MODIFIER LETTER CYRILLIC EN FB14 ; [.1C34.0020.0004.FB14][.1C25.0020.0004.FB14] # ARMENIAN SMALL LIGATURE MEN ECH FB15 ; [.1C34.0020.0004.FB15][.1C2B.0020.0004.FB15] # ARMENIAN SMALL LIGATURE MEN INI FB17 ; [.1C34.0020.0004.FB17][.1C2D.0020.0004.FB17] # ARMENIAN SMALL LIGATURE MEN XEH FB13 ; [.1C34.0020.0004.FB13][.1C36.0020.0004.FB13] # ARMENIAN SMALL LIGATURE MEN NOW FB16 ; [.1C3E.0020.0004.FB16][.1C36.0020.0004.FB16] # ARMENIAN SMALL LIGATURE VEW NOW 2135 ; [.1C48.0020.0004.2135] # ALEF SYMBOL FB21 ; [.1C48.0020.0005.FB21] # HEBREW LETTER WIDE ALEF FB2E ; [.1C48.0020.0002.05D0][.0000.008C.0002.05B7] # HEBREW LETTER ALEF WITH PATAH FB2F ; [.1C48.0020.0002.05D0][.0000.008D.0002.05B8] # HEBREW LETTER ALEF WITH QAMATS FB30 ; [.1C48.0020.0002.05D0][.0000.0092.0002.05BC] # HEBREW LETTER ALEF WITH MAPIQ FB4F ; [.1C48.0020.0004.FB4F][.1C53.0020.0004.FB4F] # HEBREW LIGATURE ALEF LAMED 2136 ; [.1C49.0020.0004.2136] # BET SYMBOL FB31 ; [.1C49.0020.0002.05D1][.0000.0092.0002.05BC] # HEBREW LETTER BET WITH DAGESH FB4C ; [.1C49.0020.0002.05D1][.0000.0095.0002.05BF] # HEBREW LETTER BET WITH RAFE 2137 ; [.1C4A.0020.0004.2137] # GIMEL SYMBOL FB32 ; [.1C4A.0020.0002.05D2][.0000.0092.0002.05BC] # HEBREW LETTER GIMEL WITH DAGESH 2138 ; [.1C4B.0020.0004.2138] # DALET SYMBOL FB22 ; [.1C4B.0020.0005.FB22] # HEBREW LETTER WIDE DALET FB33 ; [.1C4B.0020.0002.05D3][.0000.0092.0002.05BC] # HEBREW LETTER DALET WITH DAGESH FB23 ; [.1C4C.0020.0005.FB23] # HEBREW LETTER WIDE HE FB34 ; [.1C4C.0020.0002.05D4][.0000.0092.0002.05BC] # HEBREW LETTER HE WITH MAPIQ FB4B ; [.1C4D.0020.0002.05D5][.0000.008E.0002.05B9] # HEBREW LETTER VAV WITH HOLAM FB35 ; [.1C4D.0020.0002.05D5][.0000.0092.0002.05BC] # HEBREW LETTER VAV WITH DAGESH FB36 ; [.1C4E.0020.0002.05D6][.0000.0092.0002.05BC] # HEBREW LETTER ZAYIN WITH DAGESH FB38 ; [.1C50.0020.0002.05D8][.0000.0092.0002.05BC] # HEBREW LETTER TET WITH DAGESH FB1D ; [.1C51.0020.0002.05D9][.0000.0089.0002.05B4] # HEBREW LETTER YOD WITH HIRIQ FB39 ; [.1C51.0020.0002.05D9][.0000.0092.0002.05BC] # HEBREW LETTER YOD WITH DAGESH FB1F ; [.1C51.0020.0004.FB1F][.1C51.0020.0004.FB1F][.0000.008C.0002.FB1F] # HEBREW LIGATURE YIDDISH YOD YOD PATAH FB24 ; [.1C52.0020.0005.FB24] # HEBREW LETTER WIDE KAF FB3B ; [.1C52.0020.0002.05DB][.0000.0092.0002.05BC] # HEBREW LETTER KAF WITH DAGESH FB3A ; [.1C52.0020.0019.FB3A][.0000.0092.0002.FB3A] # HEBREW LETTER FINAL KAF WITH DAGESH FB4D ; [.1C52.0020.0002.05DB][.0000.0095.0002.05BF] # HEBREW LETTER KAF WITH RAFE FB25 ; [.1C53.0020.0005.FB25] # HEBREW LETTER WIDE LAMED FB3C ; [.1C53.0020.0002.05DC][.0000.0092.0002.05BC] # HEBREW LETTER LAMED WITH DAGESH FB26 ; [.1C54.0020.0005.FB26] # HEBREW LETTER WIDE FINAL MEM FB3E ; [.1C54.0020.0002.05DE][.0000.0092.0002.05BC] # HEBREW LETTER MEM WITH DAGESH FB40 ; [.1C55.0020.0002.05E0][.0000.0092.0002.05BC] # HEBREW LETTER NUN WITH DAGESH FB41 ; [.1C56.0020.0002.05E1][.0000.0092.0002.05BC] # HEBREW LETTER SAMEKH WITH DAGESH FB20 ; [.1C57.0020.0005.FB20] # HEBREW LETTER ALTERNATIVE AYIN FB44 ; [.1C58.0020.0002.05E4][.0000.0092.0002.05BC] # HEBREW LETTER PE WITH DAGESH FB43 ; [.1C58.0020.0019.FB43][.0000.0092.0002.FB43] # HEBREW LETTER FINAL PE WITH DAGESH FB4E ; [.1C58.0020.0002.05E4][.0000.0095.0002.05BF] # HEBREW LETTER PE WITH RAFE FB46 ; [.1C59.0020.0002.05E6][.0000.0092.0002.05BC] # HEBREW LETTER TSADI WITH DAGESH FB47 ; [.1C5A.0020.0002.05E7][.0000.0092.0002.05BC] # HEBREW LETTER QOF WITH DAGESH FB27 ; [.1C5B.0020.0005.FB27] # HEBREW LETTER WIDE RESH FB48 ; [.1C5B.0020.0002.05E8][.0000.0092.0002.05BC] # HEBREW LETTER RESH WITH DAGESH FB2B ; [.1C5C.0020.0002.05E9][.0000.0090.0002.05C2] # HEBREW LETTER SHIN WITH SIN DOT FB2A ; [.1C5C.0020.0002.05E9][.0000.0091.0002.05C1] # HEBREW LETTER SHIN WITH SHIN DOT FB49 ; [.1C5C.0020.0002.05E9][.0000.0092.0002.05BC] # HEBREW LETTER SHIN WITH DAGESH FB2D ; [.1C5C.0020.0002.05E9][.0000.0092.0002.05BC][.0000.0090.0002.05C2] # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT FB2C ; [.1C5C.0020.0002.05E9][.0000.0092.0002.05BC][.0000.0091.0002.05C1] # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT FB28 ; [.1C5D.0020.0005.FB28] # HEBREW LETTER WIDE TAV FB4A ; [.1C5D.0020.0002.05EA][.0000.0092.0002.05BC] # HEBREW LETTER TAV WITH DAGESH biblatex-biber-1.8/data/texmap.xsl000444000000000000 1161012230324176 16447 0ustar00rootroot000000000000 Biber UTF-8 <xsl:text disable-output-escaping="yes">&harr;</xsl:text> LaTeX macro decoding/encoding map

Biber UTF-8 &harr; LaTeX macro decoding/encoding map

If you are using PDFTeX as opposed to a native UTF-8 engine like XeTeX or LuaTeX, you will have to load some extra packages to use macros in this section. See the "symbols" document that comes with TeXLive for a comprehensive list of symbols and the packages you need for PDFTeX (run "texdoc symbols" to see this document on a TeXLive system).

Key
  • In encoding mapping (UTF-8 &rarr; LaTeX macros), when there are multiple possible mappings, red highlighted macro is the preferred mapping

Excluded from encoding (ignore LaTeX special chars)

Character

(sets: )

preferred
MacroUnicode characterUnicode hex value
\ &nbsp;

biblatex-biber-1.8/data/bcf.xsl000444000000000000 14105212230324177 15730 0ustar00rootroot000000000000
sort_final &darr; &uarr; Aa/ aA/ Aa/ aA/ A a A a
  • > <
Key
  • Heading Format: (sort-direction)(case-order)/(case-sensitivity)
  • Heading key: &uarr; = ascending sort, &darr; = descending sort, Aa = sort uppercase before lower, aA = sort lowercase before upper, A = case-sensitive sorting, a = case-insensitive sorting, sort fieldset is final master key if defined
  • Field key: Padding specification e.g. 0000field = pad field "field" from left with "0" to width 4. Substring specification e.g. field<<<< = take width 4 substring from right side of field "field"
BibLaTeX control file

BibLaTeX Control File (format version: )


options for

OptionValue
,&nbsp;

Datasource Mappings

Mappings for datatype (default overwrite = 1 0 )

Mapping ( overwrite = default overwrite , for types: , , for datasources: , )
map_final @ &rarr;@ map_final &rarr; &asymp; &rarr; map_null ="" =TYPE =FIELD =FIELDVAL

Key
  • @entrytype: Entrytype for entry must match or mapping terminates
  • field: Entry must have field or mapping terminates
  • @source&rarr;@target: Change source entrytype to target entrytype
  • source&rarr;target: Change source field to target field
  • field: Delete field
  • field="string": Set field to "string"
  • TYPE: Most recently mentioned source entrytype
  • FIELD: Most recently source field
  • FIELDVAL: Most recently source field value
  • field&asymp;MATCH: field must match Regular Expression MATCH
  • field&asymp;MATCH &rarr; REPLACE: Perform Regular Expression match/replace on field

Labelalpha Templates

Template for type

Part
  • la_final la_compound namecount>&rarr; > la_namecount= < v/ vf/ l
Key
  • Heading key: Label parts are concatenated together in part order shown
  • Labelpart key: Final label, no more parts are considered. "namecount>n&rarr;field" - conditional field part, only used if there are more than n names. Substring specification: >>>field = use three chars from left side of field, field<< = use two chars from right side of field, fieldv/n = variable-width substring, max n chars, fieldvf/n = variable-width substring fixed to same length as longest string occuring at least n times, fieldl = list scope disambiguation where the label as a whole is unique, not necessarily the individual parts. field with compound substring extraction enabled. field=n = only use the first n names to form the labelpart

Inheritance

Defaults

Child type &asymp; Parent typeSource field &rarr; Target field
* &asymp; * inherit_override * &rarr; inherit_override * inherit_override * &rarr; inherit_override &empty;
* &asymp; * inherit_override * &asymp; inherit_override * inherit_override * &rarr; inherit_override &empty;

Specifications

Child type &asymp; Parent typeSource field &rarr; Target field
  • * &asymp; *
  • &rarr; &empty; inherit_override &rarr; inherit_override
Key
  • * matches all entrytypes or fields
  • X &asymp; Y: X inherits from Y
  • X &rarr; &empty;: Field X is suppressed
  • F &rarr; F': Field F in parent becomes field F' in child. If both field F and field F' exist, field in red overrides the other.

Global Default Sorting Options

Presort defaults

EntrytypePresort default
ALL

Sorting exclusions

EntrytypeFields excluded from sorting
,&nbsp;

Sorting Specification


Data Model

Legal entrytypes

EntrytypeLegal fields for entrytype
GLOBAL
,
GLOBAL fields
GLOBAL fields
,

Field Types

FieldField FormatData type
&empty; &loz; standard &nbsp;
Key
  • &empty; = field can null in .bbl, &loz; = field is not output to .bbl

Constraints

EntrytypesConstraint
  • &forall; &exist; &not;&exist; ( , ) &rarr; &forall; &exist; &not;&exist; ( , ) &le; ( , ) &le; ( , ) must be dates &oplus; ( field_xor_coerce , ) &or; ( , )
Key
  • C &rarr; C': If condition C is met then condition C' must also be met
  • &forall; ( ... ): True if all fields in list exist
  • &exist; ( ... ): True if one field in list exists
  • &not;&exist; ( ... ): True if no fields in list exist
  • n &le; ( ... ) &le; m: True if fields in list are have values in the range n-m
  • &oplus; ( ... ): True if at least and at most one of the fields in the list exists (XOR). If more than field in the set exists, all will be ignored except for the one in red
  • &or; ( ... ): True if at least one of the fields in the list exists (OR)

Reference Sections

Section 0

Data sourcesCitekeys
  • (&nbsp;)
Output list ""
Filters
Filter typeFilter value
Sorting Specification
(global default)

Section

Data sourcesCitekeys
  • (&nbsp;)

Sorting Lists

Sorting list ""

Filters
Filter typeFilter value
Sorting Specification
(global default)
biblatex-biber-1.8/data/schemata000755000000000000 012230324177 16033 5ustar00rootroot000000000000biblatex-biber-1.8/data/schemata/biblatexml.rnc000444000000000000 5314112230324176 21042 0ustar00rootroot000000000000default namespace bib = "http://biblatex-biber.sourceforge.net/biblatexml" namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes" namespace user = "http://localhost/biblatexml/user" ## TODO? change namespace of bib:emphasis, bib:superscript, bib:subscript ## to db = "http://docbook.org/ns/docbook" ## XDATA, IDS are not in here start = element entries { (article | bibnote | book | bookmisc | booklet | books | collmisc | collections | inmisc | inproceedings | manual | misc | online | patent | periodical | proceedings | report | set | thesis | unpublished | misctypes)+ } BibLaTeXML.common.fields = abstract? & annotation? & crossref? & entryset? & entrysubtype? & execute? & file? & hyphenation? & indextitle* & indexsorttitle* & isan? & ismn? & iswc? & keywords? & label? & library? & nameaddon* & options? & origlocation* & origpublisher* & origtitle* & presort? & related? & shortauthor* & shorteditor* & shorthand* & shorthandintro* & shortjournal* & shortseries* & shorttitle* & sortkey? & sortname* & sorttitle* & sortyear? & xref? ######################################################### ## We now define the biblatexml elements formattext = (emphasis?, superscript?, subscript?, quote?, math?, text?)* emphasis = element emphasis { text } superscript = element superscript { text } subscript = element subscript { text } quote = element quote { text } ## The textual content of bib:math should be in (La)TeX notation ## MathML mathml:* insertions would also be possible with http://xsltml.sourceforge.net/ ## the optional attribute "text" gives a Unicode representation of the mathematical expression (if feasible), e.g., x³+y³=z³ math = element math { attribute text { text }?, text } att.form = attribute form { "original" | "romanised" | "translated" | "uniform" } att.lang = attribute xml:lang {xsd:language} abstract = element abstract { att.form?, att.lang?, formattext } addendum = element addendum { att.form?, att.lang?, formattext } annotation = element annotation { att.form?, att.lang?, formattext } booksubtitle = element booksubtitle { att.form?, att.lang?, formattext } booktitle = element booktitle { att.form?, att.lang?, formattext } booktitleaddon = element booktitleaddon { att.form?, att.lang?, formattext } chapter = element chapter { text } crossref = element crossref { text } doi = element doi { text } edition = element edition { xsd:integer | ( attribute string { text } ) } eid = element eid { text } entryset = element entryset { item+ | text } entrysubtype = element entrysubtype { text } eprint = element eprint { attribute type {text}, attribute class {text}?, text } eventtitle = element eventtitle { att.form?, att.lang?, formattext } execute = element execute { text } file = element file { text } hyphenation = element hyphenation { text } pdf = element pdf { text } id = element id { text } indexsorttitle = element indexsorttitle { text } indextitle = element indextitle { text } isan = element isan { text } #TODO validate with pattern isbn = element isbn { text } #TODO validate with pattern oclc = element oclc { text } #TODO validate with pattern lccn = element lccn { text } #TODO validate with pattern ismn = element ismn { text } #TODO validate with pattern isrn = element isrn { text } #TODO validate with pattern issn = element issn { text } #TODO validate with pattern issue = element issue { att.form?, att.lang?, formattext } issuetitle = element issuetitle { att.form?, att.lang?, formattext } issuesubtitle = element issuesubtitle { att.form?, att.lang?, formattext } iswc = element iswc { text } journaltitle = element journaltitle { att.form?, att.lang?, formattext } journalsubtitle = element journalsubtitle { att.form?, att.lang?, formattext } label = element label { text } user.field = element user:* { text } library = element library { libraryitem+ } libraryitem = element item { attribute location {text}?, attribute ref {text}?, attribute url {xsd:anyURI}?, attribute note {text}? } mainsubtitle = element mainsubtitle { att.form?, att.lang?, formattext } maintitle = element maintitle { att.form?, att.lang?, formattext } maintitleaddon = element maintitleaddon { att.form?, att.lang?, formattext } nameaddon = element nameaddon { text } note = element note { att.form?, att.lang?, formattext } number = element number { text } options = element options { element option { attribute key { text}, attribute value { text }?, empty } } origtitle = element origtitle { att.form?, att.lang?, formattext } pagetotal = element pagetotal { text } part = element part { text } presort = element presort { text } series = element series { att.form?, att.lang?, formattext } shorthand = element shorthand { att.form?, att.lang?, text } shorthandintro = element shorthandintro { att.form?, att.lang?, text } shorttitle = element shorttitle { att.form?, att.lang?, formattext } shortjournal = element shortjournal { att.form?, att.lang?, formattext } shortseries = element shortseries { att.form?, att.lang?, formattext } sortkey = element sortkey { text } sortyear = element sortyear { text } sorttitle = element sorttitle { text } subtitle = element subtitle { att.form?, att.lang?, formattext } title = element title { att.form?, att.lang?, formattext } titleaddon = element titleaddon { att.form?, att.lang?, formattext } url = element url { xsd:anyURI } useprefix = element useprefix { text } venue = element venue { att.form?, att.lang?, formattext } version = element version { text } volume = element volume { ( text | volume.range )} volume.range = ( volume.list | range ) volume.list = element list { element item { ( text | volume.range ) }+ } volumes = element volumes { text } xref = element xref { text } # dates attlist.year = attribute appeared { date.type }?, attribute type { "approximate" | "assumed" }?, attribute note { text }? attlist.dates = attribute datetype { "orig" | "event" | "url" } date = element date { attlist.dates?, attlist.year?, (date.type | date.range) } pubstate = element pubstate { text } date.type = (xsd:date | xsd:gYearMonth | xsd:gYear) date.range = (date.range.list | (date.range.start, date.range.end?) ) date.range.start = element start { xsd:date | xsd:gYear } date.range.end = element end { xsd:date | xsd:gYear | "" } date.range.list = element list { element item { (date.type|date.range) }+ } # pages pages = element pages { attlist.pages?, (text | range | pagelist ) } pagelist = element list { ( text | element item {( text | range )}+ ) } attlist.pages = attribute pagination { "page" | "column" | "line" | "verse" | "paragraph" | "none" }?, attribute bookpagination { "page" | "column" | "line" | "verse" | "paragraph" | "none" }?, attribute part { text }? ## e.g. when a book has parts in different scripts, with respective paginations range = range.start, range.end range.start = element start { text } range.end = element end { text } # literal lists att.lists = att.form?, attribute morelist { "1" | "true" }? institution = element institution { att.lists?, ( text | item+ ) } organisation = (element organisation { att.lists?, ( text | item+ ) } | element organization { att.lists?, ( text | item+ ) } ) location = element location { att.lang?, att.lists?, ( text | item+ ) } origlocation = element origlocation { att.lists?, ( text | item+ ) } publisher = element publisher { att.lang?, att.lists?, ( text | pubitem+ ) } origpublisher = element origpublisher { att.lists?, ( text | pubitem+ ) } item = element item { formattext } pubitem = element item { (text | (publishername, location)) } publishername = element name { attribute id {text}?, formattext } publocation = element location { attribute id {text}?, text } # key lists language = element language { xsd:language | itemlang+ } origlanguage = element origlanguage { xsd:language | itemlang+ } itemlang = element item { xsd:language } script.list = "Arab" | "Armi" | "Armn" | "Avst" | "Bali" | "Batk" | "Beng" | "Blis" | "Bopo" | "Brah" | "Brai" | "Bugi" | "Buhd" | "Cakm" | "Cans" | "Cari" | "Cham" | "Cher" | "Cirt" | "Copt" | "Cprt" | "Cyrl" | "Cyrs" | "Deva" | "Dsrt" | "Egyd" | "Egyh" | "Egyp" | "Ethi" | "Geok" | "Geor" | "Glag" | "Goth" | "Grek" | "Gujr" | "Guru" | "Hang" | "Hani" | "Hano" | "Hans" | "Hant" | "Hebr" | "Hira" | "Hmng" | "Hrkt" | "Hung" | "Inds" | "Ital" | "Java" | "Jpan" | "Kali" | "Kana" | "Khar" | "Khmr" | "Knda" | "Kore" | "Kthi" | "Lana" | "Laoo" | "Latf" | "Latg" | "Latn" | "Lepc" | "Limb" | "Lina" | "Linb" | "Lisu" | "Lyci" | "Lydi" | "Mand" | "Mani" | "Maya" | "Mero" | "Mlym" | "Mong" | "Moon" | "Mtei" | "Mymr" | "Nkgb" | "Nkoo" | "Ogam" | "Olck" | "Orkh" | "Orya" | "Osma" | "Perm" | "Phag" | "Phli" | "Phlp" | "Phlv" | "Phnx" | "Plrd" | "Prti" | "Qaaa" | "Qabx" | "Rjng" | "Roro" | "Runr" | "Samr" | "Sara" | "Saur" | "Sgnw" | "Shaw" | "Sinh" | "Sund" | "Sylo" | "Syrc" | "Syre" | "Syrj" | "Syrn" | "Tagb" | "Tale" | "Talu" | "Taml" | "Tavt" | "Telu" | "Teng" | "Tfng" | "Tglg" | "Thaa" | "Thai" | "Tibt" | "Ugar" | "Vaii" | "Visp" | "Xpeo" | "Xsux" | "Yiii" | "Zinh" | "Zmth" | "Zsym" | "Zxxx" | "Zyyy" | "Zzzz" script = element script { script.list | itemscript+ } origscript = element origscript { script.list | itemscript+ } itemscript = element item { script.list } # NAME LISTS attlist.name = att.form?, attribute class { "sub" | "vol" | "main" }?, att.gender?, attribute morenames {"1" | "true"}? att.gender = attribute gender { "sf" | "sm" | "sn" | "pf" | "pm" | "pn" | "pp" } author = element author { attlist.name?, ( text | person+ ) } editor = element editor { attlist.name?, (text | person+) } afterword = element afterword { attlist.name?, (text | person+) } annotator = element annotator { attlist.name?, (text | person+) } bookauthor = element bookauthor { attlist.name?, (text | person+) } commentator = element commentator { attlist.name?, (text | person+) } foreword = element foreword { attlist.name?, (text | person+) } holder = element holder { attlist.name?, (text | person+) } introduction = element introduction { attlist.name?, (text | person+) } translator = element translator { attlist.name?, (text | person+) } shortauthor = element shortauthor { attlist.name?, (text | person+) } shorteditor = element shorteditor { attlist.name?, (text | person+) } sortname = element sortname { attlist.name?, (text | person+) } person = element person { attlist.person, ( text | (first? & prefix? & middle? & last & suffix? ) ) } attlist.person |= attribute id { text }?, att.gender?, attribute useprefix { "yes" | "no" }? att.init = attribute initial { text } first = element first { att.init?, (text | namepart+) } last = element last { att.init?, (text | namepart+) } middle = element middle { att.init?, (text | namepart+) } prefix = element prefix { att.init?, (text | namepart+) } suffix = element suffix { att.init?, (text | namepart+) } namepart = element namepart { att.init?, text } keywords = element keywords { list {xsd:string+} | item+ } related = element related { element item { attribute type { text }, attribute string { text }?, attribute ids { text } }+ # can be comma-sep IDs } ######################################################### article = element entry { attribute id {text} & attribute entrytype { "article" } & id* & author+ & title+ & journaltitle+ & date+ & addendum? & annotator* & commentator* & doi? & editor? & eid? & eprint? & issn? & issue* & issuetitle* & issuesubtitle* & journalsubtitle* & language? & note? & number? & origlanguage? & pages? & pubstate? & series* & subtitle* & titleaddon* & translator* & url? & version? & volume? & BibLaTeXML.common.fields } ######################################################### bibnote = element entry { attribute id {text} & attribute entrytype { "bibnote" } & id* & element note { text } } ######################################################### book = element entry { attribute id {text} & attribute entrytype {"book"} & id* & author+ & title+ & date+ & addendum? & afterword* & annotator* & chapter? & commentator* & doi? & edition? & editor? & eprint? & foreword* & introduction* & isbn? & language? & location* & maintitle* & maintitleaddon* & mainsubtitle* & note? & number? & origlanguage? & pages? & pagetotal? & part? & publisher* & pubstate? & series* & subtitle* & titleaddon* & translator* & url? & volume? & volumes? & BibLaTeXML.common.fields } ######################################################### booklet = element entry { attribute id {text} & attribute entrytype {"booklet"} & attribute howpublished { text }? & attribute type { text }? & id* & (author | editor)& title+ & date+ & addendum? & chapter? & doi? & eprint? & language? & location* & note? & pages? & pagetotal? & pubstate? & subtitle* & titleaddon* & url? & BibLaTeXML.common.fields } ######################################################### books = element entry { attribute id {text} & attribute entrytype {"books"} & id* & author+ & title+ & date+ & addendum? & afterword* & annotator* & commentator* & doi? & edition? & editor? & eprint? & foreword* & introduction* & isbn? & language? & location* & note? & number? & origlanguage? & publisher* & pubstate? & subtitle* & titleaddon* & translator* & url? & volume? & volumes? & BibLaTeXML.common.fields } ######################################################### bookmisc = element entry { attribute id {text} & attribute entrytype { "inbook" | "bookinbook" | "suppbook" } & id* & author+ & title+ & booktitle+ & date+ & addendum? & afterword* & annotator* & bookauthor* & booksubtitle* & booktitleaddon* & chapter? & commentator* & doi? & edition? & editor? & eprint? & foreword* & introduction* & isbn? & language? & location* & mainsubtitle* & maintitle* & maintitleaddon* & note? & number? & origlanguage? & part? & publisher* & pages? & pubstate? & series* & subtitle* & titleaddon* & translator* & url? & volume? & volumes? & BibLaTeXML.common.fields } ######################################################### collmisc = element entry { attribute id {text} & attribute entrytype { "collection" | "reference" } & id* & editor+ & title+ & date+ & addendum? & afterword* & annotator* & chapter? & commentator* & doi? & edition? & eprint? & foreword* & introduction* & isbn? & language? & location* & mainsubtitle* & maintitle* & maintitleaddon* & note? & number? & origlanguage? & pages? & pagetotal? & part? & publisher* & pubstate? & series* & subtitle* & titleaddon* & translator* & url? & volume? & volumes? & BibLaTeXML.common.fields } ######################################################### collections = element entry { attribute id {text} & attribute entrytype { "collections" } & id* & author+ & title+ & date+ & addendum? & afterword* & annotator* & commentator* & doi? & edition? & editor? & eprint? & foreword* & introduction* & isbn? & language? & location* & note? & number? & origlanguage? & publisher* & pubstate? & subtitle* & titleaddon* & translator* & url? & volume? & volumes? & BibLaTeXML.common.fields } ######################################################### inmisc = element entry { attribute id {text} & attribute entrytype { "incollection" | "suppcollection" | "inreference" } & id* & author+ & editor+ & title+ & booktitle+ & date+ & addendum? & afterword* & annotator* & booksubtitle* & booktitleaddon* & chapter? & commentator* & doi? & edition? & eprint? & foreword* & introduction* & isbn? & language? & location* & mainsubtitle* & maintitle* & maintitleaddon* & note? & number? & origlanguage? & pages? & part? & publisher* & pubstate? & series* & subtitle* & titleaddon* & translator* & url? & volume? & volumes? & BibLaTeXML.common.fields } ######################################################### inproceedings = element entry { attribute id {text} & attribute entrytype { "inproceedings" } & id* & author+ & editor+ & title+ & booktitle+ & date+ & addendum? & booksubtitle* & booktitleaddon* & chapter? & doi? & eprint? & eventtitle* & isbn? & language? & location* & mainsubtitle* & maintitle* & maintitleaddon* & note? & number? & organisation* & pages? & part? & publisher* & pubstate? & series* & subtitle* & titleaddon* & url? & venue* & volume? & volumes? & BibLaTeXML.common.fields } ######################################################### manual = element entry { attribute id {text} & attribute entrytype { "manual" } & attribute type { text } & id* & (author | editor) & title+ & date+ & addendum? & chapter? & doi? & edition? & eprint? & isbn? & language? & location* & note? & number? & organisation* & pages? & pagetotal? & publisher* & pubstate? & series* & subtitle* & titleaddon* & url? & version? & BibLaTeXML.common.fields } ######################################################### misc = element entry { attribute id {text} & attribute entrytype { "misc" } & attribute howpublished { text }? & attribute type { text }? & id* & (author | editor)+ & title+ & date+ & addendum? & doi? & eprint? & language? & location* & note? & organisation* & pubstate? & subtitle* & titleaddon* & url? & version? & BibLaTeXML.common.fields } ######################################################### online = element entry { attribute id {text} & attribute entrytype { "online" } & id* & (author | editor) & title+ & date+ & url & addendum? & language? & note? & organisation* & pubstate? & subtitle* & titleaddon* & version? & BibLaTeXML.common.fields } ######################################################### patent = element entry { attribute id {text} & attribute entrytype { "patent" } & attribute type { text } & id* & author+ & title+ & number & date+ & addendum? & doi? & eprint? & holder* & location* & note? & pubstate? & subtitle* & titleaddon* & url? & version? & BibLaTeXML.common.fields } ######################################################### periodical = element entry { attribute id {text} & attribute entrytype { "periodical" } & id* & editor+ & title+ & date+ & addendum? & doi? & eprint? & issn? & issue* & issuesubtitle* & issuetitle* & language? & note? & number? & pubstate? & series* & subtitle* & url? & volume? & BibLaTeXML.common.fields } ######################################################### proceedings = element entry { attribute id {text} & attribute entrytype { "proceedings" } & id* & editor+ & title+ & date+ & addendum? & chapter? & doi? & eprint? & eventtitle* & isbn? & language? & location* & mainsubtitle* & maintitle* & maintitleaddon* & note? & number? & organisation* & pages? & pagetotal? & part? & publisher* & pubstate? & series* & subtitle* & titleaddon* & url? & venue* & volume? & volumes? & BibLaTeXML.common.fields } ######################################################### report = element entry { attribute id {text} & attribute entrytype { "report" } & attribute type { text } & id* & author+ & title+ & institution+ & date+ & addendum? & chapter? & doi? & eprint? & isrn? & language? & location* & note? & number? & pages? & pagetotal? & pubstate? & subtitle* & titleaddon* & url? & version? & BibLaTeXML.common.fields } ######################################################### thesis = element entry { attribute id {text} & attribute entrytype { "thesis" } & attribute type { text } & id* & author+ & title+ & institution+ & date+ & addendum? & chapter? & doi? & eprint? & language? & location* & note? & pages? & pagetotal? & pubstate? & subtitle* & titleaddon* & url? & BibLaTeXML.common.fields } ######################################################### unpublished = element entry { attribute id {text} & attribute entrytype { "unpublished" } & attribute howpublished { text } & id* & author+ & title+ & date+ & addendum? & language? & location* & note? & pubstate? & subtitle* & titleaddon* & url? & BibLaTeXML.common.fields } ######################################################### set = element entry { attribute id {text} & attribute entrytype { "set" } & attribute howpublished { text }? & id* & entryset } ######################################################### misctypes = element entry { attribute id {text} & attribute entrytype { "artwork" | "audio" | "commentary" | "image" | "jurisdiction" | "legal" | "legislation" | "letter" | "movie" | "music" | "performance" | "review" | "software" | "standard" | "video" } & attribute howpublished { text } & id* & author* & title* & date* & addendum? & language? & location* & note? & pubstate? & subtitle* & titleaddon* & url? & BibLaTeXML.common.fields } biblatex-biber-1.8/data/schemata/bcf.rng000444000000000000 15254212230324176 17502 0ustar00rootroot000000000000 1 biber global biblatex global biblatex bibtex biblatexml ris zoterordfxml endnotexml 0 1 user style driver 0 1 1 left right v vf l left right 0 1 original translated romanised uniform true false true false * 1 * 1 true false true false * 1 * 1 true false 1 1 true false true field list csv literal name key entrykey date verbatim integer range csv code uri datepart keyword option true true conditional all one none all one none data integer isbn issn ismn date pattern mandatory entry key shorthand 1 1 ascending descending 0 1 0 1 left right left right 1 1 original translated romanised uniform file bibtex biblatexml ris zoterordfxml endnotexml set 1 1 1 type nottype subtype notsubtype keyword notkeyword field notfield 1 singlevalued useprefix 0 1 singlevalued useauthor 0 1 singlevalued useeditor 0 1 singlevalued usetranslator 0 1 singlevalued labelalpha 0 1 singlevalued labeltitle 0 1 multivalued labeltitlespec original translated romanised uniform singlevalued labeltitleyear 0 1 singlevalued labeldate 0 1 multivalued labeldatespec field string singlevalued singletitle 0 1 singlevalued skipbib 0 1 singlevalued skiplab 0 1 singlevalued skiplos 0 1 singlevalued uniquelist 0 1 2 singlevalued uniquename 0 1 2 3 4 5 6 singlevalued maxitems singlevalued maxbibnames singlevalued maxalphanames singlevalued maxcitenames singlevalued minitems singlevalued minbibnames singlevalued minalphanames singlevalued mincitenames singlevalued sortscheme multivalued labelnamespec original translated romanised uniform singlevalued mincrossrefs singlevalued debug 0 1 singlevalued wrapline singlevalued output_encoding singlevalued input_encoding singlevalued sortcase 0 1 singlevalued sortfirstinits 0 1 singlevalued alphaothers \S+ singlevalued sortlocale ([a-zA-Z]{2}|[iI][\-_][a-zA-Z]+|[xX][\-_][a-zA-Z]{1,10})([\-_][a-zA-Z]{1,10})* singlevalued sortupper 0 1 singlevalued sortalphaothers \S+ 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 biblatex-biber-1.8/data/schemata/bcf.rnc000444000000000000 5035212230324176 17452 0ustar00rootroot000000000000namespace bcf = "https://sourceforge.net/projects/biblatex" start = element bcf:controlfile { # This is usually the same as the biblatex version string but not necessarily. # Sometimes the BCF format version doesn't change between biblatex releases attribute version { xsd:string {minLength="1"}}, # "Global" Biber options. It's not clear what a non-global biber option # would be but just in case, we have the option ... element bcf:options { attribute component { "biber" }, attribute type { "global" }, output_encoding, input_encoding, debug, mincrossrefs, sortcase, sortfirstinits, sortlocale?, sortupper }, # Global BibLaTeX options. That is, options that apply to all # entrytypes (unless a more specifically scoped option is specified) element bcf:options { attribute component { "biblatex" }, attribute type { "global" }, alphaothers, labelalpha, labelnamespec, labeltitle, labeltitlespec, labeltitleyear, labeldate, labeldatespec, maxalphanames, maxbibnames, maxcitenames, maxitems, minalphanames, minbibnames, mincitenames, minitems, singletitle, sortalphaothers?, sortscheme, uniquelist, uniquename, useauthor, useeditor, useprefix, usetranslator }, # Per-entrytype BibLaTeX options element bcf:options { attribute component { "biblatex" }, attribute type { text }, alphaothers?, labelalpha?, labelnamespec?, labeltitle?, labeltitlespec?, labeltitleyear?, labeldate?, labeldatespec?, maxalphanames?, maxbibnames?, maxcitenames?, maxitems?, minalphanames?, minbibnames?, mincitenames?, minitems?, singletitle?, skipbib?, skiplab?, skiplos?, sortalphaothers?, uniquelist?, uniquename?, useauthor?, useeditor?, useprefix?, usetranslator? }*, # user field/entrytype mapping element bcf:sourcemap { element bcf:maps { attribute datatype { "bibtex" | "biblatexml" | "ris" | "zoterordfxml" | "endnotexml" }, attribute map_overwrite { "0" | "1" }?, attribute level { "user" | "style" | "driver" }?, map+ }+ }?, # labelalpha template specification element bcf:labelalphatemplate { attribute type { xsd:string }?, # per-type? element bcf:labelelement { attribute order { xsd:integer }, element bcf:labelpart { attribute final { "0" | "1" }?, attribute pad_char { xsd:string {minLength="1"}}?, attribute pad_side { "left" | "right" }?, attribute substring_width { xsd:integer | "v" | "vf" | "l" }?, attribute substring_fixed_threshold { xsd:integer }?, attribute substring_width_max { xsd:integer }?, attribute substring_side { "left" | "right" }?, attribute substring_compound { "0" | "1" }?, attribute ifnamecount { xsd:integer }?, attribute namecount { xsd:integer }?, attribute form { "original" | "translated" | "romanised" | "uniform" }?, xsd:string }+ }+ }+, # Cross-reference inheritance specifications element bcf:inheritance { # Defaults element bcf:defaults { # Whether to inherit all fields attribute inherit_all { "true" | "false" }, # Should we overwrite the target field if it exists? attribute override_target { "true" | "false" }, # Default inherit_all and override_target settings for entrytype source/target pairs element bcf:type_pair { attribute source { "*" | xsd:string {minLength="1"}}, attribute target { "*" | xsd:string {minLength="1"}}, attribute inherit_all { "true" | "false" }?, attribute override_target { "true" | "false" }?, empty }* }, # An inheritance specification element bcf:inherit { # applies to these pairs of source/target entrytypes element bcf:type_pair { attribute source { "*" | xsd:string {minLength="1"}}, attribute target { "*" | xsd:string {minLength="1"}}, empty }+, # and here are the field specifications element bcf:field { ( # either a "skip this field" specification # so we can say inherit all except certain fields OR ... (attribute source { xsd:string }, attribute skip { "true" | "false" }) | # ... a source and target field with an optional override attribute (attribute source { xsd:string {minLength="1"}}, attribute target { xsd:string {minLength="1"}}, attribute override_target { "true" | "false" }?) ), empty }+ }* }, # noinit specification element bcf:noinits { element bcf:noinit { attribute value { xsd:string }, empty }+ }?, # nosort specification element bcf:nosorts { element bcf:nosort { attribute field { xsd:string }, attribute value { xsd:string }, empty }+ }?, # Global sorting specification sorting, # Data model specification element bcf:datamodel { # Valid entrytypes element bcf:entrytypes { element bcf:entrytype { # Some entrytypes should be completely skipped on output (XDATA etc.) attribute skip_output { "true" }?, text }+ }, # BibLaTeX field types. Biber uses this to determine how to output various types # to the .bbl element bcf:fields { element bcf:field { # fieldtype is "field" or "list" attribute fieldtype { "field" | "list" }, # format is a specification of the format of the field. If not specified, field contents # are just as is. attribute format { "csv" }?, # datatype of field content attribute datatype { "literal" | "name" | "key" | "entrykey" | "date" | "verbatim" | "integer" | "range" | "csv" | "code" | "uri" | "datepart" | "keyword" | "option" }, # Are we allowed to output a null field value to the .bbl for this field? attribute nullok { "true" }?, # Should this field be skipped and not output to the .bbl? attribute skip_output { "true" }?, text }+ }, # Allowable fields for entrytypes # Only one specification per entrytype: even though it might be nice to have several # so that one could share information, this would be hard to manage and confusing as it # not be visible in one place which fields were valid for an entrytype. element bcf:entryfields { element bcf:entrytype { text }*, element bcf:field { text }+ }+, # Constraints on field (co-)existence and format element bcf:constraints { # Set of entrytypes that this constraint applies to # An entrytype can be specified in multiple constraints # element bcf:entrytype { text }*, # A constraint specification element bcf:constraint { ( # Conditional constraints have an antecedent and consequent # both of which have a quantifier. This allows you to enforce # constraints like: # # if field a,b,c are all present then one of x,y,z must be # if one of field a,b,c are present then none of x,y,z must be # etc. (attribute type { "conditional" }, element bcf:antecedent { attribute quant { "all" | "one" | "none"}, element bcf:field { text }+ }, element bcf:consequent { attribute quant { "all" | "one" | "none"}, element bcf:field { text }+ } ) | # Datatype and format constraints (attribute type { "data" }, # range* attributes are for limiting integer type range attribute datatype { "integer" | "isbn" | "issn" | "ismn" | "date" | "pattern" }?, attribute rangemin { xsd:int }?, attribute rangemax { xsd:int }?, attribute pattern { text }?, element bcf:field { text }+ ) | # Mandatoriness constraints which say which fields must appear (attribute type { "mandatory" }, (element bcf:field { text } | # An XOR set of fields so you can enforce: # # One (but not more) of fields a,b,c must exist element bcf:fieldxor { element bcf:field { text }+ } | # An OR set of fields so you can enforce: # # One (possibly more) of fields a,b,c must exist element bcf:fieldor { element bcf:field { text }+ } )+ ) ) }* }+ }?, # Section specifications secspec+, listspec+ } listspec = element bcf:sortlist { attribute section { xsd:integer }, attribute type { "entry" | "key" | "shorthand" }, attribute label { xsd:string {minLength="1"}}, (filter | orfilter )*, element bcf:sorting { sort+ }? }* sorting = element bcf:sorting { # presort default strings for different entry types element bcf:presort { attribute type { text }?, text }+, # excludes of certain fields for sorting for specified types element bcf:sortexclusion { attribute type { text }, element bcf:exclusion { text }+ }*, sort+ } sort = # sort specification element bcf:sort { # order of this specification in the set of all sort specifications attribute order { xsd:integer }, # Should we stop generating sorting information after this item? attribute final { "1" }?, # Sort ascending or descending attribute sort_direction { "ascending" | "descending" }?, # Sort case sensitive or not? attribute sortcase { "0" | "1" }?, # Sort upper before lower? attribute sortupper { "0" | "1" }?, # A sort item specification - a field or pseudo-field to get sort information from element bcf:sortitem { # order of this item in the set of all other item specifications attribute order { xsd:integer }, # Just use a part of the item information for sorting? attribute substring_side { "left" | "right" }?, attribute substring_width { xsd:integer }?, # Pad the item information when sorting with it? attribute pad_side { "left" | "right" }?, attribute pad_width { xsd:integer }?, attribute pad_char { xsd:string { minLength = "1" maxLength = "1" } }?, attribute form { "original" | "translated" | "romanised" | "uniform" }?, text }+ }+ # Section specification secspec = # data sources element bcf:bibdata { # which sections the datafiles are for attribute section { xsd:integer }, element bcf:datasource { attribute type { "file" }, attribute datatype { "bibtex" | "biblatexml" | "ris" | "zoterordfxml" | "endnotexml" }?, xsd:anyURI }* }?, # citekeys or citekey sets in each section element bcf:section { attribute number { xsd:integer }, element bcf:citekey { ( attribute type { "set" }, attribute members { xsd:string {minLength="1"}}, xsd:string {minLength="1"}) | ( attribute order { xsd:integer }, xsd:string {minLength="1"} ) }* } orfilter = element bcf:orfilter { filter+ } filter = element bcf:filter { attribute type { "type" | "nottype" | "subtype" | "notsubtype" | "keyword" | "notkeyword" | "field" | "notfield" }, xsd:string {minLength="1"} } # option definitions useprefix = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "useprefix" }, element bcf:value { "0" | "1" } } useauthor = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "useauthor" }, element bcf:value { "0" | "1" } } useeditor = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "useeditor" }, element bcf:value { "0" | "1" } } usetranslator = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "usetranslator" }, element bcf:value { "0" | "1" } } labelalpha = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "labelalpha" }, element bcf:value { "0" | "1" } } labeltitle = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "labeltitle" }, element bcf:value { "0" | "1" } } labeltitlespec = element bcf:option { attribute type { "multivalued" }, element bcf:key { "labeltitlespec" }, element bcf:value { attribute order { xsd:integer }, attribute form { "original" | "translated" | "romanised" | "uniform" }?, attribute lang { text }?, text }+ } labeltitleyear = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "labeltitleyear" }, element bcf:value { "0" | "1" } } labeldate = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "labeldate" }, element bcf:value { "0" | "1" } } labeldatespec = element bcf:option { attribute type { "multivalued" }, element bcf:key { "labeldatespec" }, element bcf:value { attribute order { xsd:integer }, attribute type { "field" | "string" }, text }+ } singletitle = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "singletitle" }, element bcf:value { "0" | "1" } } skipbib = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "skipbib" }, element bcf:value { "0" | "1" } } skiplab = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "skiplab" }, element bcf:value { "0" | "1" } } skiplos = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "skiplos" }, element bcf:value { "0" | "1" } } # 0 = do not provide uniquelist information # 1 = disambiguate lists regardless of year # 2 = disambiguate lists only when year is the same uniquelist = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "uniquelist" }, element bcf:value { "0" | "1" | "2" } } # 0 = do not provide uniquename information # 1 = disambiguate with initials, only up to maxcitenames/uniquelist # 2 = disambiguate with full name or initials, only up to maxcitenames/uniquelist # 3 = disambiguate with initials, ignore maxcitenames/uniquelist # 4 = disambiguate with full name or initials, ignore maxcitenames/uniquelist # 5 = disambiguate with initials, only between identical lists in different entries # 6 = disambiguate with full name or initials, only between identical lists in different entries uniquename = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "uniquename" }, element bcf:value { "0" | "1" | "2" | "3" | "4" | "5" | "6" } } maxitems = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "maxitems" }, element bcf:value { xsd:integer } } maxbibnames = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "maxbibnames" }, element bcf:value { xsd:integer } } maxalphanames = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "maxalphanames" }, element bcf:value { xsd:integer } } maxcitenames = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "maxcitenames" }, element bcf:value { xsd:integer } } minitems = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "minitems" }, element bcf:value { xsd:integer } } minbibnames = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "minbibnames" }, element bcf:value { xsd:integer } } minalphanames = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "minalphanames" }, element bcf:value { xsd:integer } } mincitenames = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "mincitenames" }, element bcf:value { xsd:integer } } sortscheme = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "sortscheme" }, element bcf:value { text } } labelnamespec = element bcf:option { attribute type { "multivalued" }, element bcf:key { "labelnamespec" }, element bcf:value { attribute order { xsd:integer }, attribute form { "original" | "translated" | "romanised" | "uniform" }?, attribute lang { text }?, text }+ } mincrossrefs = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "mincrossrefs" }, element bcf:value { xsd:integer } } debug = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "debug" }, element bcf:value { "0" | "1" } } wrapline = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "wrapline" }, element bcf:value { xsd:integer } } output_encoding = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "output_encoding" }, element bcf:value { text } } input_encoding = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "input_encoding" }, element bcf:value { text } } sortcase = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "sortcase" }, element bcf:value { "0" | "1" } } sortfirstinits = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "sortfirstinits" }, element bcf:value { "0" | "1" } } alphaothers = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "alphaothers" }, element bcf:value { xsd:normalizedString { pattern = "\S+" } } } # This is xsd:language but also allows underscore separators sortlocale = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "sortlocale" }, element bcf:value { xsd:normalizedString { pattern = "([a-zA-Z]{2}|[iI][\-_][a-zA-Z]+|[xX][\-_][a-zA-Z]{1,10})([\-_][a-zA-Z]{1,10})*" } } } sortupper = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "sortupper" }, element bcf:value { "0" | "1" } } sortalphaothers = element bcf:option { attribute type { "singlevalued" }, element bcf:key { "sortalphaothers" }, element bcf:value { xsd:normalizedString { pattern = "\S+" } } } map = element bcf:map { attribute map_overwrite { "0" | "1" }?, element bcf:per_datasource { xsd:string {minLength="1"} }*, element bcf:per_type { xsd:string {minLength="1"} }*, element bcf:map_step { ( ( attribute map_entry_null { "1" } ) | ( attribute map_type_source { xsd:string {minLength="1"} }, attribute map_type_target { xsd:string {minLength="1"} }?, attribute map_final { "1" }? ) | ( attribute map_field_source { xsd:string {minLength="1"} }, attribute map_field_target { xsd:string {minLength="1"} }?, attribute map_final { "1" }?, attribute map_match { xsd:string {minLength="1"} }?, attribute map_notmatch { xsd:string {minLength="1"} }?, attribute map_replace { xsd:string {minLength="1"} }? ) | ( attribute map_field_set { xsd:string {minLength="1"} }, attribute map_append { "1" }?, attribute map_final { "1" }?, ( attribute map_null { "1" } | attribute map_origfield { "1" } | attribute map_origfieldval { "1" } | attribute map_origentrytype { "1" } | attribute map_field_value { xsd:string {minLength="1"} } ) ) ), empty }+ } biblatex-biber-1.8/data/schemata/biblatexml.rng000444000000000000 24076012230324177 21074 0ustar00rootroot000000000000 TODO? change namespace of bib:emphasis, bib:superscript, bib:subscript to db = "http://docbook.org/ns/docbook" We now define the biblatexml elements The textual content of bib:math should be in (La)TeX notation MathML mathml:* insertions would also be possible with http://xsltml.sourceforge.net/ the optional attribute "text" gives a Unicode representation of the mathematical expression (if feasible), e.g., x³+y³=z³ original romanised translated uniform approximate assumed orig event url page column line verse paragraph none page column line verse paragraph none e.g. when a book has parts in different scripts, with respective paginations 1 true Arab Armi Armn Avst Bali Batk Beng Blis Bopo Brah Brai Bugi Buhd Cakm Cans Cari Cham Cher Cirt Copt Cprt Cyrl Cyrs Deva Dsrt Egyd Egyh Egyp Ethi Geok Geor Glag Goth Grek Gujr Guru Hang Hani Hano Hans Hant Hebr Hira Hmng Hrkt Hung Inds Ital Java Jpan Kali Kana Khar Khmr Knda Kore Kthi Lana Laoo Latf Latg Latn Lepc Limb Lina Linb Lisu Lyci Lydi Mand Mani Maya Mero Mlym Mong Moon Mtei Mymr Nkgb Nkoo Ogam Olck Orkh Orya Osma Perm Phag Phli Phlp Phlv Phnx Plrd Prti Qaaa Qabx Rjng Roro Runr Samr Sara Saur Sgnw Shaw Sinh Sund Sylo Syrc Syre Syrj Syrn Tagb Tale Talu Taml Tavt Telu Teng Tfng Tglg Thaa Thai Tibt Ugar Vaii Visp Xpeo Xsux Yiii Zinh Zmth Zsym Zxxx Zyyy Zzzz sub vol main 1 true sf sm sn pf pm pn pp yes no article bibnote book booklet books inbook bookinbook suppbook collection reference collections incollection suppcollection inreference inproceedings manual misc online patent periodical proceedings report thesis unpublished set artwork audio commentary image jurisdiction legal legislation letter movie music performance review software standard video biblatex-biber-1.8/data/schemata/config.rng000444000000000000 10121112230324175 20177 0ustar00rootroot000000000000 0 1 0 1 0 1 true field list csv literal name key entrykey date verbatim integer range csv code uri datepart keyword option true true conditional all one none all one none data integer isbn issn ismn date pattern mandatory 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 upper lower title bibtex bbl biblatexml dot 0 1 0 1 base full 0 1 0 1 0 1 0 1 bibtex biblatexml ris zoterordfxml endnotexml 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 true false true false * 1 * 1 true false true false * 1 * 1 true false 1 1 true false 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ascending descending 0 1 0 1 left right left right 1 1 original translated romanised uniform biblatex-biber-1.8/data/schemata/config.rnc000444000000000000 2617612230324177 20175 0ustar00rootroot000000000000start = element config { element clrmacros { "0" | "1" }? & element collate { "0" | "1" }? & element collate_options { element option { attribute name { text } & attribute value { text } }+ }? & # Can't specify the config file location in the config file ... # element configfile { text }? & element convert_control { "0" | "1" }? & element dot_include { text }? & # Data model specification element datamodel { # Valid entrytypes element entrytypes { element entrytype { # Some entrytypes should be completely skipped on output (XDATA etc.) attribute skip_output { "true" }?, text }+ }, # BibLaTeX field types. Biber uses this to determine how to output various types # to the .bbl element fields { element field { # fieldtype is "field" or "list" attribute fieldtype { "field" | "list" }, # format is a specification of the format of the field. If not specified, field contents # are just as is. attribute format { "csv" }?, # datatype of field content attribute datatype { "literal" | "name" | "key" | "entrykey" | "date" | "verbatim" | "integer" | "range" | "csv" | "code" | "uri" | "datepart" | "keyword" | "option" }, # Are we allowed to output a null field value to the .bbl for this field? attribute nullok { "true" }?, # Should this field be skipped and not output to the .bbl? attribute skip_output { "true" }?, text }+ }, # Allowable fields for entrytypes # Only one specification per entrytype: even though it might be nice to have several # so that one could share information, this would be hard to manage and confusing as it # not be visible in one place which fields were valid for an entrytype. element entryfields { element entrytype { text }*, element field { text }+ }+, # Constraints on field (co-)existence and format element constraints { # Set of entrytypes that this constraint applies to # An entrytype can be specified in multiple constraints # element entrytype { text }*, # A constraint specification element constraint { ( # Conditional constraints have an antecedent and consequent # both of which have a quantifier. This allows you to enforce # constraints like: # # if field a,b,c are all present then one of x,y,z must be # if one of field a,b,c are present then none of x,y,z must be # etc. (attribute type { "conditional" }, element antecedent { attribute quant { "all" | "one" | "none"}, element field { text }+ }, element consequent { attribute quant { "all" | "one" | "none"}, element field { text }+ } ) | # Datatype and format constraints (attribute type { "data" }, # range* attributes are for limiting integer type range attribute datatype { "integer" | "isbn" | "issn" | "ismn" | "date" | "pattern" }?, attribute rangemin { xsd:int }?, attribute rangemax { xsd:int }?, attribute pattern { text }?, element field { text }+ ) | # Mandatoriness constraints which say which fields must appear (attribute type { "mandatory" }, (element field { text } | # An XOR set of fields so you can enforce: # # One (but not more) of fields a,b,c must exist element fieldxor { element field { text }+ } | # An OR set of fields so you can enforce: # # One (possibly more) of fields a,b,c must exist element fieldor { element field { text }+ } )+ ) ) }* }+ }? & element decodecharsset { text }? & element debug { "0" | "1" }? & element fastsort { "0" | "1" }? & element fixinits { "0" | "1" }? & # Would never want this in the config file # element help { "0" | "1" }? & inheritance? & element input_encoding { text }? & element listsep { text }? & element logfile { text }? & element mincrossrefs { xsd:unsignedByte }? & element mssplit { text }? & element namesep { text }? & # Can't specify not to use a config file in the config file ... # element noconf { "0" | "1" }? & element nodieonerror { "0" | "1" }? & element nolog { "0" | "1" }? & # noinit specification element noinit { element option { attribute value { xsd:string }, empty }+ }? & # nosort specification element nosort { element option { attribute name { text } & attribute value { text } }+ }? & element nostdmacros { "0" | "1" }? & element onlylog { "0" | "1" }? & element others_string { text }? & element output_align { "0" | "1" }? & element output_directory { text }? & element output_encoding { text }? & element output_fieldcase { "upper" | "lower" | "title" }? & element output_file { text }? & element output_format { "bibtex" | "bbl" | "biblatexml" | "dot" }? & element output_indent { xsd:unsignedByte }? & element output_macro_fields { text }? & element output_resolve { "0" | "1" }? & element output_safechars { "0" | "1" }? & element output_safecharsset { "base" | "full" }? & element quiet { "0" | "1" }? & element recodedata { text }? & element sortcase { "0" | "1" }? & element sortfirstinits { "0" | "1" }? & sorting? & element sortlocale { text }? & element sortupper { "0" | "1" }? & element sourcemap { element maps { attribute datatype { "bibtex" | "biblatexml" | "ris" | "zoterordfxml" | "endnotexml" }, attribute map_overwrite { "0" | "1" }?, map+ }+ }? & element ssl-nointernalca { "0" | "1" }? & element ssl-noverify-host { "0" | "1" }? & element tool { "0" | "1" }? & element tool_config { text }? & element trace { "0" | "1" }? & element validate_config { "0" | "1" }? & element validate_control { "0" | "1" }? & element validate_datamodel { "0" | "1" }? & # Meaningless in the config file # element version { "0" | "1" }? & element wraplines { "0" | "1" }? } inheritance = # Cross-reference inheritance specifications element inheritance { # Defaults element defaults { # Whether to inherit all fields attribute inherit_all { "true" | "false" }, # Should we overwrite the target field if it exists? attribute override_target { "true" | "false" }, # Default inherit_all and override_target settings for entrytype source/target pairs element type_pair { attribute source { "*" | xsd:string {minLength="1"}}, attribute target { "*" | xsd:string {minLength="1"}}, attribute inherit_all { "true" | "false" }?, attribute override_target { "true" | "false" }?, empty }* }, # An inheritance specification element inherit { # applies to these pairs of source/target entrytypes element type_pair { attribute source { "*" | xsd:string {minLength="1"}}, attribute target { "*" | xsd:string {minLength="1"}}, empty }+, # and here are the field specifications element field { ( # either a "skip this field" specification # so we can say inherit all except certain fields OR ... (attribute source { xsd:string }, attribute skip { "true" | "false" }) | # ... a source and target field with an optional override attribute (attribute source { xsd:string {minLength="1"}}, attribute target { xsd:string {minLength="1"}}, attribute override_target { "true" | "false" }?) ), empty }+ }* } map = element map { attribute map_overwrite { "0" | "1" }?, element per_datasource { xsd:string {minLength="1"} }*, element per_type { xsd:string {minLength="1"} }*, element map_step { ( ( attribute map_entry_null { "1" } ) | ( attribute map_type_source { xsd:string {minLength="1"} }, attribute map_type_target { xsd:string {minLength="1"} }?, attribute map_final { "1" }? ) | ( attribute map_field_source { xsd:string {minLength="1"} }, attribute map_field_target { xsd:string {minLength="1"} }?, attribute map_final { "1" }?, attribute map_match { xsd:string {minLength="1"} }?, attribute map_notmatch { xsd:string {minLength="1"} }?, attribute map_replace { xsd:string {minLength="1"} }? ) | ( attribute map_field_set { xsd:string {minLength="1"} }, attribute map_append { "1" }?, attribute map_final { "1" }?, ( attribute map_null { "1" } | attribute map_origfield { "1" } | attribute map_origfieldval { "1" } | attribute map_origentrytype { "1" } | attribute map_field_value { xsd:string {minLength="1"} } ) ) ), empty }+ } sorting = element sorting { # presort default strings for different entry types element presort { attribute type { text }?, text }+, # excludes of certain fields for sorting for specified types element sortexclusion { attribute type { text }, element exclusion { text }+ }*, sort+ } sort = # sort specification element sort { # order of this specification in the set of all sort specifications attribute order { xsd:integer }, # Should we stop generating sorting information after this item? attribute final { "1" }?, # Sort ascending or descending attribute sort_direction { "ascending" | "descending" }?, # Sort case sensitive or not? attribute sortcase { "0" | "1" }?, # Sort upper before lower? attribute sortupper { "0" | "1" }?, # A sort item specification - a field or pseudo-field to get sort information from element sortitem { # order of this item in the set of all other item specifications attribute order { xsd:integer }, # Just use a part of the item information for sorting? attribute substring_side { "left" | "right" }?, attribute substring_width { xsd:integer }?, # Pad the item information when sorting with it? attribute pad_side { "left" | "right" }?, attribute pad_width { xsd:integer }?, attribute pad_char { xsd:string { minLength = "1" maxLength = "1" } }?, attribute form { "original" | "translated" | "romanised" | "uniform" }?, text }+ }+ biblatex-biber-1.8/data/schemata/texmap.rnc000444000000000000 76412230324176 20160 0ustar00rootroot000000000000start = element texmap { element maps { # CSV list of sets attribute set { text }, attribute type { "accents" | "wordmacros" | "diacritics" | "punctuation" | "symbols" | "negatedsymbols" | "superscripts" | "cmdsuperscripts" | "dings" | "greek" }, map+ }+, element encode_exclude { element char { text }+ } } map = element map { element from { attribute preferred {"1"}?, text }, element to { attribute hex { text }, text } } biblatex-biber-1.8/bin000755000000000000 012230324177 14105 5ustar00rootroot000000000000biblatex-biber-1.8/bin/biber000555000000000000 5730012230324177 15300 0ustar00rootroot000000000000#!/usr/bin/perl use v5.16; use strict; use warnings; use constant { EXIT_OK => 0, EXIT_ERROR => 2 }; use Carp; use IPC::Cmd qw( can_run run ); use Log::Log4perl qw(:no_extra_logdie_message); use Log::Log4perl::Level; use POSIX qw(strftime); use Biber; use Biber::Utils; use File::Spec; use Pod::Usage; use List::AllUtils qw( first ); use Getopt::Long qw/:config no_ignore_case/; my $opts = {}; GetOptions( $opts, 'bibencoding=s', # legacy alias for input_encoding 'bblencoding=s', # legacy alias for output_encoding 'bblsafechars', # legacy alias for output_safechars 'bblsafecharsset=s', # legacy alias for output_safecharsset 'cache', 'clrmacros', 'collate|C', 'collate_options|c=s', 'configfile|g=s', 'convert_control', 'dot_include:s@', 'decodecharsset=s', 'debug|D', 'fastsort|f', 'fixinits', 'help|h|?', 'input_encoding|e=s', 'input_format=s', 'listsep=s', 'logfile=s', 'mincrossrefs|m=s', 'mssplit=s', 'namesep=s', 'noconf', 'nodieonerror', 'nolog', 'nostdmacros', 'onlylog', 'others_string=s', 'outfile=s', # legacy alias for output_file 'outformat=s', # legacy alias for output_format 'output_align', 'output_directory=s', 'output_encoding|E=s', 'output_fieldcase=s', 'output_file|O=s', 'output_format=s', 'output_indent=s', 'output_macro_fields=s', 'output_resolve', 'output_safechars', 'output_safecharsset=s', 'quiet|q+', 'recodedata=s', 'sortcase=s', 'sortfirstinits=s', 'sortlocale|l=s', 'sortupper=s', 'ssl-nointernalca', 'ssl-noverify-host', 'tool', 'tool_align', # legacy alias for output_align 'tool_config', 'tool_fieldcase=s', # legacy alias for output_fieldcase 'tool_indent=s', # legacy alias for output_indent 'tool_macro_fields=s', # legacy alias for output_macro_fields 'tool_resolve', # legacy alias for output_resolve 'trace|T', 'u', # alias for input_encoding=UTF-8 'U', # alias for output_encoding=UTF-8 'validate_config', 'validate_control', 'validate_datamodel|V', 'version|v', 'wraplines|w' ) or pod2usage(-verbose => 0, -exitval => EXIT_ERROR); # verbose > 1 uses external perldoc, this doesn't work with PAR::Packer binaries # so use "-noperldoc" to use built-in POD::Text if (exists $opts->{'help'}) { pod2usage(-verbose => 2, -noperldoc => 1, -exitval => EXIT_OK); } if (exists $opts->{'version'}) { my $v = "biber version: $Biber::Config::VERSION"; $v .= ' (beta)' if $Biber::Config::BETA_VERSION; say "$v"; exit EXIT_OK; } # Show location of PAR::Packer cache if (exists $opts->{'cache'}) { if (my $cache = $ENV{PAR_TEMP}) { $cache =~ s|//|/|og; # Sanitise path in case it worries people say $cache; } else { say "No cache - you are not running the PAR::Packer executable version of biber"; } exit EXIT_OK; } # Show location of default tool mode config file and exit if (exists $opts->{'tool_config'}) { (my $vol, my $dir, undef) = File::Spec->splitpath( $INC{"Biber/Config.pm"} ); $dir =~ s/\/$//; # splitpath sometimes leaves a trailing '/' say File::Spec->catpath($vol, "$dir", 'biber-tool.conf'); exit EXIT_OK; } # Catch this situation early unless (@ARGV) { pod2usage(-verbose => 0, -exitval => EXIT_ERROR); } # Sanitise collate option if fastsort is specified if ($opts->{fastsort}) { delete $opts->{collate}; } # Resolve some option shortcuts and legacy aliases if (my $o = $opts->{tool_align}) { $opts->{output_align} = $o; delete $opts->{tool_align}; } if (my $o = $opts->{tool_fieldcase}) { $opts->{output_fieldcase} = $o; delete $opts->{tool_fieldcase}; } if (my $o = $opts->{tool_indent}) { $opts->{output_indent} = $o; delete $opts->{tool_indent}; } if (my $o = $opts->{tool_macro_fields}) { $opts->{output_macro_fields} = $o; delete $opts->{tool_macro_fields}; } if (my $o = $opts->{tool_resolve}) { $opts->{output_resolve} = $o; delete $opts->{tool_resolve}; } if (my $o = $opts->{bibencoding}) { $opts->{input_encoding} = $o; delete $opts->{bibencoding}; } if (my $o = $opts->{bblencoding}) { $opts->{output_encoding} = $o; delete $opts->{bblencoding}; } if (my $o = $opts->{bblsafechars}) { $opts->{output_safechars} = $o; delete $opts->{bblsafechars}; } if (my $o = $opts->{bblsafecharsset}) { $opts->{output_safecharsset} = $o; delete $opts->{bblsafecharsset}; } if (my $o = $opts->{outfile}) { $opts->{output_file} = $o; delete $opts->{outfile}; } if (my $o = $opts->{outformat}) { $opts->{output_format} = $o; delete $opts->{outformat}; } if ($opts->{u}) { $opts->{input_encoding} = 'UTF-8'; delete $opts->{u}; } if ($opts->{U}) { $opts->{output_encoding} = 'UTF-8'; delete $opts->{U}; } # Check the output_format option if (my $of = $opts->{output_format}) { unless ($opts->{output_format} =~ /\A(?:bbl|dot|bibtex|biblatexml)\z/xms) { say STDERR "Biber: Unknown output format '$of', must be one of 'bbl', 'dot', 'bibtex', 'biblatexml'"; exit EXIT_ERROR; } } if (exists($opts->{tool}) and exists($opts->{output_format}) and $opts->{output_format} !~ /\A(?:bibtex|biblatexml)\z/xms) { say STDERR "Biber: Output format in tool mode must be one of 'bbl' or 'biblatexml'"; exit EXIT_ERROR; } # Set default output format if (not exists($opts->{output_format})) { if (exists($opts->{tool})) { $opts->{output_format} = 'bibtex'; # default for tool mode is different } else { $opts->{output_format} = 'bbl'; # default for normal use } } # Check the tool_* options if (exists($opts->{output_indent}) and $opts->{output_indent} !~ /^\d+$/) { say STDERR "Biber: Invalid non-numeric argument for 'output_indent' option!"; exit EXIT_ERROR; } if (exists($opts->{output_fieldcase}) and $opts->{output_fieldcase} !~ /^(?:upper|lower|title)$/i) { say STDERR "Biber: Invalid argument for 'output_fieldcase' option - must be one of 'upper', 'lower' or 'title'!"; exit EXIT_ERROR; } # Check the dot_include option if (exists($opts->{dot_include}) and (not exists($opts->{output_format}) or (exists($opts->{output_format}) and $opts->{output_format} ne 'dot'))) { say STDERR "Biber: DOT output format specified but output format is not DOT!"; exit EXIT_ERROR; } if (exists($opts->{dot_include})) { $opts->{dot_include} = {map {lc($_) => 1} split(/,/,join(',',@{$opts->{dot_include}}))}; my @suboptions = ( 'section', 'field', 'crossref', 'xref', 'xdata', 'related' ); foreach my $g (keys %{$opts->{dot_include}}) { unless (first {$_ eq lc($g)} @suboptions) { say STDERR "Biber: '$g' is an invalid output type for DOT output"; exit EXIT_ERROR; } } } # Check input_format option if (exists($opts->{input_format}) and not exists($opts->{tool}) ) { say STDERR "Biber: 'input_format' option is only valid in tool mode"; exit EXIT_ERROR; } if (exists($opts->{input_format}) and $opts->{input_format} !~ /^(?:bibtex|biblatexml|)$/i) { say STDERR 'Biber: ' . $opts->{input_format} . ' is an invalid input format in tool mode'; exit EXIT_ERROR; } # Create Biber object, passing command-line options my $biber = Biber->new(%$opts); # get the logger object my $logger = Log::Log4perl::get_logger('main'); my $screen = Log::Log4perl::get_logger('screen'); my $logfile = Log::Log4perl::get_logger('logfile'); my $outfile; my $time_string = strftime "%a %b %e, %Y, %H:%M:%S", localtime; $logfile->info("=== $time_string"); my $bcf = Biber::Config->getoption('bcf'); if (Biber::Config->getoption('output_file')) { $outfile = Biber::Config->getoption('output_file') } else { if (Biber::Config->getoption('tool')) { if (Biber::Config->getoption('output_format') eq 'bibtex') { # tool .bib output $outfile = $ARGV[0] =~ s/\..+$/_bibertool.bib/r; } elsif (Biber::Config->getoption('output_format') eq 'biblatexml') { # tool .blxtxml output $outfile = $ARGV[0] =~ s/\..+$/_bibertool.bltxml/r; } } else { if (Biber::Config->getoption('output_format') eq 'dot') { # .dot output $outfile = $bcf =~ s/bcf$/dot/r; } elsif (Biber::Config->getoption('output_format') eq 'bibtex') { # bibtex output $outfile = $bcf =~ s/\..+$/_biber.bib/r; } elsif (Biber::Config->getoption('output_format') eq 'bbl') { # bbl output $outfile = $bcf =~ s/bcf$/bbl/r; } } } # Set the .bbl path to the output dir, if specified if (my $outdir = Biber::Config->getoption('output_directory')) { my (undef, undef, $file) = File::Spec->splitpath($outfile); $outfile = File::Spec->catfile($outdir, $file) } # Fake some necessary .bcf parts if in tool mode if (Biber::Config->getoption('tool')) { $biber->tool_mode_setup; } else { # parse the .bcf control file $biber->parse_ctrlfile($bcf); } # Postprocess biber options now that they are all read from the various places Biber::Config->postprocess_biber_opts; # Check to see if the .bcf set debug=1. If so, increase logging level # We couldn't set this on logger init as the .bcf hadn't been read then if (Biber::Config->getoption('debug')) { $logger->level($DEBUG); } if (Biber::Config->getoption('trace')) { $logger->trace("\n###########################################################\n", "############# Dump of initial config object: ##############\n", Data::Dump::pp($Biber::Config::CONFIG), "\n", "############# Dump of initial biber object: ###############\n", $biber->_stringdump, "\n###########################################################") } # Set the output class. Should be a subclass of Biber::Output::base if (Biber::Config->getoption('output_format') eq 'dot') { # .dot output require Biber::Output::dot; $biber->set_output_obj(Biber::Output::dot->new()); } else { my $package = 'Biber::Output::' . Biber::Config->getoption('output_format'); eval "require $package" or biber_error("Error loading data source package '$package': $@"); $biber->set_output_obj(eval "${package}->new()"); } # Get reference to output object my $biberoutput = $biber->get_output_obj; # Set the output target $biberoutput->set_output_target_file($outfile); # Do all the real work Biber::Config->getoption('tool') ? $biber->prepare_tool : $biber->prepare; if (Biber::Config->getoption('trace')) { $logger->trace("\n###########################################################\n", "############# Dump of final config object: ################\n", Data::Dump::pp($Biber::Config::CONFIG), "\n", "############# Dump of final biber object: #################\n", $biber->_stringdump, "\n###########################################################") } # Write the output to the target $biberoutput->output; $biber->display_problems; exit EXIT_OK; __END__ =pod =encoding utf8 =head1 NAME C - A bibtex replacement for users of biblatex =head1 SYNOPSIS biber [options] file[.bcf] biber [options] --tool Creates "file.bbl" using control file "file.bcf" (".bcf" extension is optional). Normaly use with biblatex requires no options as they are all set in biblatex and passed via the ".bcf" file In "tool" mode (see B<--tool> option), takes a datasource (defaults to "bibtex" datasource) and outputs a copy of the datasource with any command-line or config file options applied. Please run "biber --help" for option details =head1 DESCRIPTION C provides a replacement of the bibtex processor for users of biblatex. =head1 OPTIONS =over 4 =item B<--cache> If running as a PAR::Packer binary, show the cache location and exit. =item B<--clrmacros> Clears any BibTeX macros (@STRING) between BibLaTeX refsections. This prevents BibTeX warnings about macro redefinitions if you are using the same datasource several times for different refsections. =item B<--collate|-C> Sort with C instead of the built-in sort function. This is the default. =item B<--collate_options|-c [options]> Options to pass to the C object used for sorting (default is 'level => "4", variable => "non-ignorable"'). See C for details. =item B<--configfile|-g [file]> Use F as configuration file for C. The default is the first file found among F in the current directory, C<$HOME/.biber.conf>, or else the output of C. In tool mode, (B<--tool>) the F installed with Biber is always used to set defaults before potentially overriding the defaults with a user-defined config specified with this option. Use the B<--tool-config> option to view the location of the default tool mode config file. =item B<--convert_control> Converts the F<.bcf> control file into html using an XSLT transform. Can be useful for debugging. File is named by appending C<.html> to F<.bcf> file. =item B<--decodecharsset=[recode set name]> The set of characters included in the conversion routine when decoding LaTeX macros into UTF-8 (which happens when B<--bblencoding|-E> is set to UTF-8). Set to "full" to try harder with a much larger set or "base" to use a smaller basic set. Default is "base". You may want to try "full" if you have less common UTF-8 characters in your data source. The recode sets are defined in the reencoding data file which can be customised. See the --recodedata option and the PDF manual. =item B<--debug|-D> Turn on debugging for C. =item B<--dot_include=section,field,xdata,crossref,xref,related> Specifies the element to include in GraphViz DOT output format if the output format is 'dot'. You can also choose to display crossref, xref, xdata and/or related entry connections. The default if not specified is C<--dot_include=section,xdata,crossref,xref>. =item B<--fastsort|-f> Use Perl's sort instead of C for sorting. Also uses OS locale definitions (which may be broken for some languages ...). =item B<--fixinits> Try to fix broken multiple initials when they have no space between them in BibTeX data sources. That is, "A.B. Clarke" becomes "A. B. Clarke" before name parsing. This can slightly mess up things like "{U.K. Government}" and other esoteric cases. =item B<--help|-h> Show this help message. =item B<--input_encoding|-e [encoding]> Specify the encoding of the data source file(s). Default is "UTF-8" Normally it's not necessary to set this as it's passed via the .bcf file from biblatex's setting of the same name. See "perldoc Encode::Supported" for a list of supported encodings. The legacy option B<--bibencoding> is supported as an alias. =item B<--input_format=bibtex|biblatexml> Biber input format. This option only means something in tool mode (see B option) since normally the input format of a data source is specified in the F<.bcf> file and therefore from the B<\addbibresouce> macro in BibLaTeX. The default value when in tool mode is 'bibtex' =item B<--logfile [file]> Use F as the name of the logfile. =item B<--listsep=[sep]> Use F as the separator for BibTeX data source list fields. Defaults to BibTeX's usual 'and'. =item B<--mincrossrefs|-m [number]> Set threshold for crossrefs. =item B<--mssplit=[string]> Character used to split bibtex data source field names into field/form/language subfields when using multiscript features. Defaults to underscore (ASCII 95). =item B<--namesep=[sep]> Use F as the separator for BibTeX data source name fields. Defaults to BibTeX's usual 'and'. =item B<--noconf> Don't look for a configfile. =item B<--nodieonerror> Don't exit on errors, just log and continue as far as possible. This can be useful if the error is something from, for example, the underlying BibTeX parsing C library which can complain about parsing errors which can be ignored. =item B<--nolog> Do not write any logfile. =item B<--nostdmacros> Don't automatically define any standard macros like month abbreviations. If you also define these yourself, this option can be used to suppress macro redefinition warnings. =item B<--onlylog> Do not write any message to screen. =item B<--others_string=[string]> Use F as the final name in a name field which implies "et al". Defaults to BibTeX's usual 'others'. =item B<--output_align> Align field values in neat columns in output. Effect depends on the output format. Default is true. The legacy option B<--tool_align> is supported as an alias. =item B<--output_directory [directory]> Files (F<.bbl> and F<.blg>) are output to directory F instead of the current directory. Input files are also looked for in F before current directory. =item B<--output_encoding|-E [encoding]> Specify the encoding of the output C<.bbl> file. Default is "UTF-8". Normally it's not necessary to set this as it's passed via biblatex from the inputenc package setting. See C for a list of supported encodings. The legacy option B<--bblencoding> is supported as an alias. =item B<--output_indent=[num]> Indentation for body of entries in output. Effect depends on the output format. Defaults to 2. The legacy option B<--tool_indent> is supported as an alias. =item B<--output_fieldcase=upper|lower|title> Case for field names output. Effect depends on the output format. Defaults to 'upper'. The legacy option B<--tool_fieldcase> is supported as an alias. =item B<--output_file|-O [file]> Output to F instead of F F is relative to B<--output_directory>, if set (absolute paths in this case are stripped to filename only). F can be absolute if B<--output_directory> is not set. The legacy option B<--outfile> is supported as an alias. =item B<--output_format=dot|bibtex|biblatexml|bbl> Biber output format. Default if not specified is of course, F. Use F to output a GraphViz DOT file instead of F<.bbl>. This is a directed graph of the bibliography data showing entries and, as requested, sections and fields. You must process this file with C, e.g. C to render the graph. See the B<--dot_include> option to select what is included in the DOT output. C and C are only supported in (and only make sense in) C mode (see B<--tool> option) The legacy option B<--outformat> is supported as an alias. =item B<--output_macro_fields=[field1, ... fieldn]> A comma-separated list of field names whose values are, on output, treated as BibTeX macros. Effectively this means that they are not wrapped in braces. Effect depends on the output format. The legacy option B<--tool_macro_fields> is supported as an alias. =item B<--output_resolve> Whether to resolve aliases and inheritance (XDATA, CROSSREF etc.) in tool mode. Defaults to 'false'. The legacy option B<--tool_resolve> is supported as an alias. =item B<--output_safechars> Try to convert UTF-8 chars into LaTeX macros when writing the output. This can prevent unknown char errors when using PDFLaTeX and inputenc as this doesn't understand all of UTF-8. Note, it is better to switch to XeTeX or LuaTeX to avoid this situation. By default uses the --output_safecharsset "base" set of characters. The legacy option B<--bblsafechars> is supported as an alias. =item B<--output_safecharsset=[recode set name]> The set of characters included in the conversion routine for --output_safechars. Set to "full" to try harder with a much larger set or "base" to use a basic set. Default is "base" which is fine for most use cases. You may need to load more macro packages to deal with the results of "full" (Dings, Greek characters, special symbols etc.). The recode sets are defined in the reencoding data file which can be customised. See the --recodedata option and the PDF manual. The legacy option B<--bblsafecharsset> is supported as an alias. =item B<--quiet|-q> Log only errors. If this option is used more than once, don't even log errors. =item B<--recodedata=[file]> The data file to use for the reencoding between UTF-8 and LaTeX macros. It defines the sets specified with the --output_safecharsset and --decodecharsset options. It defaults to F in the same directory as Biber's F module. See the PDF documentation for the format of this file. If this option is used, then F should be somewhere C can find it. =item B<--sortcase=true|false> Case-sensitive sorting (default is true). =item B<--sortfirstinits=true|false> When sorting names, use only the first name initials, not full first name. Some people expect the biblatex B option to do this but it needs to be a separate option in case users, for example, need to show only initials but sort with full first names (default is false). =item B<--sortlocale|-l [locale]> Set the locale to be used for sorting. With default sorting (B<--collate|-C>), the locale is used to add CLDR tailoring to the sort (if available for the locale). With B<--fastsort|-f> this sets the OS locale for sorting. =item B<--sortupper=true|false> Whether to sort uppercase before lowercase when using default sorting (B<--collate|-C>). When using B<--fastsort|-f>, your OS collation locale determines this and this option is ignored (default is true). =item B<--ssl-nointernalca> Don't try to use the default Mozilla CA certificates when using HTTPS to fetch remote data. This assumes that the user will set one of the perl LWP::UserAgent module environment variables to find the CA certs. =item B<--ssl-noverify-host> Turn off host verification when using HTTPS to fetch remote data sources. You may need this if the SSL certificate is self-signed for example. =item B<--tool> Run in tool mode. This mode is datasource centric rather than document centrix. biber reads a datasource (and a config file if specified), applies the command-line and config file options to the datasource and writes a new datasource. Essentially, this allows you to change your data sources using biber's transformation options (such as source mapping, sorting etc.) =item B<--tool_config> Show the location of the default tool mode config file and exit. Useful when you need to copy this file and customise it. =item B<--trace|T> Turn on tracing. Also turns on B<--debug|d> and additionally provides a lot of low-level tracing information in the log. =item B<-u> Alias for B<--input_encoding=UTF-8> =item B<-U> Alias for B<--output_encoding=UTF-8> =item B<--validate_config> Schema validate the biber config file. =item B<--validate_control> Schema validate the F<.bcf> biblatex control file. =item B<--validate_datamodel|-V> Validate the data against a data model. =item B<--version|-v> Display version number. =item B<--wraplines|-w> Wrap lines in the F<.bbl> file. =back =head1 AUTHOR François Charette, CE<10> Philip Kime, C =head1 BUGS & DOCUMENTATION To see the full documentation, run B or get the F manual from SourceForge. Please report any bugs or feature requests on our sourceforge tracker at L. =head1 COPYRIGHT & LICENSE Copyright 2009-2013 François Charette and Philip Kime, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. =cut