html tags applescript wrap startswith

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

Aplicación de Ruby :

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"