]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/source-file.hh
* lily/smobs.cc (protect_smob): switch off fancy smob protection
[lilypond.git] / lily / include / source-file.hh
1 /*
2   source-file.hh -- declare Source_file
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1999--2006 Jan Nieuwenhuizen <janneke@gnu.org>
7 */
8
9 #ifndef SOURCE_FILE_HH
10 #define SOURCE_FILE_HH
11
12 #include "flower-proto.hh"
13 #include "std-vector.hh"
14 #include "lily-proto.hh"
15 #include "smobs.hh"
16
17 #include <iostream>
18 using namespace std;
19
20 /**
21    class for reading and mapping a file.
22
23    duplicates a lot of Data_file and Text_stream.
24    should look at including Data_file's functionality:
25    get_line (), get_word () here.
26 */
27
28 class Source_file
29 {
30   vector<char*> newline_locations_;
31   istream *istream_;
32   vector<char> characters_;
33   SCM str_port_;
34
35   char const *contents_str0 () const;
36   void load_stdin ();
37   void init_port ();
38   void init ();
39   
40   DECLARE_SMOBS(Source_file, bla);
41 public:
42   Source_file (string fn);
43   Source_file (string, string);
44
45   char const *c_str () const;
46   virtual string quote_input (char const *pos_str0) const;
47   istream *get_istream ();
48   bool contains (char const *pos_str0) const;
49   int length () const;
50   virtual int get_line (char const *pos_str0) const;
51   void set_line (char const *pos_str0, int i);
52   string name_string () const;
53   string file_line_column_string (char const *str0) const;
54
55 public:
56   Slice line_slice (char const *pos_str0) const;
57   string line_string (char const *pos_str0) const;
58   void get_counts (char const *pos_str0, int *, int *, int *) const;
59   
60   SCM get_port () const;
61   string name_;
62
63 protected:
64   int line_offset_;
65 };
66
67 vector<char> gulp_file (string fn, int desired);
68
69 #endif /* SOURCE_FILE_HH */
70