Estoy tratando de escribir un AppleScript que funcione dentro de CotEditor para insertar números dentro de líneas de texto, especificando dónde agregarlo, desde qué número, el incremento, prefijos/sufijos y elegir agregar ceros iniciales, pero no funciona.
-- Controlador para agregar ceros iniciales a un número
on addLeadingZeros(numberText, maxDigits)
set numLength to length of numberText
set zerosToAdd to maxDigits - numLength
if zerosToAdd > 0 then
set leadingZeros to ""
repeat zerosToAdd times
set leadingZeros to leadingZeros & "0"
end repeat
return leadingZeros & numberText
else
return numberText
end if
end addLeadingZeros
try
tell application "CotEditor"
if exists front document then
set frontDoc to front document
set docText to contents of frontDoc
set lineList to paragraphs of docText
set totalLines to count of lineList
-- Solicitar al usuario que ingrese la línea de inicio, línea de fin, posición de la columna, número inicial y aumentar el paso
set startLineDialog to display dialog "Comenzar en la línea:" default answer "1"
if button returned of startLineDialog is "Cancel" then return
set startLine to text returned of startLineDialog
set endLineDialog to display dialog "Finalizar en la línea:" default answer totalLines as rich text
if button returned of endLineDialog is "Cancel" then return
set endLine to text returned of endLineDialog
set columnPositionDialog to display dialog "Posición de la columna:" default answer "1"
if button returned of columnPositionDialog is "Cancel" then return
set columnPosition to text returned of columnPositionDialog
set startingNumberDialog to display dialog "Número inicial:" default answer "1"
if button returned of startingNumberDialog is "Cancel" then return
set startingNumber to text returned of startingNumberDialog
set stepIncrementDialog to display dialog "Incremento paso:" default answer "1"
if button returned of stepIncrementDialog is "Cancel" then return
set stepIncrement to text returned of stepIncrementDialog
try
set {startLine, endLine, columnPosition, startingNumber, stepIncrement} to {startLine as integer, endLine as integer, columnPosition as integer, startingNumber as integer, stepIncrement as integer}
on error
display dialog "Por favor ingrese valores de entrada válidos." buttons {"OK"} default button "OK"
return
end try
-- Solicitar al usuario un prefijo
set prefixDialog to display dialog "Ingrese el prefijo para los números de línea:" default answer ""
if button returned of prefixDialog is "Cancel" then return
set prefixText to text returned of prefixDialog
-- Solicitar al usuario un sufijo
set suffixDialog to display dialog "Ingrese el sufijo para los números de línea:" default answer ""
if button returned of suffixDialog is "Cancel" then return
set suffixText to text returned of suffixDialog
-- Preguntar si el usuario desea ceros iniciales
set leadingZerosDialog to display dialog "¿Desea ceros iniciales para los números de línea?" buttons {"Sí", "No"} default button "No"
set leadingZeros to button returned of leadingZerosDialog
set newContent to ""
set currentLineNumber to startingNumber as integer
repeat with i from 1 to totalLines
log "Procesando línea: " & i -- Mensaje en el registro para seguir el progreso
if i startLine and i endLine then
log "Agregando número de línea a la línea: " & i
-- Calcular el prefijo apropiado en función del número de línea
set lineNumberText to currentLineNumber as rich text
log "Texto del número de línea antes de los ceros iniciales: " & lineNumberText
if leadingZeros is "Sí" then
set lineNumberText to my addLeadingZeros(lineNumberText, 5) -- asumiendo un máximo de 5 dígitos para el número de línea
log "Texto del número de línea después de los ceros iniciales: " & lineNumberText
end if
set linePrefix to prefixText & lineNumberText & suffixText
log "Prefijo de línea: " & linePrefix
-- Insertar número de línea en la posición especificada
set lineContent to item i of lineList
log "Contenido original de la línea: " & lineContent
if class of lineContent is rich text and lineContent is not "" then
-- Insertar número de línea en la posición de la columna especificada
set linePrefixLength to length of linePrefix
if columnPosition > linePrefixLength then -- Verificar si la posición de la columna está después del prefijo
set newLineContent to (rich text 1 thru (columnPosition - linePrefixLength) of lineContent) & linePrefix & (rich text (columnPosition - linePrefixLength + 1) thru -1 of lineContent)
else
set newLineContent to linePrefix & lineContent
end if
else
-- Si la línea está vacía o no es texto, simplemente insertar el número de línea
set newLineContent to linePrefix
end if
log "Nuevo contenido de la línea: " & newLineContent
-- Actualizar el contenido de la línea en la lista
set item i of lineList to newLineContent
set currentLineNumber to currentLineNumber + stepIncrement
end if
end repeat
-- Reensamblar el contenido del documento
set newContent to ""
repeat with i from 1 to totalLines
set newContent to newContent & item i of lineList & return
end repeat
set contents of frontDoc to newContent
else
display dialog "No hay ningún documento abierto actualmente."
end if
end tell
end try