Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: scite - rozszerzamy funkconalność
Forum PHP.pl > Inne > Hydepark
tsharek
Hej,
Napisałem pare skrypcików w LUA do SciTE, jeśli ktoś może ich użyć smile.gif
skrypt 1:
Kod
function OnChar(ch)
 local html_tags={
   table=1,
   td=1,
   tr=1,
   span=1,
   div=1,
   html=1,
   font=1,
   head=1,
   body=1,
   title=1,
   style=1,
   script=1,
   center=1,
   object=1,
   a=1,
   b=1,
   i=1,
   u=1,
   p=1,
   ul=1,
   li=1,
   option=1,
   select=1,
   textarea=1,
   form=1,
   }

 editor:BeginUndoAction()
 local nextchr=editor.CharAt[editor.CurrentPos]
 local prevchr=editor.CharAt[editor.CurrentPos-2]
 local od=0
 local stos={}
 local c_stos=0
 local str_low
 if ch=='/' and prevchr==60 and nextchr==62 then
   local buf=editor:textrange(0, editor.CurrentPos-2)
   while true do
     local x, y, str=string.find(buf, "<([^ >]+)", od)
     if not x then
       if c_stos and stos[c_stos] then
         editor:InsertText(-1, stos[c_stos])
         editor:GotoPos(editor.CurrentPos+string.len(stos[c_stos])+1)
       end
       break
     end
     od=y+2
     str_low=string.lower(str)
     if string.sub(str_low, 1, 1)=="/" then
       str_low=string.sub(str_low, 2, string.len(str_low))
       if html_tags[str_low] and c_stos and stos[c_stos] then
         if string.lower(stos[c_stos])==str_low then c_stos=c_stos-1 end
       end
     elseif html_tags[str_low] then
       c_stos=c_stos+1
       stos[c_stos]=str
     end
   end
 elseif ch == '(' and nextchr ~= 41 then editor:InsertText(-1,')')
 elseif ch == '{' and nextchr ~= 125 then editor:InsertText(-1,'}')
 elseif ch == '[' and nextchr ~= 91 and prevchr ~=-59 then editor:InsertText(-1,']')  --dlatego prevchr~=-59 bo się myliło z ś w uicodzie
 elseif ch == '<' and nextchr ~= 62 then editor:InsertText(-1,'>')
 elseif ch == '"' and nextchr ~= 34 then editor:InsertText(-1,'"')
 elseif ch == '\'' and nextchr ~= 39 then editor:InsertText(-1,'\'')
 end
 editor:ScrollCaret()
 editor:EndUndoAction()
end


oparty na zdażeniu OnChar - wywływany po każdym wpisanym znaku. Kruciutki opisik:
- automatycznie zamyka nawiasy i qouty (z wyjątkiem kiedy następny znak jest już zamkniętym nawiasem/quotą - jak w EdHTML)
- automatycznie zamyka niektóre (patrz tablica) taki htmla, gdy wpiszemy / pomiędzy < i >

drugi skrypcik to konwerter polskich znaków. Mój SciTE zawsze pracuje w trybie utf-8, i wkórza mnie kiedy wczytuje pliki w kodowaniu iso-8859-2 lub windows-1250 bo wyskakują nieprzyjemne krzaczki. Dzięk skrótą klawiszowym mogę te krzaczki przekonwercić na utf-8 a później przy zapisywniu spowrotem na bazowe kodowanie.
Kod
function convert(typek)
 local arr_utf={
   '\196\133', '\196\132',
   '\196\135', '\196\134',
   '\196\153', '\196\152',
   '\197\130', '\197\129',
   '\195\179', '\195\147',
   '\197\155', '\197\154',
   '\197\188', '\197\187',
   '\197\186', '\197\185',
   '\197\132', '\197\131',
   }
 local arr_win={
   '\185', '\165',
   '\230', '\198',
   '\234', '\202',
   '\179', '\163',
   '\243', '\211',
   '\156', '\140',
   '\159', '\143',
   '\191', '\175',
   '\241', '\209',
   }

 local arr_iso={
   '\177', '\161',
   '\230', '\198',
   '\234', '\202',
   '\179', '\163',
   '\243', '\211',
   '\182', '\166',
   '\188', '\166',
   '\191', '\175',
   '\241', '\209',
   }

 --change utf-8 into iso-8859-2
 if (typek=="1") then
   for key,value in arr_utf do
     editor:SetText(string.gsub(editor:GetText(), value, arr_iso[key]));
   end
 --change iso-8859-2 into utf-8
 elseif (typek=="2") then
   for key,value in arr_utf do
     editor:SetText(string.gsub(editor:GetText(), arr_iso[key], value));
   end
 --change utf-8 into windows-1250
 elseif (typek=="3") then
   for key,value in arr_utf do
     editor:SetText(string.gsub(editor:GetText(), value, arr_win[key]));
   end
 --change windows1250 into utf-8
 elseif (typek=="4") then
   for key,value in arr_utf do
     editor:SetText(string.gsub(editor:GetText(), arr_win[key], value));
   end
 end
end


są to proste 2 skrypciki które pomagają mi bardzo w pracy - mogą pomódz i Wam.
Jeżeli jesteś początkującym SciTEowcem to jeszcze parę żeby te skrypciki zadziałały:)
utórz skopiuj se te skrypciki do jakiegoś pliku, powiedzmt "my.lua".
skopiuj go do głównego katalogu SciTE.
w configu SciTE np (SciTEGlobal.properties) dopisz gdzies na początku:
Kod
ext.lua.startup.script=$(SciteDefaultHome)/my.lua

puźniej wklej te linijki (i zmodyfikuj do swoich potrzeb):
Kod
 command.name.5.*=utf-8 2 iso-8859-2
 command.subsystem.5.*=3
 command.5.*=convert 1
 command.save.before.5.*=2

 command.name.6.*=iso-8859-2 to utf-8
 command.subsystem.6.*=3
 command.6.*=convert 2
 command.save.before.6.*=2
 
 command.name.7.*=utf-8 to windows-1250
 command.subsystem.7.*=3
 command.7.*=convert 3
 command.save.before.7.*=2

 command.name.8.*=winows-1250 to utf-8
 command.subsystem.8.*=3
 command.8.*=convert 4
 command.save.before.8.*=2

teraz pod ctr+5 .. ctr+8 masz funkcje zmiany kodowania.

testowałem skrypciki pod SciTE 1.63 pod windowsa

dodatkowo dla wygody kożystam z niektórych scryptów do scite które znajdują się na strionie:
http://lua-users.org/wiki/SciteScripts
(polecam: "Tab-to-space and vice versa" i "SciteCleanDocWhitespace")

dziś mam w planach dorobić jeszcze dodatkowe skrypciki które np. Bedą umożliwiały swobodne poruszanie kursorem oraz coś w rodzaju SciteCleanDocWhitespace tylko czyszczącej białe znaki w nowej lini oraz po przejściach kursorami (mam nadzieje że mi się to uda)

Jeżeli komuś chodź trochę pomogłem lub zachęciłem do kożystania z SciTE - to jest mi bardzo przyjemnie:)

Pozdrawiam
Marek Ogłodek (vel tsharek tongue.gif)

edit: zrobiłem te kursorki, ale nie podobają mi się sad.gif jak działają to widać że są troszke wolnawe, ale jeśli ktoś chce do potestowania:
my.lua:
Kod
function wyczysc(od_s,do_s)
    editor.TargetStart = od_s
    editor.TargetEnd = do_s
    editor:ReplaceTarget(string.gsub(editor:textrange(od_s,do_s), "([ \\t]+)$", ''))
    editor:ScrollCaret()
end
------------------
function lewo()
  if editor:PositionFromLine(editor:LineFromPosition(editor.CurrentPos))~=editor.CurrentPos then
    editor:GotoPos(editor.CurrentPos-1)
    editor:ScrollCaret()
  end
end
------------------
function prawo()
  if editor.LineEndPosition[editor:LineFromPosition(editor.CurrentPos)]~=editor.CurrentPos then

    editor:GotoPos(editor.CurrentPos+1)
  else
    editor:InsertText(-1,' ')
    editor:GotoPos(editor.CurrentPos+1)
  end
  editor:ScrollCaret()
end
------------------
function dol()
  local nextLine=editor:LineFromPosition(editor.CurrentPos)+1
  if nextLine<editor.LineCount then
    local nextLineStartPosition=editor:PositionFromLine(nextLine)
    local nextLineEndPosition=editor.LineEndPosition[nextLine]
    local curentLineStartPosition=editor:PositionFromLine(editor:LineFromPosition(editor.CurrentPos))
    local curentLineEndPosition=editor.LineEndPosition[editor:LineFromPosition(editor.CurrentPos)]
    local toNextLineAdd=editor.CurrentPos-curentLineStartPosition
    local nextLinePosition=nextLineStartPosition+toNextLineAdd
    if nextLineEndPosition<nextLinePosition then editor:InsertText(nextLineEndPosition,string.rep(" ", nextLinePosition-nextLineEndPosition)) end
    editor:GotoPos(nextLineStartPosition+toNextLineAdd)
    editor:ScrollCaret()

    --wyczysczenie syfu
    local prevline=editor:LineFromPosition(editor.CurrentPos)-1
    wyczysc(editor:PositionFromLine(prevline), editor.LineEndPosition[prevline])

  end
end
------------------
function gora()
  local nextLine=editor:LineFromPosition(editor.CurrentPos)-1
  if nextLine>=0 then
    local nextLineStartPosition=editor:PositionFromLine(nextLine)
    local nextLineEndPosition=editor.LineEndPosition[nextLine]
    local curentLineStartPosition=editor:PositionFromLine(editor:LineFromPosition(editor.CurrentPos))
    local curentLineEndPosition=editor.LineEndPosition[editor:LineFromPosition(editor.CurrentPos)]
    local toNextLineAdd=editor.CurrentPos-curentLineStartPosition
    local nextLinePosition=nextLineStartPosition+toNextLineAdd
    if nextLineEndPosition<nextLinePosition then editor:InsertText(nextLineEndPosition,string.rep(" ", nextLinePosition-nextLineEndPosition)) end
    editor:GotoPos(nextLineStartPosition+toNextLineAdd)
    editor:ScrollCaret()

    --wyczysczenie syfu
    local prevline=editor:LineFromPosition(editor.CurrentPos)+1
    wyczysc(editor:PositionFromLine(prevline), editor.LineEndPosition[prevline])
  end
end

SciTEGlobal.properties:
Kod
  command.name.9.*=lewo
  command.subsystem.9.*=3
  command.9.*=lewo
  command.save.before.9.*=2
  command.shortcut.9.*=Left

  command.name.10.*=prawo
  command.subsystem.10.*=3
  command.10.*=prawo
  command.save.before.10.*=2
  command.shortcut.10.*=Right

  command.name.11.*=dol
  command.subsystem.11.*=3
  command.11.*=dol
  command.save.before.11.*=2
  command.shortcut.11.*=Down

  command.name.12.*=gora
  command.subsystem.12.*=3
  command.12.*=gora
  command.save.before.12.*=2
  command.shortcut.12.*=Up
Cudi
Myśle że można by ten guide wrzucić na wiki.php.pl, ogólnie można zrobić kategorie o edytorach smile.gif
tsharek
jak zbiorę wiecej materiałów/napiszę więćej skryptów to może napiszę na wiki:)
rogrog
dzięki winksmiley.jpg SciTe rządzi;)
sztosz
Czy to dziala z Notepad++ ? Bo jest tez oparty o Scinetille
tsharek
Witam,

Niestety nie wiem czy działa z notepadem++, ale jeśli tylko ten programik ma wbudowaną obsługę LUA (nie musi mieć - i w SciTE da się to wyłączyć) oraz jeśli ma dołączoną klasę obsługi edytora (editor.*) to nie powinno być problemów. Przy okazji sprawdzę to:)

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.