type of location argument

2013-12-04 Thread Urs Liska

Hi,

next helpless question: what Scheme type is the location argument used 
for Scheme functions?

(write)ing location gives

#location 
/home/uliska/git/openLilyLib/snippets/editorial-tools/annotate/examples.ly:29:3



While I didn't find anything about the # combination in Scheme in 
general I have the impression that is an object of some kind.
Looking for the definition of ly:input-message I was lead to 
unsmob_input in input-smob.cc - but that doesn't help me any further to 
understand what's going on (I can read C++ like I can read a Spanish 
newspaper based on my knowledge of French and (partially) Italian).



How can I access the items in this location individually, at least the 
string, better the file, line and cursor position independently?
And how could I create something like ly:input-message, but without 
quoting the respective input?



I would like to create a clickable input message, but in the context of 
a series of information, so the output of the code context lines should 
be avoided.



Thanks
Urs


___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: type of location argument

2013-12-04 Thread Jan-Peter Voigt
Am 04.12.2013 14:58, schrieb Urs Liska:
 Hi,
 
 next helpless question: what Scheme type is the location argument used
 for Scheme functions?
 (write)ing location gives
Hi, its:
ly:input-location?

HTH

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: type of location argument

2013-12-04 Thread Urs Liska

Am 04.12.2013 15:00, schrieb Jan-Peter Voigt:

Am 04.12.2013 14:58, schrieb Urs Liska:

Hi,

next helpless question: what Scheme type is the location argument used
for Scheme functions?
(write)ing location gives

Hi, its:
ly:input-location?

HTH

Unfortunately not (TH).
This is what redirects me to

Input *
unsmob_input (SCM s)
{
  if (SCM_IMP (s))
return 0;
  if (SCM_CAR (s) == (SCM)input_tag) // ugh.
return (Input *) SCM_CDR (s);
  else
return 0;
}

And that's where I get stuck. This function looks like it somehow munges 
a Scheme pair or list, so I tried to access it through

(car location)
but that didn't work. Which isn't surprising because the original 
(write) would have printed something like (location ...) if it were a 
list, isn't it?


Urs

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: type of location argument

2013-12-04 Thread Jan-Peter Voigt
Am 04.12.2013 15:04, schrieb Urs Liska:
 Hi, its:
 ly:input-location?

 HTH
 Unfortunately not (TH).
 This is what redirects me to
 
 Input *
 unsmob_input (SCM s)
 {
   if (SCM_IMP (s))
 return 0;
   if (SCM_CAR (s) == (SCM)input_tag) // ugh.
 return (Input *) SCM_CDR (s);
   else
 return 0;
 }
 
 And that's where I get stuck. This function looks like it somehow munges
 a Scheme pair or list, so I tried to access it through
 (car location)
 but that didn't work. Which isn't surprising because the original
 (write) would have printed something like (location ...) if it were a
 list, isn't it?
What are you trying to do? If you want to pass a location to a
music(scheme/void)-function, it looks like:

%%%
\version 2.17.96

% save the current location
saveLocation =
#(define-void-function (parser location name)(symbol?)
   (ly:parser-define! parser name location))

% show the file path of the given location
showFile =
#(define-void-function (parser location loc)(ly:input-location?)
   (ly:message file '~A' (car (ly:input-file-line-char-column location

% save location
\saveLocation hier
% show file name
\showFile \hier
%%%

The showFile function takes a ly:input-location as argument.

Or is it something else, you are going to do?



___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: type of location argument

2013-12-04 Thread David Kastrup
Urs Liska u...@openlilylib.org writes:

 Am 04.12.2013 15:00, schrieb Jan-Peter Voigt:
 Am 04.12.2013 14:58, schrieb Urs Liska:
 Hi,

 next helpless question: what Scheme type is the location argument used
 for Scheme functions?
 (write)ing location gives
 Hi, its:
 ly:input-location?

 HTH
 Unfortunately not (TH).

Wanna bet?

 This is what redirects me to

 Input *
 unsmob_input (SCM s)
 {
   if (SCM_IMP (s))
 return 0;
   if (SCM_CAR (s) == (SCM)input_tag) // ugh.
 return (Input *) SCM_CDR (s);
   else
 return 0;
 }

 And that's where I get stuck. This function looks like it somehow
 munges a Scheme pair or list, so I tried to access it through
 (car location)
 but that didn't work.

Oh, that's bloody entrails you are dealing with here, the raw C++ code
used for implementing a Scheme type.  You don't want to go there.  Not
even the C++ code wants to go there more than once.

 Which isn't surprising because the original (write) would have printed
 something like (location ...) if it were a list, isn't it?

#... basically means Uh, I have no way of printing this primitive
type in a way that could be read back in, but here is some information
anyway.

The naming consistency for input locations and their related Scheme and
C++ types and print results is actually screwed up much more than any
other type I can think of.  It was probably implemented before Jan and
Han-Wen figured out how to do things systematically.

You won't learn anything useful from _this_ code.

What are you trying to achieve?

-- 
David Kastrup

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: type of location argument

2013-12-04 Thread Urs Liska

Am 04.12.2013 16:34, schrieb David Kastrup:

Urs Liska u...@openlilylib.org writes:


Am 04.12.2013 15:00, schrieb Jan-Peter Voigt:

Am 04.12.2013 14:58, schrieb Urs Liska:

Hi,

next helpless question: what Scheme type is the location argument used
for Scheme functions?
(write)ing location gives

Hi, its:
ly:input-location?

HTH

Unfortunately not (TH).

Wanna bet?


This is what redirects me to

Input *
unsmob_input (SCM s)
{
   if (SCM_IMP (s))
 return 0;
   if (SCM_CAR (s) == (SCM)input_tag) // ugh.
 return (Input *) SCM_CDR (s);
   else
 return 0;
}

And that's where I get stuck. This function looks like it somehow
munges a Scheme pair or list, so I tried to access it through
(car location)
but that didn't work.

Oh, that's bloody entrails you are dealing with here, the raw C++ code
used for implementing a Scheme type.  You don't want to go there.  Not
even the C++ code wants to go there more than once.


Which isn't surprising because the original (write) would have printed
something like (location ...) if it were a list, isn't it?

#... basically means Uh, I have no way of printing this primitive
type in a way that could be read back in, but here is some information
anyway.

The naming consistency for input locations and their related Scheme and
C++ types and print results is actually screwed up much more than any
other type I can think of.  It was probably implemented before Jan and
Han-Wen figured out how to do things systematically.

You won't learn anything useful from _this_ code.

What are you trying to achieve?



I want to write a function \annotate that (among other things) does
- use the location to write out annotation lists to auxiliary files, for 
this I need the separate parts of the location
- print a message to the console like ly:input-message, but without 
quoting what is in the input file at the location.


I'm quite sure Jan-Peter's answer will keep me going (until the next 
obstacle arrives ...)


Thanks
Urs

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: type of location argument

2013-12-04 Thread Urs Liska

Am 04.12.2013 16:33, schrieb Jan-Peter Voigt:

Am 04.12.2013 15:04, schrieb Urs Liska:

Hi, its:
ly:input-location?

HTH

Unfortunately not (TH).
This is what redirects me to

Input *
unsmob_input (SCM s)
{
   if (SCM_IMP (s))
 return 0;
   if (SCM_CAR (s) == (SCM)input_tag) // ugh.
 return (Input *) SCM_CDR (s);
   else
 return 0;
}

And that's where I get stuck. This function looks like it somehow munges
a Scheme pair or list, so I tried to access it through
(car location)
but that didn't work. Which isn't surprising because the original
(write) would have printed something like (location ...) if it were a
list, isn't it?

What are you trying to do? If you want to pass a location to a
music(scheme/void)-function, it looks like:

%%%
\version 2.17.96

% save the current location
saveLocation =
#(define-void-function (parser location name)(symbol?)
(ly:parser-define! parser name location))

% show the file path of the given location
showFile =
#(define-void-function (parser location loc)(ly:input-location?)
(ly:message file '~A' (car (ly:input-file-line-char-column location

% save location
\saveLocation hier
% show file name
\showFile \hier
%%%

The showFile function takes a ly:input-location as argument.

Or is it something else, you are going to do?


Thanks a lot. It's _nearly_ what I want to do, but I'm quite sure it 
will help me do it.


(cdr (ly:input-file-line-char-column location))
was the thing ...


Urs


___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user