release commit
[lilypond.git] / lily / input.cc
blobd5bfe1e958a3987bff9c27dfcee8eb1b478a6cf4
1 /*
2 input.cc -- implement Input
4 source file of the LilyPond music typesetter
6 (c) 1997--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
9 #include <stdio.h>
11 #include "flower-proto.hh"
12 #include "input.hh"
13 #include "string.hh"
14 #include "source.hh"
15 #include "source-file.hh"
17 Input::Input (Source_file*s, char const *cl)
19 source_file_=s;
20 defined_str0_=cl;
23 Input::Input ()
25 source_file_ = 0;
26 defined_str0_ = 0;
29 Input
30 Input::spot () const
32 return *this;
35 void
36 Input::set_spot (Input const &i)
38 *this = i;
42 Produce GNU-compliant error message. Correcting lilypond source is
43 such a breeze if you ('re edidor) know (s) the error column too
45 Format:
47 [file:line:column:][warning:]message
50 void
51 Input::message (String message_string) const
53 String str;
56 marked "Work in prgress" in GNU iostream
57 libg++ 2.7.2.8
58 libstdc++ 2.8.1
60 why not just return always -1 (unknown),
61 iso breaking the interface?
63 int col = cerr.rdbuf ()->column ();
67 // well, we don't want to loose first warning...
68 int col = 1;
69 if (col > 0)
70 str += "\n";
72 if (source_file_)
73 str += location_string () + String (": ");
75 str += message_string;
76 if (source_file_)
78 str += ":\n";
79 str += source_file_->error_string (defined_str0_);
81 fprintf (stderr, "%s\n", str.to_str0 ());
82 fflush (stderr);
85 void
86 Input::warning (String message_string) const
88 message (_ ("warning: ") + message_string);
90 void
91 Input::error (String s) const
93 message (_ ("error: ")+ s);
96 void
97 Input::non_fatal_error (String s) const
99 message (_ ("non fatal error: ") + s);
101 String
102 Input::location_string () const
104 if (source_file_)
105 return source_file_->file_line_column_string (defined_str0_);
106 else
107 return " (" + _ ("position unknown") + ")";
110 String
111 Input::line_number_string () const
113 if (source_file_)
114 return to_string (source_file_->get_line (defined_str0_));
115 else
116 return "?";
119 String
120 Input::file_string () const
122 if (source_file_)
123 return source_file_->name_string ();
124 else
125 return "";
130 Input::line_number () const
132 if (source_file_)
133 return source_file_->get_line (defined_str0_);
134 else
135 return 0;
140 Input::column_number () const
142 if (source_file_)
143 return source_file_->get_column (defined_str0_);
144 else
145 return 0;