<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple style='word-wrap:break-word'><div class=WordSection1><p class=MsoPlainText>OK, after a lot of head-scratching I figured it out. The script below appends a new staff to the bottom of a score, then moves the new staff to the top of the score. It is just a proof of concept and only processes the staff order in Scroll View. I am now working on Page View which should be similar except that (as I understand it) all the System Staves haves to be processed, using a loop. The index starts at 1 (0 is Scroll View).<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>At one point I needed to store the absolute value of an element in a Lua table, and then break the pointer to the table because the table was going to change later and I needed the original value preserved. The only way I could find was to load that table value into a variable, and then … destroy the table. Silly, because I needed that table, so I had to create it again immediately after extracting the “unchangeable value” of the element.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>There must be a much better way, although of course this is a Lua language question and has nothing to do with JW Lua per se. I have read the chapter about tables in manual (“Programming in Lua”) but did not obtain enlightenment.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Anyway, this code works, and that’s what matters.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>==============<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><span style='color:#548235;mso-style-textfill-fill-color:#548235;mso-style-textfill-fill-alpha:100.0%'>--append a new staff to the bottom of the score<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>local staffID = finale.FCStaves.Append()<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>local staff = finale.FCStaff()<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>staff:Load(staffID)<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>staff.InstrumentUUID = finale.FFUUID_BLANKSTAFF<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>local strName =finale.FCString()<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>strName.LuaString="NEW STAFF"<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>staff:SaveNewFullNameString (strName)<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>local strAbrev =finale.FCString()<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>strAbrev.LuaString="N. STF."<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>staff:SaveNewAbbreviatedNameString (strAbrev)<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>staff:Save()<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:#548235;mso-style-textfill-fill-color:#548235;mso-style-textfill-fill-alpha:100.0%'>--store the value of the top staff prior to re-ordering the staves</span><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'><o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>local sysstaff_table = {}<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>local sysstaves= finale.FCSystemStaves()<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>sysstaves:LoadScrollView()<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>for sysstaff in each(sysstaves) do<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>    table.insert(sysstaff_table, sysstaff)<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>end<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>bottom_staff = sysstaff_table[#sysstaff_table]<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>sysstaff_table = nil    </span><span style='color:#548235;mso-style-textfill-fill-color:#548235;mso-style-textfill-fill-alpha:100.0%'>-- the only way I can find to break the pointer to the table is to destroy the table!<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:#548235;mso-style-textfill-fill-color:#548235;mso-style-textfill-fill-alpha:100.0%'>--which means the same table must now be laboriously re-created anew....<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>local sysstaff_table = {}<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>local sysstaves= finale.FCSystemStaves()<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>sysstaves:LoadScrollView()<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>for sysstaff in each(sysstaves) do<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>    table.insert(sysstaff_table, sysstaff)<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>end<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:#548235;mso-style-textfill-fill-color:#548235;mso-style-textfill-fill-alpha:100.0%'>--move each staff down by one staff<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>for i = #sysstaff_table, 1, -1 do<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>    sysstaff = sysstaff_table[i]<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>    next_sysstaff = sysstaff_table[i-1]<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>    if next_sysstaff then<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>        sysstaff.Staff = next_sysstaff.Staff        </span><span style='color:#548235;mso-style-textfill-fill-color:#548235;mso-style-textfill-fill-alpha:100.0%'>--process all staves except the top one.<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>    else<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>        sysstaff.Staff = bottom_staff.Staff         </span><span style='color:#548235;mso-style-textfill-fill-color:#548235;mso-style-textfill-fill-alpha:100.0%'>--replace value of top staff with value of the appended staff<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>    end<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>end<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'>sysstaves:SaveAll()<o:p></o:p></span></p><p class=MsoPlainText><span style='color:#C55A11;mso-style-textfill-fill-color:#C55A11;mso-style-textfill-fill-alpha:100.0%'><o:p> </o:p></span></p><p class=MsoPlainText>=======<o:p></o:p></p><p class=MsoPlainText>Martin<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p></div></body></html>