mirror of
https://github.com/janet-lang/janet
synced 2024-11-28 11:09:54 +00:00
Drop leading and trailing newlines in longstrings.
Long, heredoc style strings can now have a non semantic leading newline character. This makes it easier to define large columns of text.
This commit is contained in:
parent
4ddf90e301
commit
9100794cea
@ -4,7 +4,7 @@
|
|||||||
:name "numarray"
|
:name "numarray"
|
||||||
:source @["numarray.c"])
|
:source @["numarray.c"])
|
||||||
|
|
||||||
(import build/numarray :prefix "")
|
(import build/numarray :as numarray)
|
||||||
|
|
||||||
(def a (numarray/new 30))
|
(def a (numarray/new 30))
|
||||||
(print (get a 20))
|
(print (get a 20))
|
||||||
|
@ -100,12 +100,12 @@ Janet num_array_get(void *p, Janet key) {
|
|||||||
|
|
||||||
static const JanetReg cfuns[] = {
|
static const JanetReg cfuns[] = {
|
||||||
{
|
{
|
||||||
"numarray/new", num_array_new,
|
"new", num_array_new,
|
||||||
"(numarray/new size)\n\n"
|
"(numarray/new size)\n\n"
|
||||||
"Create new numarray"
|
"Create new numarray"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"numarray/scale", num_array_scale,
|
"scale", num_array_scale,
|
||||||
"(numarray/scale numarray factor)\n\n"
|
"(numarray/scale numarray factor)\n\n"
|
||||||
"scale numarray by factor"
|
"scale numarray by factor"
|
||||||
},
|
},
|
||||||
|
@ -257,12 +257,24 @@ static int escape1(JanetParser *p, JanetParseState *state, uint8_t c) {
|
|||||||
|
|
||||||
static int stringend(JanetParser *p, JanetParseState *state) {
|
static int stringend(JanetParser *p, JanetParseState *state) {
|
||||||
Janet ret;
|
Janet ret;
|
||||||
|
uint8_t *bufstart = p->buf;
|
||||||
|
int32_t buflen = (int32_t) p->bufcount;
|
||||||
|
if (state->flags & PFLAG_LONGSTRING) {
|
||||||
|
/* Check for leading newline character so we can remove it */
|
||||||
|
if (bufstart[0] == '\n') {
|
||||||
|
bufstart++;
|
||||||
|
buflen--;
|
||||||
|
}
|
||||||
|
if (buflen > 0 && bufstart[buflen - 1] == '\n') {
|
||||||
|
buflen--;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (state->flags & PFLAG_BUFFER) {
|
if (state->flags & PFLAG_BUFFER) {
|
||||||
JanetBuffer *b = janet_buffer((int32_t)p->bufcount);
|
JanetBuffer *b = janet_buffer(buflen);
|
||||||
janet_buffer_push_bytes(b, p->buf, (int32_t)p->bufcount);
|
janet_buffer_push_bytes(b, bufstart, buflen);
|
||||||
ret = janet_wrap_buffer(b);
|
ret = janet_wrap_buffer(b);
|
||||||
} else {
|
} else {
|
||||||
ret = janet_wrap_string(janet_string(p->buf, (int32_t)p->bufcount));
|
ret = janet_wrap_string(janet_string(bufstart, buflen));
|
||||||
}
|
}
|
||||||
p->bufcount = 0;
|
p->bufcount = 0;
|
||||||
popstate(p, ret);
|
popstate(p, ret);
|
||||||
|
Loading…
Reference in New Issue
Block a user