From: Han-Wen Nienhuys Date: Sat, 5 Mar 2005 17:06:31 +0000 (+0000) Subject: remove PDF related files X-Git-Tag: release/2.5.14~32 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=015bb3813eb4ac879df0561e5c6e28e9d1146792;p=lilypond.git remove PDF related files --- diff --git a/lily/include/pdf.hh b/lily/include/pdf.hh deleted file mode 100644 index dea015dd9d..0000000000 --- a/lily/include/pdf.hh +++ /dev/null @@ -1,72 +0,0 @@ -/* - pdf.hh -- declare Pdf output data structures. - - source file of the GNU LilyPond music typesetter - - (c) 2005 Han-Wen Nienhuys - -*/ - -#ifndef PDF_HH -#define PDF_HH - -#include - -#include "parray.hh" -#include "smobs.hh" - -class Pdf_object -{ - DECLARE_SMOBS(Pdf_object,); - bool written_; - int object_number_; - SCM value_; - long byte_count_; - - - static void write_dict (FILE*, SCM); - static void write_stream (FILE*, SCM); - static void write_vector (FILE*, SCM); - static void typecheck (SCM); - static String escape_string (String); - - String to_string () const; - void write_to_file (FILE*, bool) const; -public: - - bool is_indirect () const; - bool is_stream () const; - bool is_dict () const; - - Pdf_object(); - void set_value (SCM value); - - friend class Pdf_file; -}; - -class Pdf_file -{ - Link_array indirect_objects_; - Pdf_object *root_object_; - FILE *file_; - - DECLARE_SMOBS(Pdf_file,); - -protected: - void write_header (); - void write_trailer (); - - String get_string (); - -public: - void set_root_document (Pdf_object *obj); - Pdf_file (String filename); - void make_indirect (Pdf_object *obj); - void write_object (Pdf_object *obj); - void terminate(); -}; - -DECLARE_UNSMOB(Pdf_object, pdf_object); -DECLARE_UNSMOB(Pdf_file, pdf_file); - -#endif diff --git a/lily/pdf.cc b/lily/pdf.cc deleted file mode 100644 index 80c4e3373f..0000000000 --- a/lily/pdf.cc +++ /dev/null @@ -1,357 +0,0 @@ -/* - pdf.cc -- implement Pdf output routines. - - source file of the GNU LilyPond music typesetter - - (c) 2005 Han-Wen Nienhuys - -*/ - -#include "warn.hh" -#include "pdf.hh" -#include "ly-smobs.icc" - -IMPLEMENT_SMOBS (Pdf_object); -IMPLEMENT_DEFAULT_EQUAL_P (Pdf_object); -IMPLEMENT_TYPE_P (Pdf_object, "pdf-object?"); - - -Pdf_object::Pdf_object () -{ - object_number_ = 0; - value_ = SCM_BOOL_F; - written_ = false; - byte_count_ = 0; - - smobify_self (); -} - -Pdf_object::~Pdf_object () -{ - -} - -bool -Pdf_object::is_dict () const -{ - return scm_is_pair (value_) - && scm_car (value_) == ly_symbol2scm ("dictionary"); -} - -bool -Pdf_object::is_indirect () const -{ - return object_number_ > 0; -} - - -void -Pdf_object::typecheck (SCM val) -{ - if (scm_is_pair (val)) - { - SCM tag = scm_car (val); - if (tag == ly_symbol2scm ("null")) - val = SCM_UNDEFINED; - else if (tag == ly_symbol2scm ("dictionary")) - { - SCM alist = scm_cdr (val); - for (SCM s = alist; scm_is_pair (alist); s = scm_cdr (s)) - { - Pdf_object *key = unsmob_pdf_object (scm_caar (s)); - Pdf_object *val = unsmob_pdf_object (scm_cdar (s)); - - if (!key || !val) - { - ly_display_scm (scm_car (s)); - error ("key and value must be PDF objects."); - } - } - } - else if (tag == ly_symbol2scm ("stream")) - { - if (!scm_is_string (scm_cdr (val))) - error ("stream argument should be string"); - } - else - { - ly_display_scm (tag); - error ("unknown tag"); - } - } - else if (scm_is_vector (val)) - { - SCM vec = val; - int len = scm_c_vector_length (vec); - for (int i = 0; i < len; i++) - { - Pdf_object *val = unsmob_pdf_object (scm_c_vector_ref (vec, i)); - if (!val) - { - ly_display_scm (scm_c_vector_ref (vec, i)); - error ("array content should be PDF object"); - } - } - } -} - -void -Pdf_object::set_value (SCM val) -{ - if (written_) - error ("Can't set value for written PDF object"); - - typecheck (val); - - value_ = val; -} - -SCM -Pdf_object::mark_smob (SCM smob) -{ - Pdf_object *p = (Pdf_object*) SCM_CELL_WORD_1 (smob); - return p->value_; -} - -int -Pdf_object::print_smob (SCM smob, SCM port, scm_print_state *) -{ - Pdf_object *obj = (Pdf_object*) SCM_CELL_WORD_1 (smob); - scm_puts ("#value_, port); - scm_puts (">", port); - return 1; -} - - -void -Pdf_object::write_dict (FILE *file, SCM alist) -{ - String str = ""; - - fputs ("<< " , file); - for (SCM s = alist; scm_is_pair (s); s = scm_cdr (s)) - { - Pdf_object *key = unsmob_pdf_object (scm_caar (s)); - Pdf_object *val = unsmob_pdf_object (scm_cdar (s)); - - assert (val && key); - - key->write_to_file (file, false); - val->write_to_file (file, false); - } - fputs (">>\n" , file); -} - -void -Pdf_object::write_vector (FILE *file, SCM vec) -{ - String str = ""; - - fputs ("[ " , file); - int len = scm_c_vector_length (vec); - for (int i = 0; i < len; i++) - { - Pdf_object *val = unsmob_pdf_object (scm_c_vector_ref (vec, i)); - assert (val); - val->write_to_file (file, false); - } - fputs ("]\n" , file); -} - - -void -Pdf_object::write_stream (FILE *file, SCM scmstr) -{ - String str = ly_scm2string (scmstr); - fprintf (file, "<< /Length %d >>\nstream\n" , str.length ()); - fwrite (str.get_bytes (), str.length (), sizeof (Byte), file); - fputs ("endstream" , file); -} - -String -Pdf_object::escape_string (String str) -{ - str.substitute_char ('\\', "\\\\"); - str.substitute_char ('(', "\\("); - str.substitute_char (')', "\\)"); - return str; -} - -String -Pdf_object::to_string () const -{ - if (value_ == SCM_BOOL_F) - return "false"; - else if (value_ == SCM_UNDEFINED) - return "null"; - else if (value_ == SCM_BOOL_T) - return "true"; - else if (scm_is_integer (value_)) - return ::to_string (scm_to_int (value_)); - else if (scm_is_number (value_)) - return ::to_string (scm_to_double (value_)); - else if (scm_is_symbol (value_)) - return "/" + ly_symbol2string (value_); - else if (scm_is_string (value_)) - return "(" + escape_string (ly_scm2string (value_)) + ")"; - - assert (false); -} - -void -Pdf_object::write_to_file (FILE* file, bool dump_definition) const -{ - if (is_indirect () && !dump_definition) - { - fprintf (file, "%d 0 R", object_number_); - return; - } - - if (scm_is_vector (value_)) - write_vector (file, value_); - else if (scm_is_pair (value_)) - { - SCM tag = scm_car (value_); - if (tag == ly_symbol2scm ("dictionary")) - write_dict (file, scm_cdr (value_)); - else if (tag == ly_symbol2scm ("stream")) - write_stream (file, scm_cdr (value_)); - else - assert (false); - } - else - { - String str = to_string (); - fwrite (str.get_bytes (), str.length (), sizeof (Byte), file); - - fputc (dump_definition ? '\n' : ' ', file); - return; - } -} - -bool -Pdf_object::is_stream () const -{ - return scm_is_pair (value_) && scm_car (value_) == ly_symbol2scm ("stream"); -} - -/****************************************************************/ - - -IMPLEMENT_SMOBS (Pdf_file); -IMPLEMENT_DEFAULT_EQUAL_P (Pdf_file); -IMPLEMENT_TYPE_P (Pdf_file, "pdf-file?"); - - -Pdf_file::Pdf_file (String name) -{ - char const *cp = name.to_str0 (); - root_object_ = NULL; - file_ = fopen (cp, "w"); - if (!file_) - error (_f ("can't open file: `%s'", cp)); - write_header (); - smobify_self (); -} - -Pdf_file::~Pdf_file () -{ -} - -void -Pdf_file::write_header () -{ - fputs ("%PDF-1.3\n", file_); -} - -void -Pdf_file::make_indirect (Pdf_object *obj) -{ - assert (!obj->is_indirect ()); - - /* - Skip 0 , the null object. - */ - obj->object_number_ = indirect_objects_.size () + 1; - indirect_objects_.push (obj); -} - -void -Pdf_file::write_object (Pdf_object *obj) -{ - assert (!obj->written_); - if (obj->is_stream () && !obj->is_indirect ()) - make_indirect (obj); - - if (obj->is_indirect ()) - { - obj->byte_count_ = ftell (file_); - fprintf (file_, "%d obj\n", obj->object_number_); - } - - obj->write_to_file (file_, true); - obj->written_ = true; - - if (obj->is_indirect ()) - fprintf (file_, " \nendobj\n"); -} - -void -Pdf_file::terminate () -{ - for (int i = 0; i < indirect_objects_.size (); i++) - { - if (!indirect_objects_[i]->written_) - write_object (indirect_objects_[i]); - } - - write_trailer (); - fclose (file_); - file_ = NULL; -} - -void -Pdf_file::set_root_document (Pdf_object*obj) -{ - if (root_object_) - error ("Can have only one root object"); - - root_object_ = obj; - if (!obj->is_indirect ()) - make_indirect (obj); -} - -void -Pdf_file::write_trailer () -{ - long xref_offset = ftell (file_); - fprintf (file_, "xref\n%d %d\n", 0, indirect_objects_.size () + 1); - - char const *xref_entry = "%010d %05d %c \n"; - fprintf (file_, xref_entry, 0, 65535, 'f'); - for (int i = 0; i < indirect_objects_.size (); i++) - fprintf (file_, xref_entry, indirect_objects_[i]->byte_count_, 0, 'n'); - - fprintf (file_, "trailer\n<< /Size %d /Root %d 0 R >>", - indirect_objects_.size () + 1, - (root_object_) ? root_object_->object_number_ : 0); - fprintf (file_, "\nstartxref\n%d\n", xref_offset); - fputs ("%%EOF", file_); -} - -SCM -Pdf_file::mark_smob (SCM f) -{ - Pdf_file *pfile = (Pdf_file*) SCM_CELL_WORD_1 (f); - for (int i = 0; i < pfile->indirect_objects_.size (); i++) - scm_gc_mark (pfile->indirect_objects_[i]->self_scm ()); - return SCM_BOOL_F; -} - -int -Pdf_file::print_smob (SCM pdf, SCM port, scm_print_state*) -{ - scm_puts ("#", port); - return 1; -}