Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

SpecialChars&Tags2HTMLFromList

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> Pool
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 20.01.2007 - 23:44    Titel: SpecialChars&Tags2HTMLFromList Antworten mit Zitat

Hier ein Script, mit dem man Sonderzeichen oder HTML-Tags in Text einfügen kann, indem diese aus einer Liste ausgewählt werden.

Ursprünglich für TextWrangler zum editieren von HTML-Seiten gedacht, sollte es universell in jedem Programm nutzbar sein. Mit FastScriptLite oder Shortcut-Progs lässt es sich auf Taste legen.
In TextWrangler selbst, den ich jedem AppleScripter hiermit nochmals wärmstens empfehlen kann, ist das Script natürlich am besten im programm-eigenen Scriptmenü aufgehoben u. somit jederzeit per Doppelklick aus der Script-Palette zu erreichen.
(anregungen, wünsche u. feedback erwünscht)
So, korrigierte Version:

SpecialChars&Tags2HTMLFromList hat Folgendes geschrieben:
(* set frontApp to currently used application *)
tell application "System Events"
   set frontApp to (title of every application process whose frontmost is true) as text
end tell
------------------------------------------------------------------------------
-- list with: discription or special characters | html-code | number of using ArrowLeft-key after intertion
-- (please note, that some spezial characters for html-tags have to escape with "\" in this script-strings)
set tag_list to
   {"a href", "<a href=\"\">________________</a>", 22}, ¬
   {"[fixed space]", "&nbsp;", 0}, ¬
   {(«data utxtF803» as Unicode text), "F803", 0}, ¬
   {(«data utxtF804» as Unicode text), "F804", 0}, ¬
   {(«data utxt25B6» as Unicode text), "25B6", 0}, ¬
   {(«data utxt21E5» as Unicode text), "21E5", 0}, ¬
   {(«data utxt21B5» as Unicode text), "21B5", 0}, ¬
   {(«data utxt2318» as Unicode text), "2318", 0}, ¬
   {(«data utxt2325» as Unicode text), "2325", 0}, ¬
   {(«data utxt21E7» as Unicode text), "21E7", 0}, ¬
   {(«data utxt2620» as Unicode text), "2620", 0}, ¬
   {(«data utxt262E» as Unicode text), "262E", 0}, ¬
   {(«data utxt270C» as Unicode text), "270C", 0}, ¬
   {(«data utxt266C» as Unicode text), "266C", 0}, ¬
   {(«data utxtF802» as Unicode text), "F802", 0}, ¬
   {(«data utxt2704» as Unicode text), "2704", 0}, ¬
   {(«data utxt260F» as Unicode text), "260F", 0}, ¬
   {(«data utxt2714» as Unicode text), "2714", 0}, ¬
   {(«data utxt2718» as Unicode text), "2718", 0}, ¬
   {(«data utxt2601» as Unicode text), "2601", 0}, ¬
   {(«data utxt231B» as Unicode text), "231B", 0}, ¬
   {(«data utxt2981» as Unicode text), "2981", 0}, ¬
   {(«data utxt29BE» as Unicode text), "29BE", 0}, ¬
   {(«data utxt265B» as Unicode text), "265B", 0}, ¬
   {(«data utxt2425» as Unicode text), "2425", 0}, ¬
   {(«data utxt3013» as Unicode text), "3013", 0}, ¬
   {(«data utxt0E4F» as Unicode text), "0E4F", 0} ¬
      }
------------------------------------------------------------------------------
-- initialize choose_list
set choose_list to {}
-- creating the list of selectable html-tags/special html-chars
repeat with t in tag_list
   if class of item 1 of t is Unicode text then
      set choose_list to choose_list & ((item 1 of t & " " & my specialchar(item 2 of t)) as Unicode text) as list
   else
      set choose_list to choose_list & (item 1 of t) as list
   end if
end repeat

-- your choice from list
activate
set chosen_tag to (choose from list choose_list with title "your choice:" with prompt "select tag of spezial character")

-- starting the insertion of the selected html-tag/special char
if chosen_tag is not false then
   repeat with tag in tag_list
      if (class of item 1 of chosen_tag) is Unicode text then
         my inserttags(text 5 thru -1 of (chosen_tag as Unicode text) as text, 0, frontApp)
         exit repeat
      else if (chosen_tag is in tag) then
         my inserttags((item 2 of tag), (item 3 of tag), frontApp)
         exit repeat
      end if
   end repeat
end if
------------------------------------------------------------------------------
-- instertion of full tags
on inserttags(tag_text, ArrowLeft, frontApp)
   tell application frontApp
      activate
      tell application "System Events"
         keystroke tag_text
         repeat ArrowLeft times
            key code 123
         end repeat
      end tell
   end tell
end inserttags

on specialchar(char_hex)
   set char_dez to "&#" & (do shell script ("printf \"%d\" 0x" & char_hex)) & ";"
end specialchar

_________________
- anholn deit kriegen -


Zuletzt bearbeitet von iScript am 22.01.2007 - 18:55, insgesamt 6-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 21.01.2007 - 01:56    Titel: Antworten mit Zitat

>>"?" kann nicht in Typ String umgewandelt werden<< bekomme ich beim Zeichen 25BA
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 21.01.2007 - 11:10    Titel: Antworten mit Zitat

stimmt. es funktionieren nur folgende zeichen aus der liste:
▶⇥↵⌘⌥⇧✌♬✄☏✔✘⦁⦾〓๏
hmmm. komisch, dass die nicht funktionierenden zeichen sich per choose from list trotzdem darstellen lassen!?
das kapiere ich nicht.
mach mal 25B6 draus, dann klappt das zeichen.
ich werd' die liste gelegentlich erweitern und auch tags hinzufügen.

über anregungen und wünsche und feedback würd ich mich freuen.
dann weiss ich auch, dass ich's nicht umsonst gemacht hab. Wink
_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 21.01.2007 - 11:22    Titel: Antworten mit Zitat

Das Problem ist wohl, daß "choose from list" (Zitat) "reinen Text" liefert.

Mein Vorschlag: Bau die entities (&#...; heißt entity, nicht tag) in die Auswahlliste mit ein. Siehe hier:
set frontApp to application "jEdit"

set choose_list to every paragraph of (do shell script "perl -Mopen=:utf8,:std -e 'printf(qq/%s\\t&#%d;\\n/,chr hex $_, hex $_) foreach (qw(
      F803
      F804
      25BA
      21E5
      21B5
      2318
      2325
      21E7
      2620
      262E
      270C
      266C
      F802
      2704
      260F
      2714
      2718
      2601
      231B
      2981
      29BE
      265B
      2425
      3013
      0E4F
   ));'")
set chosen_entity to (choose from list choose_list with title "your choice:" with prompt "select tag of spezial character")
if chosen_entity is not false then
   set chosen_entity to item 1 of chosen_entity
   insertentity(text (1 + (offset of tab in chosen_entity)) thru -1 of chosen_entity, 0, frontApp)
end if

on insertentity(entity_text, ArrowLeft, frontApp)
   tell frontApp
      activate
      tell application "System Events"
         keystroke entity_text
         repeat ArrowLeft times
            key code 70
         end repeat
      end tell
   end tell
end insertentity

Nicht berücksichtigt: Das "Arrow Left" und die spezielle Bezeichnung von entities wie &nbsp;. Das kann man übrigens auch zuverlässig als '#160; schreiben.

Erzähl mir mehr über die Randbedingungen. Dann kann ich das noch mit einkodieren.
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 21.01.2007 - 12:55    Titel: Antworten mit Zitat

Skeeve hat Folgendes geschrieben:
Das Problem ist wohl, daß "choose from list" (Zitat) "reinen Text" liefert.

aber dann müsste das doch klappen, tut's aber nicht:
set choosed_tag to (choose from list choose_list with title "your choice:" with prompt "select tag of spezial character") as Unicode text
das mit dem entity in der liste wäre natürlich eine möglichkeit. das kann man dann besser abgreifen/vergleichen. gute idee.

So, neue Version siehe oben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 21.01.2007 - 20:46    Titel: Antworten mit Zitat

&# fehlt
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 22.01.2007 - 02:34    Titel: Vielleicht gefällt Dir das hier auch... Antworten mit Zitat

Meine Version.

'schuldigung, iScript! Ich mag Deinen Initialisierungsteil nicht. Der ist mir zu "Eintippaufwendig".

  1. 2 Mal die Zeichenfolge eingeben, die für spezialzeichen benötigt wird
  2. Positionale Parameter in den Listen
  3. Man muß zählen um den Cursor zurück zu schicken


Zitat:
(* edit the application-name here to start this script with shortcuts
and use it in the application of your choice
*)
set frontApp to application "jEdit"

-- description see below at "prepare"
set possible_options to prepare({¬
   {display:"link", insert:"<a href=\"<CURSOR>\"> </a>"}, ¬
   {display:"Geschuetztes Leerzeichen", insert:"&nbsp;"}, ¬
   "F803", ¬
   "F804", ¬
   "25BA", ¬
   "21E5", ¬
   "21B5", ¬
   "2318", ¬
   "2325", ¬
   "21E7", ¬
   "2620", ¬
   "262E", ¬
   "270C", ¬
   "266C", ¬
   "F802", ¬
   "2704", ¬
   "260F", ¬
   "2714", ¬
   "2718", ¬
   "2601", ¬
   "231B", ¬
   "2981", ¬
   "29BE", ¬
   "265B", ¬
   "2425", ¬
   "3013", ¬
   "0E4F"})

set text_to_insert to choose_text_or_entity from possible_options

if text_to_insert is not false then insert_text into frontApp from text_to_insert

--
--
-- end of main program
--
-- Handlers follow
--
--
-- inserts the text_to_insert
-- into the frontApp
-- The first occurence of <CURSOR> will be removed
-- and the application will receive some crsr-left
-- keystrokes to move the cursor to that
-- position in the text
on insert_text into frontApp from text_to_insert
   set i to offset of "<CURSOR>" in text_to_insert
   if i > 0 then
      set text_to_insert to text 1 thru (i - 1) of text_to_insert & text (i + 8) thru -1 of text_to_insert
   end if
   tell frontApp
      activate
      tell application "System Events"
         keystroke text_to_insert
         if i > 0 then
            repeat (length of text_to_insert) - i + 1 times
               key code 123
            end repeat
         end if
      end tell
   end tell
end insert_text

-- prepares a list, "choose_text_or_entity"
-- expects.
-- expects a list containing either HEX Strings or
-- records.
-- The HEX Strings represent the UNICODE hex code of
-- a charecter. It's entity text will be inserted
-- the record has to be of the form:
-- {
-- display:"Text to show"
-- insert:"Text to insert"
-- }
on prepare(theList)
   set displaystrings to {}
   set callPerl to false
   repeat with i from 1 to count of theList
      if class of item i of theList is string then
         set callPerl to true
         copy item i of theList & " " to end of displaystrings
      else
         copy "0 " to end of displaystrings
      end if
   end repeat
   set i to 0
   set optionList to {display:{}, special:{}, insert:{}}
   set dspl to a reference to display of optionList
   set insrt to a reference to insert of optionList
   set spcl to a reference to special of optionList
   if callPerl then
      repeat with elt in every paragraph of (do shell script "perl -Mopen=:utf8,:std <<''
      foreach (qw(" & (displaystrings as string) & ")) {
         if ($_) {
            printf qq/%s\\t&#%d;\\n/,chr hex $_, hex $_;
         }
         else {
            print qq/\\n/;
         }
      }")
         set i to i + 1
         if length of elt > 0 then
            copy elt to the end of dspl
         else
            copy insert of item i of theList to the end of insrt
            copy display of item i of theList to the end of spcl
            copy tab & the end of spcl to the end of dspl
         end if
      end repeat
   else
      repeat count of theList times
         set i to i + 1
         copy insert of item i of theList to the end of insrt
         copy display of item i of theList to the end of spcl
         copy tab & the end of spcl to the end of dspl
      end repeat
   end if
   return optionList
end prepare

-- expects "possible_optinos", a record of lists
-- {
-- display:{ list of things to select from }
-- each things must contain a tab
-- returns everything after the tab except
-- if the tab is the first charecter
-- in that case everything after the tab is
-- the text that will be searched in
-- special:{ list of special texts }
-- if it's found, the item at the same position in
-- insert:{ list of texts to insert }
-- will be returned
-- }
on choose_text_or_entity from possible_options
   set chosen_text to choose from list display of possible_options
   if chosen_text is not false then
      set chosen_text to item 1 of chosen_text
      set i to offset of tab in chosen_text
      set text2insert to text (1 + i) thru -1 of chosen_text
      if i = 1 then
         repeat while item i of special of possible_options /= text2insert
            set i to i + 1
         end repeat
         return item i of insert of possible_options
      end if
      return text2insert
   end if
   return false
end choose_text_or_entity

Update: Kleine Korrektur die der Performanceverbesserung dient, wenn bereits alle Elemente der Liste für "prepare" im recordformat sind. Kleine Korrektur für den Abbruchfall.
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> Pool Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter