Обтекание строк в Applescript тегами HTML и проблема сценария MarsEdit.app - PullRequest
0 голосов
/ 09 мая 2011

В настоящее время я использую скрипт в MarsEdit.app, который имеет недостаток. Он проверяет документ HTML на случаи, когда абзацы заключены в теги <p> следующим образом:

-- 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

Проблема здесь в том, что если абзац (или единственная строка) переносится любым другим тегом HTML, кроме тега <p>, сценарий переносит теги <p> по всей доске.

Другая часть скрипта, которая проверяет наличие конечных тегов в конце абзаца, делает почти то же самое.

-- 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

Пример:

<h5> Foobar </h5>

становится

<p><h5> Foobar </h5></p>

В другом вопросе Applescript и оператор «начинается с» , @lri был любезен, чтобы дать мне решение, связанное с ним.

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

и другие его рекомендации также можно найти на этом сайте Обернуть строки тегами на applecript

Реализация этих рекомендаций с MarsEdit.app - еще одна проблема для меня.

Я загрузил весь скрипт на pastebin. Pastebin: MarsEdit.app, оберните строку скриптом

tags

Если кто-нибудь может помочь мне отредактировать скрипт в соответствии с рекомендациями @ lri, это было бы здорово. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 10 мая 2011

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

Ruby appscript :

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"))

Они предполагают, что все начинается с (пробел и) < это тег.

1 голос
/ 09 мая 2011

вы можете сделать этот процесс, используя другой более сильный язык, запустив команды оболочки в applecript

В принципе, вы можете запустить все что угодно в окне терминала, как это

давайте предположим, что у вас есть файл test.txt на рабочем столе, вы можете запустить его, и он обернет все строки тегом 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"

и если вы хотите запустить php-файл, просто сделайте

set dir to quoted form of POSIX path of 'path:to:php_folder")
set results to do shell script "cd " & dir & "
php test.php"
...