0 votos

Applescript reemplaza caracteres sin añadir una nueva línea

Tenemos un equipo de subtítulos que trabaja para varias plataformas de streaming y algunas de ellas utilizan sistemas antiguos que no aceptan algunos caracteres como , ", ", etc. Así que construí un script para reemplazar esos caracteres e informar de algunos que podrían necesitar más atención. El problema es que el código está colocando una nueva línea en cada ocurrencia y no puedo encontrar la razón. No sé cómo desgranar script, pero si es más fácil aceptaré cualquier sugerencia.

Código:

on run
    set theFlags to "Characters " -- prepares te variable to store weird characters
    tell application "TextEdit" to activate
    delay 0.1
    tell application "System Events"
        key code 0 using command down -- command + A (select all)
        delay 0.1
        key code 8 using command down -- command + C (copy to clipboard)
        delay 0.2
        set theText to the clipboard
        delay 0.5
        -- REPLACE KNOWN CHARACTERS
        set theText to my replace_chars(theText, "", "") --(0x200b) zero width space
        delay 0.5
        set theText to my replace_chars(theText, "…", "...")
        delay 0.5
        set theText to my replace_chars(theText, "“", "\"")
        delay 0.5
        set theText to my replace_chars(theText, "”", "\"")
        delay 0.5
        set theText to my replace_chars(theText, "’", "'")
        delay 0.5
        set theText to my replace_chars(theText, "‘", "'")
        delay 0.5
        -- FLAGS STRANGE CHARACTERS
        if (theText contains "ª") then
            set theFlags to theFlags & "ª "
        end if
        if (theText contains "º") then
            set theFlags to theFlags & "º "
        end if
        if (theText contains "") then
            set theFlags to theFlags & " "
        end if
        if (theText contains "¨") then
            set theFlags to theFlags & "¨ "
        end if
        -- REPORT DETECTED STRANGE CHARACTERS
        if (theFlags is not "Characters ") then
            display dialog theFlags & " detected." & return & "Inform localization team to correct."
        end if
        delay 0.1
        set the clipboard to theText
        delay 0.5
    end tell
    tell application "TextEdit" to activate
    delay 0.2
    tell application "System Events"
        key code 9 using command down -- command + V (replace old text)
    end tell
end run
on replace_chars(this_text, search_string, replacement_string)
    set AppleScript's text item delimiters to the search_string
    set the item_list to every text item of this_text
    set AppleScript's text item delimiters to the replacement_string
    set this_text to the item_list as string
    set AppleScript's text item delimiters to ""
    return this_text
end replace_chars

Estado inicial:

enter image description here

Estado final:

enter image description here

0voto

user3439894 Puntos 5883

Empezando por:

enter image description here

Utilizando lo siguiente ejemplo AppleScript código :

tell application "TextEdit"
    tell front document
        set theText to its text
        set theTextProperties to ¬
            the properties of its text
    end tell
end tell

set theText to my replaceChars(theText, "", "")
set theText to my replaceChars(theText, "…", "...")
set theText to my replaceChars(theText, "“", "\"")
set theText to my replaceChars(theText, "”", "\"")
set theText to my replaceChars(theText, "’", "'")
set theText to my replaceChars(theText, "‘", "'")

tell application "TextEdit"
    activate
    tell front document to ¬
        set its text to theText
end tell

delay 0.1

tell application "System Events" to ¬
    key code 0 using command down

tell application "TextEdit"
    tell front document
        set its font to font of theTextProperties
        set its size to size of theTextProperties
        set its color to color of theTextProperties
    end tell
end tell

delay 0.1

tell application "System Events" to key code 125

set theFlags to "Characters "
if theText contains "ª" then
    set theFlags to theFlags & "ª "
end if
if theText contains "º" then
    set theFlags to theFlags & "º "
end if
if theText contains "" then
    set theFlags to theFlags & " "
end if
if theText contains "¨" then
    set theFlags to theFlags & "¨ "
end if
if theFlags is not "Characters " then
    activate
    display alert theFlags & " detected." & ¬
        linefeed & linefeed & ¬
        "Inform localization team to correct."
end if

on replaceChars(thisText, searchString, replacementString)
    set AppleScript's text item delimiters to the searchString
    set the itemList to text items of thisText
    set AppleScript's text item delimiters to the replacementString
    set thisText to the itemList as string
    set AppleScript's text item delimiters to ""
    return thisText
end replaceChars

Resultado:

enter image description here


Notas:

El ejemplo AppleScript código que se muestra arriba, se probó en script Editor en MacOS Catalina con Lengua y región ajustes en Preferencias del sistema ajustado a Inglés (EE.UU.) - Primaria y me ha funcionado sin problemas 1 .

  • 1 Asume los ajustes necesarios y apropiados en <strong>Preferencias del sistema </strong>> <strong>Seguridad y privacidad </strong>> <strong>Privacidad </strong>se han fijado/abordado según las necesidades.

  • Recodificado para evitar el uso de el portapapeles .

  • Se ha reestructurado el código para eliminar las sentencias incorrectamente anidadas.

  • Se han eliminado los paréntesis innecesarios.

  • Eliminado lo innecesario delay comandos .

  • Convertido el estilo de nomenclatura no coincidente de variables a camelCase .

  • Trasladar la prueba y la notificación de "caracteres extraños" al final del proceso.

  • Cambiado display dialog a display alert .

  • Se ha modificado el uso de los mensajes con display alert . Se muestra como, por ejemplo,:

enter image description here


Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y sin ningún tipo de inclusión <em>tratamiento de errores </em>no contiene ningún otro <em>tratamiento de errores </em>según corresponda. Corresponde al usuario añadir cualquier <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Eche un vistazo a la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>pruebe con </strong></a><em>declaración </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>error </strong></a><em>declaración </em>en el <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guía del lenguaje AppleScript </strong></a>. Véase también, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Trabajar con errores </strong></a>. Además, el uso de la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW10" rel="nofollow noreferrer"><strong>retraso </strong></a><em>comando </em>puede ser necesario entre eventos cuando sea apropiado, por ejemplo <code>delay 0.5</code> con el <em>valor </em>de la <em>retraso </em>ajustado apropiadamente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X