summaryrefslogtreecommitdiffstats
path: root/src/exporters/plaintextexporter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/exporters/plaintextexporter.cpp')
-rw-r--r--src/exporters/plaintextexporter.cpp176
1 files changed, 176 insertions, 0 deletions
diff --git a/src/exporters/plaintextexporter.cpp b/src/exporters/plaintextexporter.cpp
new file mode 100644
index 0000000..db9902e
--- /dev/null
+++ b/src/exporters/plaintextexporter.cpp
@@ -0,0 +1,176 @@
+/***************************************************************************
+* Copyright (C) 2005 by *
+* Jason Kivlighn ([email protected]) *
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+***************************************************************************/
+
+#include "plaintextexporter.h"
+
+#include <tdeconfig.h>
+#include <tdeglobal.h>
+#include <tdelocale.h>
+
+#include "backends/recipedb.h"
+
+PlainTextExporter::PlainTextExporter( const TQString& filename, const TQString& format ) :
+ BaseExporter( filename, format )
+{}
+
+
+PlainTextExporter::~PlainTextExporter()
+{}
+
+int PlainTextExporter::supportedItems() const
+{
+ return RecipeDB::All ^ RecipeDB::Photo;
+}
+
+TQString PlainTextExporter::generateIngredient( const IngredientData &ing, MixedNumber::Format number_format )
+{
+ TDEConfig *config = TDEGlobal::config();
+
+ TQString content;
+
+ TQString amount_str = MixedNumber( ing.amount ).toString( number_format );
+
+ if ( ing.amount_offset > 0 )
+ amount_str += "-"+MixedNumber( ing.amount + ing.amount_offset ).toString( number_format );
+ else if ( ing.amount <= 1e-10 )
+ amount_str = "";
+
+ content += amount_str;
+ if ( !amount_str.isEmpty() )
+ content += " ";
+
+ TQString unit_str = ing.units.determineName( ing.amount + ing.amount_offset, config->readBoolEntry("AbbreviateUnits") );
+
+ content += unit_str;
+ if ( !unit_str.isEmpty() )
+ content += " ";
+
+ content += ing.name;
+
+ if ( ing.prepMethodList.count() > 0 )
+ content += "; "+ing.prepMethodList.join(", ");
+
+ return content;
+}
+
+
+TQString PlainTextExporter::createContent( const RecipeList& recipes )
+{
+ TDEConfig *config = TDEGlobal::config();
+ config->setGroup( "Formatting" );
+
+ MixedNumber::Format number_format = ( config->readBoolEntry( "Fraction" ) ) ? MixedNumber::MixedNumberFormat : MixedNumber::DecimalFormat;
+
+ TQString content;
+
+ RecipeList::const_iterator recipe_it;
+ for ( recipe_it = recipes.begin(); recipe_it != recipes.end(); ++recipe_it ) {
+ content += ( *recipe_it ).title + "\n\n";
+
+ if ( ( *recipe_it ).authorList.count() > 0 ) {
+ content += TQString("%1: ").arg(i18n("Authors"));
+ content += ( *recipe_it ).authorList.join(", ");
+ content += "\n";
+ }
+
+ if ( ( *recipe_it ).categoryList.count() > 0 ) {
+ content += TQString("%1: ").arg(i18n("Categories"));
+ content += ( *recipe_it ).categoryList.join(", ");
+ content += "\n";
+ }
+
+ if ( ( *recipe_it ).yield.amount > 0 ) {
+ content += TQString("%1: ").arg(i18n("Yields"));
+ content += ( *recipe_it ).yield.toString();
+ content += "\n";
+ }
+
+ if ( !( *recipe_it ).prepTime.isNull() ) {
+ content += TQString("%1: ").arg(i18n("Preparation Time"));
+ content += ( *recipe_it ).prepTime.toString( "hh:mm" );
+ content += "\n";
+ }
+
+ content += "\n";
+
+ IngredientList list_copy = ( *recipe_it ).ingList;
+ for ( IngredientList group_list = list_copy.firstGroup(); group_list.count() != 0; group_list = list_copy.nextGroup() ) {
+ TQString group = group_list[ 0 ].group; //just use the first's name... they're all the same
+ if ( !group.isEmpty() )
+ content += group + ":\n";
+
+ for ( IngredientList::const_iterator ing_it = group_list.begin(); ing_it != group_list.end(); ++ing_it ) {
+ if ( !group.isEmpty() )
+ content += " ";
+
+ content += generateIngredient(*ing_it,number_format);
+
+ if ( (*ing_it).substitutes.count() > 0 )
+ content += ", "+i18n("or");
+ content += "\n";
+
+ for ( TQValueList<IngredientData>::const_iterator sub_it = (*ing_it).substitutes.begin(); sub_it != (*ing_it).substitutes.end(); ) {
+ if ( !group.isEmpty() )
+ content += " ";
+
+ content += generateIngredient(*sub_it,number_format);
+ sub_it++;
+ if ( sub_it != (*ing_it).substitutes.end() )
+ content += ", "+i18n("or");
+ content += "\n";
+ }
+ }
+ }
+
+ content += "\n";
+
+ /// @todo add ingredient properties
+
+ content += ( *recipe_it ).instructions;
+
+ content += "\n\n";
+
+ if ( (*recipe_it).ratingList.count() > 0 )
+ content += "----------"+i18n("Ratings")+"----------\n";
+
+ for ( RatingList::const_iterator rating_it = (*recipe_it).ratingList.begin(); rating_it != (*recipe_it).ratingList.end(); ++rating_it ) {
+ if ( !( *rating_it ).rater.isEmpty() )
+ content += " "+( *rating_it ).rater+"\n";
+
+ if ( (*rating_it).ratingCriteriaList.size() > 0 )
+ content += "\n";
+
+ for ( RatingCriteriaList::const_iterator rc_it = (*rating_it).ratingCriteriaList.begin(); rc_it != (*rating_it).ratingCriteriaList.end(); ++rc_it ) {
+ //FIXME: This is an ugly hack, but I don't know how else to be i18n friendly (if this is even that)
+ // and still be able to display the amount as a fraction
+ TQString starsTrans = i18n("1 star","%n stars",tqRound((*rc_it).stars));
+ starsTrans.replace(TQString::number(tqRound((*rc_it).stars)),MixedNumber((*rc_it).stars).toString());
+
+ content += " "+(*rc_it).name+": "+starsTrans+"\n";
+ }
+
+ if ( (*rating_it).ratingCriteriaList.size() > 0 )
+ content += "\n";
+
+ if ( !( *rating_it ).comment.isEmpty() )
+ content += " "+( *rating_it ).comment+"\n";
+
+ content += "\n";
+ }
+
+ if ( (*recipe_it).ratingList.size() > 0 )
+ content += "\n";
+
+ content += "-----\n\n"; //end of recipe indicator
+ }
+
+ return content;
+}
+