source file of the GNU LilyPond music typesetter
- (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 1997--2009 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
+#if GCC_MAJOR < 4
+#define _GLIBCXX_HAVE_MBSTATE_T
+#include <wchar.h>
+#endif /* GCC_MAJOR < 4 */
+
#include "source-file.hh"
#include "config.hh"
#if HAVE_UTF8_WCHAR_H
#include <utf8/wchar.h> /* mbrtowc */
-#else
+#else /* !HAVE_UTF8_WCHAR_H */
#include <cwchar> /* mbrtowc */
-#endif
+#endif /* HAVE_UTF8_WCHAR_H */
#include <cstdio>
FILE *f = fopen (filename.c_str (), "rb");
if (!f)
{
- warning (_f ("can't open file: `%s'", filename.c_str ()));
+ warning (_f ("cannot open file: `%s'", filename.c_str ()));
vector<char> cxx_arr;
return cxx_arr;
void
Source_file::init_port ()
{
- SCM str = scm_makfrom0str (c_str ());
+ SCM str = scm_from_locale_string (c_str ());
str_port_ = scm_mkstrport (SCM_INUM0, str, SCM_OPN | SCM_RDNG, __FUNCTION__);
- scm_set_port_filename_x (str_port_, scm_makfrom0str (name_.c_str ()));
+ scm_set_port_filename_x (str_port_, ly_string2scm (name_));
}
string context = line.substr (0, ch)
+ to_string ('\n')
+ to_string (' ', col)
- + line.substr (ch, line.length()-ch);
+ + line.substr (ch, line.length ()-ch);
return context;
}
while (left > 0)
{
- wchar_t multibyte[2];
-
/*
FIXME, this is apparently locale dependent.
*/
#if HAVE_MBRTOWC
+ wchar_t multibyte[2];
size_t thislen = mbrtowc (multibyte, line_chars, left, &state);
#else
size_t thislen = 1;
if (!newline_locations_.size ())
return 1;
- vsize lo = 0;
- vsize hi = newline_locations_.size ();
-
- if (newline_locations_[lo] > pos_str0)
- return 1;
-
- if (newline_locations_[hi - 1] < pos_str0)
- return hi;
-
- binary_search_bounds (newline_locations_,
- (char const*&)pos_str0,
- default_compare,
- &lo, &hi);
+ /* this will find the '\n' character at the end of our line */
+ vsize lo = lower_bound (newline_locations_,
+ pos_str0,
+ less<char const*> ());
- if (*pos_str0 == '\n')
- lo--;
- return lo + 2 + line_offset_;
+ /* the return value will be indexed from 1 */
+ return lo + 1 + line_offset_;
}
void
#include "ly-smobs.icc"
-IMPLEMENT_SMOBS(Source_file);
-IMPLEMENT_DEFAULT_EQUAL_P(Source_file);
-IMPLEMENT_TYPE_P(Source_file, "ly:source-file?");
+IMPLEMENT_SMOBS (Source_file);
+IMPLEMENT_DEFAULT_EQUAL_P (Source_file);
+IMPLEMENT_TYPE_P (Source_file, "ly:source-file?");
SCM
Source_file::mark_smob (SCM smob)