Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
ollama
Commits
f5ac8ddf
Commit
f5ac8ddf
authored
Jul 27, 2023
by
Michael Yang
Browse files
refactor scan multiline for reuse
parent
dbb3174c
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
7 deletions
+28
-7
parser/parser.go
parser/parser.go
+28
-7
No files found.
parser/parser.go
View file @
f5ac8ddf
...
@@ -4,6 +4,7 @@ import (
...
@@ -4,6 +4,7 @@ import (
"bufio"
"bufio"
"bytes"
"bytes"
"errors"
"errors"
"fmt"
"io"
"io"
"log"
"log"
)
)
...
@@ -63,26 +64,46 @@ func Parse(reader io.Reader) ([]Command, error) {
...
@@ -63,26 +64,46 @@ func Parse(reader io.Reader) ([]Command, error) {
}
}
func
scanModelfile
(
data
[]
byte
,
atEOF
bool
)
(
advance
int
,
token
[]
byte
,
err
error
)
{
func
scanModelfile
(
data
[]
byte
,
atEOF
bool
)
(
advance
int
,
token
[]
byte
,
err
error
)
{
const
multilineString
=
`"""`
advance
,
token
,
err
=
scan
([]
byte
(
`"""`
),
[]
byte
(
`"""`
),
data
,
atEOF
)
if
err
!=
nil
{
return
0
,
nil
,
err
}
if
advance
>
0
&&
token
!=
nil
{
return
advance
,
token
,
nil
}
advance
,
token
,
err
=
scan
([]
byte
(
`"`
),
[]
byte
(
`"`
),
data
,
atEOF
)
if
err
!=
nil
{
return
0
,
nil
,
err
}
if
advance
>
0
&&
token
!=
nil
{
return
advance
,
token
,
nil
}
return
bufio
.
ScanLines
(
data
,
atEOF
)
}
func
scan
(
openBytes
,
closeBytes
,
data
[]
byte
,
atEOF
bool
)
(
advance
int
,
token
[]
byte
,
err
error
)
{
newline
:=
bytes
.
IndexByte
(
data
,
'\n'
)
newline
:=
bytes
.
IndexByte
(
data
,
'\n'
)
if
start
:=
bytes
.
Index
(
data
,
[]
byte
(
multilineString
)
);
start
>=
0
&&
start
<
newline
{
if
start
:=
bytes
.
Index
(
data
,
openBytes
);
start
>=
0
&&
start
<
newline
{
end
:=
bytes
.
Index
(
data
[
start
+
len
(
multilineString
)
:
],
[]
byte
(
multilineString
)
)
end
:=
bytes
.
Index
(
data
[
start
+
len
(
openBytes
)
:
],
closeBytes
)
if
end
<
0
{
if
end
<
0
{
if
atEOF
{
if
atEOF
{
return
0
,
nil
,
errors
.
New
(
"unterminated
multiline string: "
+
multilineString
)
return
0
,
nil
,
fmt
.
Errorf
(
"unterminated
%s: expecting %s"
,
openBytes
,
closeBytes
)
}
else
{
}
else
{
return
0
,
nil
,
nil
return
0
,
nil
,
nil
}
}
}
}
n
:=
start
+
len
(
multilineString
)
+
end
+
len
(
multilineString
)
n
:=
start
+
len
(
openBytes
)
+
end
+
len
(
closeBytes
)
newData
:=
data
[
:
start
]
newData
:=
data
[
:
start
]
newData
=
append
(
newData
,
data
[
start
+
len
(
multilineString
)
:
n
-
len
(
multilineString
)]
...
)
newData
=
append
(
newData
,
data
[
start
+
len
(
openBytes
)
:
n
-
len
(
closeBytes
)]
...
)
return
n
,
newData
,
nil
return
n
,
newData
,
nil
}
}
return
bufio
.
ScanLines
(
data
,
atEOF
)
return
0
,
nil
,
nil
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment