On Jul 13, 2022, at 3:20 PM, Barrett Butler <cavedwell...@gmail.com> wrote:
> 
> Does BBedit have this type of functionality built in ?
> 
> Goal:
> 
> Create .html suffixed “empty” file by automated process for each record in 
> given single field list
> “Empty File” = still containing basic html framework code and or master 
> template base page code.
> 
> 
> Project Explanation:
> 
> 
> To give perspective to specific functionality request or feature:
> Streamline initial directory hierarchy creation with individual empty files 
> named directly from original document chapters and subsections for future 
> editing of content derived from a PDF based manual being migrated to html.
> 
> Given:
> 
> Workspace Operating Environment MacOS
> Alpha numeric text file
> 5,000 records (not really but give perspective) - one field per record
I’m pretty sure that BBEdit doesn’t have a builtin command to solve this 
specific need. (That’s an awfully specialized task.) But it would be a trivial 
project to write an AppleScript, or a Perl script, or a Swift program, or 
probably even a shell script, which would do the job, and could even be invoked 
from the BBEdit  Script Menu if you wanted,

I’ve appended below an AppleScript which does a vaguely related task, just to 
illustrate a few of the techniques in play. Obviously, your particular task 
would need to include “open the list of records and read lines from it.”

Regards,

        Neil Faiman

(*  Make New Case

        This script will create a new case in the Wilton ZBA web site( as 
represented
        by the ZBA BBEdit project). It can be run standalone, but is expected 
to be
        used from in the BBEdit scripts folder.
         
        The script creates the case folder subdirectory of the cases/ 
directory. Inside
        that folder, it creates a stub case.txt file and an index.html, 
complete 
        all with the persistent includes needed if the case is simple enough to 
rely
        entirely on automatic notice generation.
        
        Finally, it activates BBEdit and opens the new case.txt file.
*)

use AppleScript version "2.4" -- Yosemite (10.10) or later
use scripting additions

on run {}
        set casesFolder to getCasesFolder()
        if casesFolder is missing value then return
        
        set newCaseCreated to false
        repeat until newCaseCreated
                set caseRecord to getCaseIDFromUser()
                set {|date|:caseDate, |number|:caseNumber, |id|:caseID} to 
caseRecord
                tell application "System Events"
                        if exists folder caseID of casesFolder then
                                display alert ¬
                                        ("Case " & caseDate & "-" & caseNumber 
& " already exists") buttons {"Cancel", "OK"} default button "OK"
                        else
                                set caseFile to my makeNewCase(casesFolder, 
caseDate, caseNumber, caseID)
                                my openCaseFile(caseFile)
                                return
                        end if
                end tell
        end repeat
        
end run

(*      Ask the user for a case identifier. If they enter a valid string, return
        a record {date: "m/d/y", num: "n", id: "yyyymmddnn"}. If they cancel,
        just let the script terminate.
*)
to getCaseIDFromUser()
        set parsedCaseID to missing value
        repeat until parsedCaseID ≠ missing value
                set caseID to text returned of (display dialog ¬
                        "Enter a new case number in the format \"m/d/y-n\"" 
default answer ¬
                        "" buttons {"Cancel", "OK"} ¬
                        default button ¬
                        "OK" cancel button ¬
                        "Cancel" with title "Case ID")
                set parsedCaseID to parseCaseID(caseID)
        end repeat
end getCaseIDFromUser

(*      Given a case id string of the form "m/d/y-n", return a 
        record {|date|: "m/d/y", |number|: "n", |id|: "yyyymmddnn"}.
        If the string does not have the required format, return
        missing value.
*)
to parseCaseID(param)
        try
                -- Split "m/d/y-n" into "m/d/y" and "n"
                set tid to AppleScript's text item delimiters
                set AppleScript's text item delimiters to "-"
                set dateAndNumber to param's text items
                set AppleScript's text item delimiters to tid
                if (count dateAndNumber) ≠ 2 then error
                
                -- Split "m/d/y" into "m", "d", and "y"
                set AppleScript's text item delimiters to "/"
                set dateComponents to text items of item 1 of dateAndNumber
                set AppleScript's text item delimiters to tid
                if (count dateComponents) ≠ 3 then error
                
                -- Validate "m", "d", "y", and "n"
                set n to checkNumber(item 2 of dateAndNumber, 99)
                set m to checkNumber(item 1 of dateComponents, 12)
                set d to checkNumber(item 2 of dateComponents, 31)
                set yn to item 3 of dateComponents as integer
                if yn ≥ 0 and yn < 50 then
                        set yn to yn + 2000
                else if yn ≥ 80 and yn ≤ 99 then
                        set yn to yn + 1900
                else if yn < 1980 or yn ≥ 2050 then
                        error
                end if
                set y to yn as text
                
                -- Construct the return values
                set caseDate to m & "/" & d & "/" & y
                set caseNumber to n
                set caseID to y & d2(m) & d2(d) & d2(n)
                return {|date|:caseDate, |number|:caseNumber, |id|:caseID}
                
        on error
                return missing value
        end try
end parseCaseID


(*      If x is a string representing an integer in the range [1, max], then
        return it (stripping any leading zeros); otherwise, throw an error.
*)
on checkNumber(x, max)
        set n to x as integer
        if n < 1 or n > max then error
        return n as text
end checkNumber


(*      Transform n (presumably a string of digits representing a number)
        to a two-character string by removing excess leading characters
        or adding leading zeros.
*)
on d2(n)
        return text -2 through -1 of ("00" & n)
end d2


(*      Get a folder object representing the ZBA web site folder.
        Returns missing value if the folder is not available.
*)
on getCasesFolder()
        tell application "BBEdit"
                try
                        set project to project document "ZBA.bbprojectd"
                on error
                        display alert ¬
                                "The ZBA project is not open in BBEdit" as 
warning message ¬
                                "Open the ZBA project and try again" buttons 
"OK" default button "OK"
                        return missing value
                end try
                set site to project collection "Site" of project
                set sitePath to site as string
        end tell
        
        tell application "System Events"
                set casesPath to sitePath & "cases"
                set cases to folder casesPath
                return cases
        end tell
end getCasesFolder


on makeNewCase(casesFolder, caseDate, caseNumber, caseID)
        tell application "System Events"
                set caseFolder to make new folder at casesFolder with 
properties {name:caseID}
                
                set caseFile to make new file at caseFolder with properties 
{name:"case.txt"}
                open for access caseFile with write permission
                write ("Case: " & caseID & return & ¬
                        "Lot: <#LotNumber#>" & return & ¬
                        "Address: <#Address#>" & return & ¬
                        "Owner: <#Owner#>" & return & ¬
                        "Appeal: <#Appeal#>" & return & ¬
                        "Purpose: <#Purpose#>" & return ¬
                        ) to caseFile
                close access caseFile
                
                set indexFile to make new file at caseFolder with properties 
{name:"index.html"}
                open for access indexFile with write permission
                write ("<!-- #bbinclude \"Case Header-html5\" #ID#=\"" & caseID 
& ¬
                        "\" #DATE#=\"" & caseDate & ¬
                        "\" #NUMBER#=\"" & caseNumber & ¬
                        "\" --><!-- end bbinclude -->" & return & ¬
                        "<!-- #bbinclude \"case_summary\" --><!-- end bbinclude 
-->" & return & ¬
                        "<!-- #bbinclude \"case_page_hearing\" 
#MEETING#=\"all\" --><!-- end bbinclude -->" & return & ¬
                        "<!-- #bbinclude \"Case Footer-html5\" --><!-- end 
bbinclude -->" & return ¬
                        ) to indexFile
                close access indexFile
        end tell
        
        return caseFile
end makeNewCase

on openCaseFile(caseFile)
        tell application "System Events" to set caseFilePath to caseFile's path
        tell application "BBEdit"
                activate
                open file caseFilePath opening in window of project document 
"ZBA.bbprojectd"
                select insertion point before text 1 of front window
        end tell
end openCaseFile

-- 
This is the BBEdit Talk public discussion group. If you have a feature request 
or need technical support, please email "supp...@barebones.com" rather than 
posting here. Follow @bbedit on Twitter: <https://twitter.com/bbedit>
--- 
You received this message because you are subscribed to the Google Groups 
"BBEdit Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to bbedit+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/bbedit/5FEF7272-A6D8-46F3-93FB-79FEEBE6A566%40faiman.org.

Reply via email to