Líneas de ajuste de Applescript con etiquetas HTML y problema de script MarsEdit.app
tags wrap (2)
Actualmente estoy usando un script en MarsEdit.app que tiene un defecto. Comprueba el documento HTML en los casos en que los párrafos se envuelven con las etiquetas <p>
siguiente manera:
-- If already starts with <p>, don''t prepend another one
if not {oneParagraph starts with "<p>"} then
set newBodyText to newBodyText & "<p>"
end if
set newBodyText to newBodyText & oneParagraph
El problema aquí es que si el párrafo (o una sola línea) se envuelve con cualquier otra etiqueta HTML que no sea una etiqueta <p>
la secuencia de comandos ajusta las etiquetas <p>
todos los ámbitos.
Otra parte del script, que busca etiquetas de finalización al final del párrafo, hace más o menos lo mismo.
-- If already ends with </p>, don''t append another one
if not (oneParagraph ends with "</p>") then
set newBodyText to newBodyText & "</p>"
end if
set newBodyText to newBodyText & return
Ejemplo:
<h5>
Foobar </h5>
se convierte
<p><h5>
Foobar </h5></p>
En otra pregunta, Applescript y el operador "comienza con" , @lri tuvo la amabilidad de proporcionarme una solución relacionada.
on startswith(txt, l)
repeat with v in l
if txt starts with v then return true
end repeat
false
end startswith
startswith("abc", {"a", "d", "e"}) -- true
y otra de sus recomendaciones se puede encontrar en este sitio web también. Envuelva líneas con etiquetas en applescript
Implementar estas recomendaciones con MarsEdit.app es otro problema para mí.
Cargué todo el script en pastebin. Pastebin: MarsEdit.app, ajusta la línea con
script de etiquetas Si alguien puede ayudarme a editar el guión a las recomendaciones de @lri, sería genial. Gracias por adelantado.
AppleScript:
tell application "MarsEdit" to set txt to current text of document 1
set paras to paragraphs of txt
repeat with i from 1 to (count paras)
set v to item i of paras
ignoring white space
if not (v is "" or v starts with "<") then
set item i of paras to "<p>" & v & "</p>"
end if
end ignoring
end repeat
set text item delimiters to ASCII character 10
tell application "MarsEdit" to set current text of document 1 to paras as text
require ''appscript''; include Appscript
doc = app(''MarsEdit'').documents[0]
lines = doc.current_text.get.gsub(//r/n?/, "/n").split("/n")
for i in 0...lines.size
next if lines[i] =~ /^/s*$/ or lines[i] =~ /^/s*</
lines[i] = "<p>#{lines[i]}</p>"
end
doc.current_text.set(lines.join("/n"))
Suponen que cualquier cosa que comience con (espacio en blanco y) <
es una etiqueta.
podrías hacer este proceso usando otro lenguaje más fuerte ejecutando comandos de shell en applescript
basiclly puedes ejecutar cualquier cosa que harías en una ventana de terminal como esta
supongamos que tienes un archivo test.txt en tu escritorio, podrías ejecutar esto y envolvería todas las líneas con la etiqueta p
set dir to quoted form of POSIX path of (path to desktop)
set results to do shell script "cd " & dir & "
awk '' { print /"<p>/"$0/"</p>/" } '' test.txt"
y si quieres ejecutar un archivo php simplemente haces
set dir to quoted form of POSIX path of ''path:to:php_folder")
set results to do shell script "cd " & dir & "
php test.php"