# Hebrew translation for Redmine # Initiated by Dotan Nahum (dipidi@gmail.com) # Jul 2010 - Updated by Orgad Shaneh (orgads@gmail.com) he: direction: rtl date: formats: default: "%d/%m/%Y" short: "%d/%m" long: "%d/%m/%Y" only_day: "%e" day_names: [ראשון, שני, שלישי, רביעי, חמישי, שישי, שבת] abbr_day_names: ["א'", "ב'", "ג'", "ד'", "ה'", "ו'", "ש'"] month_names: [~, ינואר, פברואר, מרץ, אפריל, מאי, יוני, יולי, אוגוסט, ספטמבר, אוקטובר, נובמבר, דצמבר] abbr_month_names: [~, יאנ, פבר, מרץ, אפר, מאי, יונ, יול, אוג, ספט, אוק, נוב, דצמ] order: - :day - :month - :year time: formats: default: "%a %d/%m/%Y %H:%M:%S" time: "%H:%M" short: "%d %b %H:%M" long: "%B %d, %Y %H:%M" only_second: "%S" datetime: formats: default: "%d-%m-%YT%H:%M:%S%Z" am: 'am' pm: 'pm' datetime: distance_in_words: half_a_minute: 'חצי דקה' less_than_x_seconds: zero: 'פחות משניה' one: 'פחות משניה' other: 'פחות מ־%{count} שניות' x_seconds: one: 'שניה אחת' other: '%{count} שניות' less_than_x_minutes: zero: 'פחות מדקה אחת' one: 'פחות מדקה אחת' other: 'פחות מ־%{count} דקות' x_minutes: one: 'דקה אחת' other: '%{count} דקות' about_x_hours: one: 'בערך שעה אחת' other: 'בערך %{count} שעות' x_hours: one: "1 שעה" other: "%{count} שעות" x_days: one: 'יום אחד' other: '%{count} ימים' about_x_months: one: 'בערך חודש אחד' other: 'בערך %{count} חודשים' x_months: one: 'חודש אחד' other: '%{count} חודשים' about_x_years: one: 'בערך שנה אחת' other: 'בערך %{count} שנים' over_x_years: one: 'מעל שנה אחת' other: 'מעל %{count} שנים' almost_x_years: one: "כמעט שנה" other: "כמעט %{count} שנים" number: format: precision: 3 separator: '.' delimiter: ',' currency: format: unit: 'ש"ח' precision: 2 format: '%u %n' human: storage_units: format: "%n %u" units: byte: one: "בייט" other: "בתים" kb: "KB" mb: "MB" gb: "GB" tb: "TB" support: array: sentence_connector: "וגם" skip_last_comma: true activerecord: errors: template: header: one: "1 error prohibited this %{model} from being saved" other: "%{count} errors prohibited this %{model} from being saved" messages: inclusion: "לא נכלל ברשימה" exclusion: "לא זמין" invalid: "לא ולידי" confirmation: "לא תואם לאישור" accepted: "חייב באישור" empty: "חייב להכלל" blank: "חייב להכלל" too_long: "ארוך מדי (לא יותר מ־%{count} תוים)" too_short: "קצר מדי (לא יותר מ־%{count} תוים)" wrong_length: "לא באורך הנכון (חייב להיות %{count} תוים)" taken: "לא זמין" not_a_number: "הוא לא מספר" greater_than: "חייב להיות גדול מ־%{count}" greater_than_or_equal_to: "חייב להיות גדול או שווה ל־%{count}" equal_to: "חייב להיות שווה ל־%{count}" less_than: "חייב להיות קטן מ־%{count}" less_than_or_equal_to: "חייב להיות קטן או שווה ל־%{count}" odd: "חייב להיות אי זוגי" even: "חייב להיות זוגי" greater_than_start_date: "חייב להיות מאוחר יותר מתאריך ההתחלה" not_same_project: "לא שייך לאותו הפרויקט" circular_dependency: "קשר זה יצור תלות מעגלית" cant_link_an_issue_with_a_descendant: "לא ניתן לקשר נושא לתת־משימה שלו" earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues" not_a_regexp: "is not a valid regular expression" open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task" must_contain_uppercase: "must contain uppercase letters (A-Z)" must_contain_lowercase: "must contain lowercase letters (a-z)" must_contain_digits: "must contain digits (0-9)" must_contain_special_chars: "must contain special characters (!, $, %, ...)" actionview_instancetag_blank_option: בחר בבקשה general_text_No: 'לא' general_text_Yes: 'כן' general_text_no: 'לא' general_text_yes: 'כן' general_lang_name: 'Hebrew (עברית)' general_csv_separator: ',' general_csv_decimal_separator: '.' general_csv_encoding: ISO-8859-8 general_pdf_fontname: freesans general_pdf_monospaced_fontname: freemono general_first_day_of_week: '7' notice_account_updated: החשבון עודכן בהצלחה! notice_account_invalid_credentials: שם משתמש או סיסמה שגויים notice_account_password_updated: הסיסמה עודכנה בהצלחה! notice_account_wrong_password: סיסמה שגויה notice_account_register_done: החשבון נוצר בהצלחה. להפעלת החשבון לחץ על הקישור שנשלח לדוא"ל שלך. notice_account_unknown_email: משתמש לא מוכר. notice_can_t_change_password: החשבון הזה משתמש במקור הזדהות חיצוני. שינוי סיסמה הינו בילתי אפשר notice_account_lost_email_sent: דוא"ל עם הוראות לבחירת סיסמה חדשה נשלח אליך. notice_account_activated: חשבונך הופעל. אתה יכול להתחבר כעת. notice_successful_create: יצירה מוצלחת. notice_successful_update: עידכון מוצלח. notice_successful_delete: מחיקה מוצלחת. notice_successful_connection: חיבור מוצלח. notice_file_not_found: הדף שאתה מנסה לגשת אליו אינו קיים או שהוסר. notice_locking_conflict: המידע עודכן על ידי משתמש אחר. notice_not_authorized: אינך מורשה לראות דף זה. notice_not_authorized_archived_project: הפרויקט שאתה מנסה לגשת אליו נמצא בארכיון. notice_email_sent: "דואל נשלח לכתובת %{value}" notice_email_error: "ארעה שגיאה בעת שליחת הדואל (%{value})" notice_feeds_access_key_reseted: מפתח ה־Atom שלך אופס. notice_api_access_key_reseted: מפתח הגישה שלך ל־API אופס. notice_failed_to_save_issues: "נכשרת בשמירת %{count} נושאים ב %{total} נבחרו: %{ids}." notice_failed_to_save_members: "כשלון בשמירת חבר(ים): %{errors}." notice_no_issue_selected: "לא נבחר אף נושא! בחר בבקשה את הנושאים שברצונך לערוך." notice_account_pending: "החשבון שלך נוצר ועתה מחכה לאישור מנהל המערכת." notice_default_data_loaded: אפשרויות ברירת מחדל מופעלות. notice_unable_delete_version: לא ניתן למחוק גירסה notice_unable_delete_time_entry: לא ניתן למחוק רשומת זמן. notice_issue_done_ratios_updated: אחוזי התקדמות לנושא עודכנו. error_can_t_load_default_data: "אפשרויות ברירת המחדל לא הצליחו להיטען: %{value}" error_scm_not_found: כניסה ו\או מהדורה אינם קיימים במאגר. error_scm_command_failed: "ארעה שגיאה בעת ניסון גישה למאגר: %{value}" error_scm_annotate: "הכניסה לא קיימת או שלא ניתן לתאר אותה." error_issue_not_found_in_project: 'הנושאים לא נמצאו או אינם שיכים לפרויקט' error_no_tracker_in_project: לא הוגדר סיווג לפרויקט זה. נא בדוק את הגדרות הפרויקט. error_no_default_issue_status: לא מוגדר מצב ברירת מחדל לנושאים. נא בדוק את התצורה ("ניהול -> מצבי נושא"). error_can_not_delete_custom_field: לא ניתן למחוק שדה מותאם אישית error_can_not_delete_tracker: קיימים נושאים בסיווג זה, ולא ניתן למחוק אותו. error_can_not_remove_role: תפקיד זה נמצא בשימוש, ולא ניתן למחוק אותו. error_can_not_reopen_issue_on_closed_version: לא ניתן לפתוח מחדש נושא שמשויך לגירסה סגורה error_can_not_archive_project: לא ניתן לארכב פרויקט זה error_issue_done_ratios_not_updated: אחוז התקדמות לנושא לא עודכן. error_workflow_copy_source: נא בחר סיווג או תפקיד מקור error_workflow_copy_target: נא בחר תפקיד(ים) וסיווג(ים) error_unable_delete_issue_status: לא ניתן למחוק מצב נושא (%{value}) error_unable_to_connect: לא ניתן להתחבר (%{value}) warning_attachments_not_saved: "כשלון בשמירת %{count} קבצים." mail_subject_lost_password: "סיסמת ה־%{value} שלך" mail_body_lost_password: 'לשינו סיסמת ה־Redmine שלך, לחץ על הקישור הבא:' mail_subject_register: "הפעלת חשבון %{value}" mail_body_register: 'להפעלת חשבון ה־Redmine שלך, לחץ על הקישור הבא:' mail_body_account_information_external: "אתה יכול להשתמש בחשבון %{value} כדי להתחבר" mail_body_account_information: פרטי החשבון שלך mail_subject_account_activation_request: "בקשת הפעלה לחשבון %{value}" mail_body_account_activation_request: "משתמש חדש (%{value}) נרשם. החשבון שלו מחכה לאישור שלך:" mail_subject_reminder: "%{count} נושאים מיועדים להגשה בימים הקרובים (%{days})" mail_body_reminder: "%{count} נושאים שמיועדים אליך מיועדים להגשה בתוך %{days} ימים:" mail_subject_wiki_content_added: "דף ה־wiki ‏'%{id}' נוסף" mail_body_wiki_content_added: דף ה־wiki ‏'%{id}' נוסף ע"י %{author}. mail_subject_wiki_content_updated: "דף ה־wiki ‏'%{id}' עודכן" mail_body_wiki_content_updated: דף ה־wiki ‏'%{id}' עודכן ע"י %{author}. field_name: שם field_description: תיאור field_summary: תקציר field_is_required: נדרש field_firstname: שם פרטי field_lastname: שם משפחה field_mail: דוא"ל field_filename: קובץ field_filesize: גודל field_downloads: הורדות field_author: כותב field_created_on: נוצר field_updated_on: עודכן field_field_format: פורמט field_is_for_all: לכל הפרויקטים field_possible_values: ערכים אפשריים field_regexp: ביטוי רגיל field_min_length: אורך מינימאלי field_max_length: אורך מקסימאלי field_value: ערך field_category: קטגוריה field_title: כותרת field_project: פרויקט field_issue: נושא field_status: מצב field_notes: הערות field_is_closed: נושא סגור field_is_default: ערך ברירת מחדל field_tracker: סיווג field_subject: שם נושא field_due_date: תאריך סיום field_assigned_to: אחראי field_priority: עדיפות field_fixed_version: גירסת יעד field_user: מתשמש field_principal: מנהל field_role: תפקיד field_homepage: דף הבית field_is_public: פומבי field_parent: תת פרויקט של field_is_in_roadmap: נושאים המוצגים במפת הדרכים field_login: שם משתמש field_mail_notification: הודעות דוא"ל field_admin: ניהול field_last_login_on: התחברות אחרונה field_language: שפה field_effective_date: תאריך field_password: סיסמה field_new_password: סיסמה חדשה field_password_confirmation: אישור field_version: גירסה field_type: סוג field_host: שרת field_port: פורט field_account: חשבון field_base_dn: בסיס DN field_attr_login: תכונת התחברות field_attr_firstname: תכונת שם פרטים field_attr_lastname: תכונת שם משפחה field_attr_mail: תכונת דוא"ל field_onthefly: יצירת משתמשים זריזה field_start_date: תאריך התחלה field_done_ratio: "% גמור" field_auth_source: מקור הזדהות field_hide_mail: החבא את כתובת הדוא"ל שלי field_comments: הערות field_url: URL field_start_page: דף התחלתי field_subproject: תת־פרויקט field_hours: שעות field_activity: פעילות field_spent_on: תאריך field_identifier: מזהה field_is_filter: משמש כמסנן field_issue_to: נושאים קשורים field_delay: עיקוב field_assignable: ניתן להקצות נושאים לתפקיד זה field_redirect_existing_links: העבר קישורים קיימים field_estimated_hours: זמן משוער field_column_names: עמודות field_time_entries: רישום זמנים field_time_zone: איזור זמן field_searchable: ניתן לחיפוש field_default_value: ערך ברירת מחדל field_comments_sorting: הצג הערות field_parent_title: דף אב field_editable: ניתן לעריכה field_watcher: צופה field_identity_url: כתובת OpenID field_content: תוכן field_group_by: קבץ את התוצאות לפי field_sharing: שיתוף field_parent_issue: משימת אב field_text: שדה טקסט setting_app_title: כותרת ישום setting_welcome_text: טקסט "ברוך הבא" setting_default_language: שפת ברירת מחדל setting_login_required: דרושה הזדהות setting_self_registration: אפשר הרשמה עצמית setting_attachment_max_size: גודל דבוקה מקסימאלי setting_issues_export_limit: גבול יצוא נושאים setting_mail_from: כתובת שליחת דוא"ל setting_bcc_recipients: מוסתר (bcc) setting_plain_text_mail: טקסט פשוט בלבד (ללא HTML) setting_host_name: שם שרת setting_text_formatting: עיצוב טקסט setting_wiki_compression: כיווץ היסטורית wiki setting_feeds_limit: גבול תוכן הזנות setting_default_projects_public: פרויקטים חדשים הינם פומביים כברירת מחדל setting_autofetch_changesets: משיכה אוטומטית של שינויים setting_sys_api_enabled: אפשר שירות רשת לניהול המאגר setting_commit_ref_keywords: מילות מפתח מקשרות setting_commit_fix_keywords: מילות מפתח מתקנות setting_autologin: התחברות אוטומטית setting_date_format: פורמט תאריך setting_time_format: פורמט זמן setting_cross_project_issue_relations: הרשה קישור נושאים בין פרויקטים setting_issue_list_default_columns: עמודות ברירת מחדל המוצגות ברשימת הנושאים setting_emails_footer: תחתית דוא"ל setting_protocol: פרוטוקול setting_per_page_options: אפשרויות אוביקטים לפי דף setting_user_format: פורמט הצגת משתמשים setting_activity_days_default: ימים המוצגים על פעילות הפרויקט setting_display_subprojects_issues: הצג נושאים של תתי־פרויקטים כברירת מחדל setting_enabled_scm: אפשר ניהול תצורה setting_mail_handler_body_delimiters: חתוך כתובות דואר אחרי אחת משורות אלה setting_mail_handler_api_enabled: אפשר שירות רשת לדואר נכנס setting_mail_handler_api_key: מפתח API setting_sequential_project_identifiers: השתמש במספרים עוקבים למזהי פרויקט setting_gravatar_enabled: שימוש בצלמיות משתמשים מ־Gravatar setting_gravatar_default: תמונת Gravatar ברירת מחדל setting_diff_max_lines_displayed: מספר מירבי של שורות בתצוגת שינויים setting_file_max_size_displayed: גודל מירבי של מלל המוצג בתוך השורה setting_repository_log_display_limit: מספר מירבי של מהדורות המוצגות ביומן קובץ setting_openid: אפשר התחברות ורישום באמצעות OpenID setting_password_min_length: אורך סיסמה מינימאלי setting_new_project_user_role_id: התפקיד שמוגדר למשתמש פשוט אשר יוצר פרויקט setting_default_projects_modules: מודולים מאופשרים בברירת מחדל עבור פרויקטים חדשים setting_issue_done_ratio: חשב אחוז התקדמות בנושא עם setting_issue_done_ratio_issue_field: השתמש בשדה הנושא setting_issue_done_ratio_issue_status: השתמש במצב הנושא setting_start_of_week: השבוע מתחיל ביום setting_rest_api_enabled: אפשר שירות רשת REST setting_cache_formatted_text: שמור טקסט מעוצב במטמון setting_default_notification_option: אפשרות התראה ברירת־מחדל permission_add_project: יצירת פרויקט permission_add_subprojects: יצירת תתי־פרויקט permission_edit_project: עריכת פרויקט permission_select_project_modules: בחירת מודולי פרויקט permission_manage_members: ניהול חברים permission_manage_project_activities: נהל פעילויות פרויקט permission_manage_versions: ניהול גירסאות permission_manage_categories: ניהול קטגוריות נושאים permission_view_issues: צפיה בנושאים permission_add_issues: הוספת נושא permission_edit_issues: עריכת נושאים permission_manage_issue_relations: ניהול קשרים בין נושאים permission_add_issue_notes: הוספת הערות לנושאים permission_edit_issue_notes: עריכת רשימות permission_edit_own_issue_notes: עריכת הערות של עצמו permission_delete_issues: מחיקת נושאים permission_manage_public_queries: ניהול שאילתות פומביות permission_save_queries: שמירת שאילתות permission_view_gantt: צפיה בגאנט permission_view_calendar: צפיה בלוח השנה permission_view_issue_watchers: צפיה ברשימת צופים permission_add_issue_watchers: הוספת צופים permission_delete_issue_watchers: הסרת צופים permission_log_time: תיעוד זמן שהושקע permission_view_time_entries: צפיה ברישום זמנים permission_edit_time_entries: עריכת רישום זמנים permission_edit_own_time_entries: עריכת רישום הזמנים של עצמו permission_manage_news: ניהול חדשות permission_comment_news: תגובה לחדשות permission_view_documents: צפיה במסמכים permission_manage_files: ניהול קבצים permission_view_files: צפיה בקבצים permission_manage_wiki: ניהול wiki permission_rename_wiki_pages: שינוי שם של דפי wiki permission_delete_wiki_pages: מחיקת דפי wiki permission_view_wiki_pages: צפיה ב־wiki permission_view_wiki_edits: צפיה בהיסטורית wiki permission_edit_wiki_pages: עריכת דפי wiki permission_delete_wiki_pages_attachments: מחיקת דבוקות permission_protect_wiki_pages: הגנה על כל דפי wiki permission_manage_repository: ניהול מאגר permission_browse_repository: סיור במאגר permission_view_changesets: צפיה בסדרות שינויים permission_commit_access: אישור הפקדות permission_manage_boards: ניהול לוחות permission_view_messages: צפיה בהודעות permission_add_messages: הצבת הודעות permission_edit_messages: עריכת הודעות permission_edit_own_messages: עריכת הודעות של עצמו permission_delete_messages: מחיקת הודעות permission_delete_own_messages: מחיקת הודעות של עצמו permission_export_wiki_pages: יצא דפי wiki permission_manage_subtasks: נהל תתי־משימות project_module_issue_tracking: מעקב נושאים project_module_time_tracking: מעקב אחר זמנים project_module_news: חדשות project_module_documents: מסמכים project_module_files: קבצים project_module_wiki: Wiki project_module_repository: מאגר project_module_boards: לוחות project_module_calendar: לוח שנה project_module_gantt: גאנט label_user: משתמש label_user_plural: משתמשים label_user_new: משתמש חדש label_user_anonymous: אלמוני label_project: פרויקט label_project_new: פרויקט חדש label_project_plural: פרויקטים label_x_projects: zero: ללא פרויקטים one: פרויקט אחד other: "%{count} פרויקטים" label_project_all: כל הפרויקטים label_project_latest: הפרויקטים החדשים ביותר label_issue: נושא label_issue_new: נושא חדש label_issue_plural: נושאים label_issue_view_all: צפה בכל הנושאים label_issues_by: "נושאים לפי %{value}" label_issue_added: נושא נוסף label_issue_updated: נושא עודכן label_document: מסמך label_document_new: מסמך חדש label_document_plural: מסמכים label_document_added: מסמך נוסף label_role: תפקיד label_role_plural: תפקידים label_role_new: תפקיד חדש label_role_and_permissions: תפקידים והרשאות label_member: חבר label_member_new: חבר חדש label_member_plural: חברים label_tracker: סיווג label_tracker_plural: סיווגים label_tracker_new: סיווג חדש label_workflow: זרימת עבודה label_issue_status: מצב נושא label_issue_status_plural: מצבי נושא label_issue_status_new: מצב חדש label_issue_category: קטגורית נושא label_issue_category_plural: קטגוריות נושא label_issue_category_new: קטגוריה חדשה label_custom_field: שדה אישי label_custom_field_plural: שדות אישיים label_custom_field_new: שדה אישי חדש label_enumerations: אינומרציות label_enumeration_new: ערך חדש label_information: מידע label_information_plural: מידע label_register: הרשמה label_login_with_open_id_option: או התחבר
/*
 * Copyright 1999-2005 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* $Id$ */

package org.apache.fop.apps;

// Java
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

// avalon configuration
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;

// commons logging
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

// FOP
import org.apache.fop.fo.ElementMapping;
import org.apache.fop.fo.FOEventHandler;
import org.apache.fop.layoutmgr.LayoutManagerMaker;
import org.apache.fop.pdf.PDFEncryptionParams;
import org.apache.fop.render.Renderer;

/**
 * The User Agent for fo.
 * This user agent is used by the processing to obtain user configurable
 * options.
 * <p>
 * Renderer specific extensions (that do not produce normal areas on
 * the output) will be done like so:
 * <br>
 * The extension will create an area, custom if necessary
 * <br>
 * this area will be added to the user agent with a key
 * <br>
 * the renderer will know keys for particular extensions
 * <br>
 * eg. bookmarks will be held in a special hierarchical area representing
 * the title and bookmark structure
 * <br>
 * These areas may contain resolvable areas that will be processed
 * with other resolvable areas
 */
public class FOUserAgent {

    /** Defines the default resolution (72dpi) for FOP */
    public static final float DEFAULT_PX2MM = (25.4f / 72); //dpi (=25.4/dpi) 
    
    /** Map containing various default values */
    public Map defaults = new java.util.HashMap();
    /** Map containing XML handlers for various document types */
    public Map handlers = new java.util.HashMap();
    
    private String baseURL;
    private PDFEncryptionParams pdfEncryptionParams;
    private float px2mm = DEFAULT_PX2MM;
    private HashMap rendererOptions = new java.util.HashMap();
    private InputHandler inputHandler = null;
    private File outputFile = null;
    private Renderer rendererOverride = null;
    private FOEventHandler foEventHandlerOverride = null;
    private LayoutManagerMaker lmMakerOverride = null;
    /* user configuration */
    private Configuration userConfig = null;
    private Log log = LogFactory.getLog("FOP");
    
    /* FOP has the ability, for some FO's, to continue processing even if the
     * input XSL violates that FO's content model.  This is the default  
     * behavior for FOP.  However, this flag, if set, provides the user the
     * ability for FOP to halt on all content model violations if desired.   
     */ 
    private boolean strictValidation = true;

    /* Additional fo.ElementMapping subclasses set by user */
    private ArrayList additionalElementMappings = null;

    /** Producer:  Metadata element for the system/software that produces
     * the document. (Some renderers can store this in the document.)
     */
    protected String producer = "Apache FOP Version " + Fop.getVersion();

    /** Creator:  Metadata element for the user that created the
     * document. (Some renderers can store this in the document.)
     */
    protected String creator = null;

    /** Creation Date:  Override of the date the document was created. 
     * (Some renderers can store this in the document.)
     */
    protected Date creationDate = null;
    
    /** Author of the content of the document. */
    protected String author = null;
    /** Title of the document. */
    protected String title = null;
    /** Set of keywords applicable to this document. */
    protected String keywords = null;
    
    /**
     * Sets the InputHandler object for this process
     * @param inputHandler holding input file name information
     */
    public void setInputHandler(InputHandler inputHandler) {
        this.inputHandler = inputHandler;
    }

    /**
     * Returns the apps.InputHandler object created during command-line
     * processing
     * @return InputHandler object
     */
    public InputHandler getInputHandler() {
        return inputHandler;
    }

    /**
     * Add the element mapping with the given class name.
     * @param elementMapping the class name representing the element mapping.
     */
    public void addElementMapping(ElementMapping elementMapping) {
        if (additionalElementMappings == null) {
            additionalElementMappings = new ArrayList();
        }
        additionalElementMappings.add(elementMapping);
    }

    /**
     * Returns the ArrayList of user-added ElementMapping class names
     * @return ArrayList of Strings holding ElementMapping names.
     */
    public ArrayList getAdditionalElementMappings() {
        return additionalElementMappings;
    }

    /**
     * Sets an explicit renderer to use which overrides the one defined by the 
     * render type setting.  
     * @param renderer the Renderer instance to use
     */
    public void setRendererOverride(Renderer renderer) {
        this.rendererOverride = renderer;
    }

    /**
     * Returns the overriding Renderer instance, if any.
     * @return the overriding Renderer or null
     */
    public Renderer getRendererOverride() {
        return rendererOverride;
    }

    /**
     * Sets an explicit FOEventHandler instance which overrides the one
     * defined by the render type setting.  
     * @param handler the FOEventHandler instance
     */
    public void setFOEventHandlerOverride(FOEventHandler handler) {
        this.foEventHandlerOverride = handler;
    }

    /**
     * Returns the overriding FOEventHandler instance, if any.
     * @return the overriding FOEventHandler or null
     */
    public FOEventHandler getFOEventHandlerOverride() {
        return this.foEventHandlerOverride;
    }

    /**
     * Activates strict XSL content model validation for FOP
     * Default is false (FOP will continue processing where it can)
     * @param validateStrictly true to turn on strict validation
     */
    public void setStrictValidation(boolean validateStrictly) {
        this.strictValidation = validateStrictly;
    }

    /**
     * Returns whether FOP is strictly validating input XSL
     * @return true of strict validation turned on, false otherwise
     */
    public boolean validateStrictly() {
        return strictValidation;
    }

    /**
     * Sets an explicit LayoutManagerMaker instance which overrides the one
     * defined by the AreaTreeHandler.
     * @param lmMaker the LayoutManagerMaker instance
     */
    public void setLayoutManagerMakerOverride(LayoutManagerMaker lmMaker) {
        this.lmMakerOverride = lmMaker;
    }

    /**
     * Returns the overriding LayoutManagerMaker instance, if any.
     * @return the overriding LayoutManagerMaker or null
     */
    public LayoutManagerMaker getLayoutManagerMakerOverride() {
        return this.lmMakerOverride;
    }

    /**
     * Sets the producer of the document.  
     * @param producer source of document
     */
    public void setProducer(String producer) {
        this.producer = producer;
    }

    /**
     * Returns the producer of the document
     * @return producer name
     */
    public String getProducer() {
        return producer;
    }

    /**
     * Sets the creator of the document.  
     * @param creator of document
     */
    public void setCreator(String creator) {
        this.creator = creator;
    }

    /**
     * Returns the creator of the document
     * @return creator name
     */
    public String getCreator() {
        return creator;
    }

    /**
     * Sets the creation date of the document.  
     * @param creationDate date of document
     */
    public void setCreationDate(Date creationDate) {
        this.creationDate = creationDate;
    }

    /**
     * Returns the creation date of the document
     * @return creation date of document
     */
    public Date getCreationDate() {
        return creationDate;
    }

    /**
     * Sets the author of the document.  
     * @param author of document
     */
    public void setAuthor(String author) {
        this.author = author;
    }

    /**
     * Returns the author of the document
     * @return author name
     */
    public String getAuthor() {
        return author;
    }

    /**
     * Sets the title of the document. This will override any title coming from
     * an fo:title element.  
     * @param title of document
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     * Returns the title of the document
     * @return title name
     */
    public String getTitle() {
        return title;
    }

    /**
     * Sets the keywords for the document.  
     * @param keywords for the document
     */
    public void setKeywords(String keywords) {
        this.keywords = keywords;
    }

    /**
     * Returns the keywords for the document
     * @return the keywords
     */
    public String getKeywords() {
        return keywords;
    }

    /**
     * Returns the renderer options
     * @return renderer options
     */
    public HashMap getRendererOptions() {
        return rendererOptions;
    }

    /**
     * Set the user configuration.
     * @param userConfig configuration
     */
    public void setUserConfig(Configuration userConfig) {
        this.userConfig = userConfig;
    }

    /**
     * Get the user configuration.
     * @return the user configuration
     */
    public Configuration getUserConfig() {
        return userConfig;
    }

    /**
     * Returns the configuration subtree for a specific renderer.
     * @param mimeType MIME type of the renderer
     * @return the requested configuration subtree, null if there's no configuration
     */
    public Configuration getUserRendererConfig (String mimeType) {

        if (userConfig == null || mimeType == null) {
            return null;
        }

        Configuration userRendererConfig = null;

        Configuration[] cfgs
            = userConfig.getChild("renderers").getChildren("renderer");
        for (int i = 0; i < cfgs.length; ++i) {
            Configuration cfg = cfgs[i];
            try {
                if (cfg.getAttribute("mime").equals(mimeType)) {
                    userRendererConfig = cfg;
                    break;
                }
            } catch (ConfigurationException e) {
                // silently pass over configurations without mime type
            }
        }
        log.debug((userRendererConfig == null ? "No u" : "U")
                  + "ser configuration found for MIME type " + mimeType);
        return userRendererConfig;
    }

    /**
     * Sets the base URL.
     * @param baseURL base URL
     */
    public void setBaseURL(String baseURL) {
        this.baseURL = baseURL;
    }

    /**
     * Returns the base URL.
     * @return the base URL
     */
    public String getBaseURL() {
        if ((this.baseURL == null) || (this.baseURL.trim().equals(""))) {
            return "file:.";
        } else {
            return this.baseURL;
        }
    }

    /**
     * Returns the parameters for PDF encryption.
     * @return the PDF encryption parameters, null if not applicable
     */
    public PDFEncryptionParams getPDFEncryptionParams() {
        return pdfEncryptionParams;
    }

    /**
     * Sets the parameters for PDF encryption.
     * @param pdfEncryptionParams the PDF encryption parameters, null to
     * disable PDF encryption
     */
    public void setPDFEncryptionParams(PDFEncryptionParams pdfEncryptionParams) {
        this.pdfEncryptionParams = pdfEncryptionParams;
    }


    /**
     * Get an input stream for a reference.
     * Temporary solution until API better.
     * @param uri URI to access
     * @return InputStream for accessing the resource.
     * @throws IOException in case of an I/O problem
     */
    public InputStream getStream(String uri) throws IOException {
        return null;
    }

    /**
     * Sets the output File.
     * @param the output File
     */
    public void setOutputFile(File f){
        this.outputFile = f;
    }

    /**
     * Gets the output File.
     * @return the output File
     */
    public File getOutputFile(){
        return outputFile;
    }

    /**
     * Returns the conversion factor from pixel units to millimeters. This
     * depends on the desired reolution.
     * @return float conversion factor
     */
    public float getPixelUnitToMillimeter() {
        return this.px2mm;
    }

    /**
     * Sets the resolution in dpi.
     * @param dpi resolution in dpi
     */
    public void setResolution(int dpi) {
        this.px2mm = (float)(25.4 / dpi);
    }

    /**
     * If to create hot links to footnotes and before floats.
     * @return True if hot links dhould be created
     */
    public boolean linkToFootnotes() {
        return true;
    }

}