344 lines
8.5 KiB
Text
344 lines
8.5 KiB
Text
form Highlighter test
|
|
# This is a regular comment
|
|
sentence Blank
|
|
sentence My_sentence This should all be a string
|
|
text My_text This should also all be a string
|
|
word My_word Only the first word is a string, the rest is discarded
|
|
boolean Binary 1
|
|
boolean Text no
|
|
boolean Quoted "yes"
|
|
comment This should be a string
|
|
optionmenu Drop-down: 1
|
|
option Foo
|
|
option 100
|
|
choice Radio: 1
|
|
option Foo
|
|
option 100
|
|
real left_Range -123.6
|
|
positive right_Range_max 3.3
|
|
integer Int 4
|
|
natural Nat 4
|
|
endform
|
|
|
|
beginPause: "Highlighter test"
|
|
sentence: "Blank", ""
|
|
sentence: "My sentence", "This should all be a string"
|
|
text: "My text", "This should also all be a string"
|
|
word: "My word", "Only the first word is a string, the rest is discarded"
|
|
boolean: "Binary", 1
|
|
comment: "This should be a string"
|
|
optionMenu: "Drop-down", 1
|
|
option: "Foo"
|
|
option: "100"
|
|
choice: "Choice", 1
|
|
option: "Foo"
|
|
option: "100"
|
|
real: "left Range", -123.6
|
|
positive: "right Range max", 3.3
|
|
integer: "Int", 4
|
|
natural: "Nat", 4
|
|
button = endPause("Cancel", "OK", 1, 2)
|
|
|
|
# Periods do not establish boundaries for keywords
|
|
form.var = 10
|
|
# Or operators
|
|
not.an.operator$ = "Bad variable name"
|
|
bad.or.not = 1
|
|
|
|
# External scripts
|
|
include /path/to/file
|
|
runScript: "/path/to/file"
|
|
execute /path/to/file
|
|
|
|
# Predefined variables
|
|
a = praatVersion
|
|
a = e + pi * ( all+right) / left mod average + (mono - stereo)
|
|
a$ = homeDirectory$ + tab$ + newline$
|
|
a$ = temporaryDirectory$
|
|
a$ = praatVersion$
|
|
a$ = shellDirectory$
|
|
a$ = homeDirectory$
|
|
a$ = preferencesDirectory$
|
|
a$ = defaultDirectory$
|
|
nocheck selectObject: undefined
|
|
# Not predefined variables
|
|
a$ = e$
|
|
a$ = pi$
|
|
|
|
# Arrays are not comments
|
|
a# = zero# (5, 6)
|
|
a [3], 5 = 7
|
|
printline 'a[3,5]', 'a[3]'
|
|
a [1] = 2
|
|
b [a [1]] = 3
|
|
assert b [a [1]] = 3
|
|
printline 'b[2]'
|
|
|
|
# if-block with built-in variables
|
|
if windows
|
|
# We are on Windows
|
|
elsif unix = 1 or !macintosh
|
|
exitScript: "We are on Linux"
|
|
else macintosh == 1
|
|
exit We are on Mac
|
|
endif
|
|
|
|
# Interpolation with precision digits
|
|
echo unquoted 'a:3'
|
|
echo unquoted 'a.a:3'
|
|
echo unquoted 'a[1]:3'
|
|
echo unquoted 'a1:3'
|
|
|
|
appendInfoLine: "quoted 'a:3'"
|
|
appendInfoLine: "quoted 'a.a:3'"
|
|
appendInfoLine: "quoted 'a[1]:3'"
|
|
appendInfoLine: "quoted 'a1:3'"
|
|
|
|
# Interpolations are not recursive
|
|
echo unquoted 'a'1':3'
|
|
appendInfoLine: "quoted 'a'1':3'"
|
|
|
|
# Interpolation without precision digits
|
|
echo unquoted 'var' numeric
|
|
echo unquoted 'var$' string
|
|
echo unquoted 'var["a"]' numeric hash
|
|
echo unquoted 'var$["a"]' string hash
|
|
echo unquoted 'var[1]' numeric indexed variable
|
|
echo unquoted 'var$[1]' string indexed variable
|
|
|
|
appendInfoLine: "quoted 'var' numeric"
|
|
appendInfoLine: "quoted 'var$' string"
|
|
appendInfoLine: "quoted 'var["a"]' numeric hash"
|
|
appendInfoLine: "quoted 'var$["a"]' string hash"
|
|
appendInfoLine: "quoted 'var[1]' numeric indexed variable"
|
|
appendInfoLine: "quoted 'var$[1]' string indexed variable"
|
|
|
|
# Indeces in interpolations must be literal
|
|
echo 'var[a]'
|
|
echo 'var[a$]'
|
|
|
|
string$ = "But don't interpolate everything!"
|
|
string$ = "interpolatin' " + "across" + " strings ain't cool either"
|
|
string$(10) ; This is a function
|
|
|
|
repeat
|
|
string$ = string$ - right$(string$)
|
|
until !length(string$)
|
|
|
|
Text... 1 Right 0.2 Half many----hyphens
|
|
Text... 1 Right -0.4 Bottom aحبيبa
|
|
Text... 1 Right -0.6 Bottom 日本
|
|
Draw circle (mm)... 0.5 0.5 i
|
|
|
|
rows = Object_'table'.nrow
|
|
value$ = Table_'table'$[25, "f0"]
|
|
fixed = Sound_10.xmin
|
|
fixed = Object_foo.xmin
|
|
fixed = Procrustes_foo.nx
|
|
var["vaa"] = 1 ; Hash
|
|
|
|
# Special two-word keyword
|
|
select all
|
|
# Keyword with a predefined variable
|
|
select all
|
|
|
|
# old-style procedure call
|
|
call oldStyle "quoted" 2 unquoted string
|
|
assert oldStyle.local = 1
|
|
|
|
# New-style procedure call with parens
|
|
@newStyle("quoted", 2, "quoted string")
|
|
if praatVersion >= 5364
|
|
# New-style procedure call with colon
|
|
@newStyle: "quoted", 2, "quoted string"
|
|
endif
|
|
|
|
# inline if with inline comment
|
|
var = if macintosh = 1 then 0 else 1 fi ; This is an inline comment
|
|
|
|
# for-loop with explicit from using local variable
|
|
# and paren-style function calls and variable interpolation
|
|
n = numberOfSelected("Sound")
|
|
for i from newStyle.local to n
|
|
name = selected$(extractWord$(selected$(), " "))
|
|
sound'i' = selected("Sound", i+(a*b))
|
|
sound[i] = sound'i'
|
|
endfor
|
|
|
|
i = 1
|
|
while i < n
|
|
i += 1
|
|
# Different styles of object selection
|
|
select sound'i'
|
|
sound = selected()
|
|
sound$ = selected$("Sound")
|
|
select Sound 'sound$'
|
|
selectObject( sound[i])
|
|
selectObject: sound
|
|
|
|
# Pause commands
|
|
beginPause("Viewing " + sound$)
|
|
if i > 1
|
|
button = endPause("Stop", "Previous",
|
|
...if i = total_sounds then "Finish" else "Next" fi,
|
|
...3, 1)
|
|
else
|
|
button = endPause("Stop",
|
|
...if i = total_sounds then "Finish" else "Next" fi,
|
|
...2, 1)
|
|
endif
|
|
editor_name$ = if total_textgrids then "TextGrid " else "Sound " fi + name$
|
|
nocheck editor Sound 'editor_name$'
|
|
nocheck Close
|
|
nocheck endeditor
|
|
editor_id = editor: editor_name$
|
|
Close
|
|
endeditor
|
|
|
|
# New-style standalone command call
|
|
Rename: "SomeName"
|
|
|
|
# Command call with assignment
|
|
duration = Get total duration
|
|
|
|
# Multi-line command with modifier
|
|
pitch = noprogress To Pitch (ac): 0, 75, 15, "no",
|
|
...0.03, 0.45, 0.01, 0.35, 0.14, 600
|
|
# Formulas are strings
|
|
Formula: "if col = 1 then row * Object_'pitch'.dx + 'first' else self fi"
|
|
|
|
# do-style command with assignment
|
|
minimum = do("Get minimum...", 0, 0, "Hertz", "Parabolic")
|
|
|
|
# New-style multi-line command call with broken strings
|
|
table = Create Table with column names: "table", 0,
|
|
..."file subject speaker
|
|
... f0 f1 f2 f" + string$(3) + " " +
|
|
..."duration response"
|
|
|
|
# Function call with trailing space
|
|
removeObject: pitch, table
|
|
|
|
# Picture window commands
|
|
selectObject: sound
|
|
# do-style command
|
|
do("Select inner viewport...", 1, 6, 0.5, 1.5)
|
|
Black
|
|
Draw... 0 0 0 0 "no" Curve
|
|
Draw inner box
|
|
Text bottom: "yes", sound$
|
|
Erase all
|
|
|
|
# Demo window commands
|
|
demo Erase all
|
|
demo Select inner viewport... 0 100 0 100
|
|
demo Axes... 0 100 0 100
|
|
demo Paint rectangle... white 0 100 0 100
|
|
demo Text... 50 centre 50 half Click to finish
|
|
demoWaitForInput ( )
|
|
demo Erase all
|
|
demo Text: 50, "centre", 50, "half", "Finished"
|
|
endwhile
|
|
|
|
switch$ = if switch == 1 then "a" else
|
|
... if switch == 2 then "b" else
|
|
... if switch == 3 then "c" else
|
|
... if switch == 4 then "d" else
|
|
... "default" fi fi fi fi
|
|
|
|
# An old-style sendpraat block
|
|
# All these lines should be a string!
|
|
sendpraat Praat
|
|
...'newline$' Create Sound as pure tone... "tone" 1 0 0.4 44100 440 0.2 0.01 0.01
|
|
...'newline$' Play
|
|
...'newline$' Remove
|
|
|
|
# A new-style sendpraat block
|
|
beginSendPraat: "Praat"
|
|
Create Sound as pure tone: "tone", 1, 0, 0.4, 44100, 440, 0.2, 0.01, 0.01
|
|
duration = Get total duration
|
|
Remove
|
|
endSendPraat: "duration"
|
|
appendInfoLine: "The generated sound lasted for ", duration, "seconds"
|
|
|
|
# Number types
|
|
a = 10%
|
|
a = -10
|
|
a = +10
|
|
a = 10.4
|
|
a = 294e12
|
|
a = 2.94e12
|
|
|
|
# Operators
|
|
a = 2 ^ -6
|
|
a = -(1+1)^6
|
|
a = 4^3 ^ 2
|
|
a = 54 div 5.1
|
|
a = 54.3 mod 5
|
|
a = 3 ** 8 - 7
|
|
a = 3 / (8 + 7)
|
|
a = (7 * (3 + 5)) / ((2 + 3) - 1)
|
|
|
|
# Logical operators
|
|
assert (a = b) and c
|
|
assert a == (b or c)
|
|
assert a <= b not c
|
|
assert a >= b !c
|
|
assert a != b & c
|
|
assert a != b && c
|
|
assert a <> b || c
|
|
assert a < b | c
|
|
assert a > b
|
|
|
|
assert (a)or (b)
|
|
assert (a) or(b)
|
|
assert (a)and(b)
|
|
|
|
assert "hello" = "he" + "llo"
|
|
assert "hello" == "hello world" - " world"
|
|
|
|
stopwatch
|
|
time = stopwatch
|
|
clearinfo
|
|
echo This script took
|
|
print 'time' seconds to
|
|
printline execute.
|
|
|
|
# Old-style procedure declaration
|
|
procedure oldStyle .str1$ .num .str2$
|
|
.local = 1
|
|
endproc
|
|
|
|
# New-style procedure declaration with parentheses
|
|
procedure newStyle (.str1$, .num, .str2$)
|
|
# Command with "local" variable
|
|
.local = Get total duration
|
|
.local = Get 'some' duration
|
|
.local = Get 'some[1]' value... hello 10 p[i]
|
|
.local = Get 'some[1,3]' value: "hello", 10, p[i]
|
|
.local = Get 'some$' duration
|
|
.local = Get 'some$[1]' duration
|
|
endproc
|
|
|
|
# New-style procedure declaration with colon
|
|
procedure _new_style: .str1$, .num, .str2$
|
|
# Command with "local" variable
|
|
# Initial underscores in variables not allowed (unless interpolated)
|
|
_new_style.local = Get total duration
|
|
endproc
|
|
|
|
asserterror Unknown symbol:'newline$'« _
|
|
assert '_new_style.local'
|
|
|
|
@proc: a, selected("string"), b
|
|
# Comment
|
|
|
|
for i to saveSelection.n
|
|
selectObject: saveSelection.id[i]
|
|
appendInfoLine: selected$()
|
|
endfor
|
|
|
|
@ok(if selected$("Sound") = "tone" then 1 else 0 fi,
|
|
... "selected sound is tone")
|
|
|
|
@ok_formula("selected$(""Sound"") = ""tone""", "selected sound is tone")
|