· last year · Jan 10, 2024, 03:55 PM
1#Include <Optimization>
2
3;https://stackoverflow.com/questions/75980/when-are-you-supposed-to-use-escape-instead-of-encodeuri-encodeuricomponent/3608791#3608791
4
5/* https://coderwall.com/p/y347ug/encodeuri-vs-encodeuricomponent
6What we actually want for a well formed URL is to call encodeURI() on the base URL:
7
8encodeURI("http://www.google.com/results with spaces")
9http://www.google.com/results%20with%20spaces
10And encodeURIComponent() on the hash:
11
12encodeURIComponent("#some-anchor")
13%23some-anchor
14
15http://www.w3schools.com/jsref/jsref_encodeuri.asp points out that
16encodeURI() encodes special characters, except: , / ? : @ & = + $ #
17(Use encodeURIComponent() to encode these characters).
18*/
19
20api := {}
21api.api_dev_key := "VIP-rE963dNcmyOYvykxVtTQFL_vFt6-"
22api.api_user_name := "ounnuo"
23api.api_user_password := "PastebinPassword"
24api.api_user_key := "539347d1c1c95c00db38d49e83a1de42"
25apiPrefix := joinDic(api)
26
27Gui New, HWNDhGui +ToolWindow -DPIScale +E0x40000, Pastebin Tool
28Gui Margin, 0, 0
29Gui Font, s12, Consolas
30
31lvwW := A_ScreenWidth / 3
32lvwH := A_ScreenHeight >> 1
33Gui Add, ListView, HWNDhlvwPasteList x0 w%lvwW% h%lvwH% Grid
34
35Gui Add, Edit, HWNDhedt x+0 r1 section Center Disabled, Title
36posEdt := gcgPos(hedt)
37edtTitleW := lvwW - posEdt.w
38Gui Add, Edit, HWNDhedtTitle x+0 w%edtTitleW% r1 -wrap
39
40edtPasteH := lvwH - posEdt.h
41Gui Add, Edit, HWNDhedtPaste xs y+0 w%lvwW% h%edtPasteH% -wrap
42
43sideW := lvwW >> 1
44Gui Add, Edit, x+0 ys w%sideW% Center Disabled, api_paste_format:
45api_paste_format_list =
46(LTrim Join|
474cs = 4CS
486502acme = 6502 ACME Cross Assembler
496502kickass = 6502 Kick Assembler
506502tasm = 6502 TASM/64TASS
51abap = ABAP
52actionscript = ActionScript
53actionscript3 = ActionScript 3
54ada = Ada
55aimms = AIMMS
56algol68 = ALGOL 68
57apache = Apache Log
58applescript = AppleScript
59apt_sources = APT Sources
60arduino = Arduino
61arm = ARM
62asm = ASM (NASM)
63asp = ASP
64asymptote = Asymptote
65autoconf = autoconf
66autohotkey = Autohotkey|
67autoit = AutoIt
68avisynth = Avisynth
69awk = Awk
70bascomavr = BASCOM AVR
71bash = Bash
72basic4gl = Basic4GL
73dos = Batch
74bibtex = BibTeX
75b3d = Blitz3D
76blitzbasic = Blitz Basic
77bmx = BlitzMax
78bnf = BNF
79boo = BOO
80bf = BrainFuck
81c = C
82csharp = C#
83c_winapi = C (WinAPI)
84cpp = C++
85cpp-winapi = C++ (WinAPI)
86cpp-qt = C++ (with Qt extensions)
87c_loadrunner = C: Loadrunner
88caddcl = CAD DCL
89cadlisp = CAD Lisp
90ceylon = Ceylon
91cfdg = CFDG
92c_mac = C for Macs
93chaiscript = ChaiScript
94chapel = Chapel
95cil = C Intermediate Language
96clojure = Clojure
97klonec = Clone C
98klonecpp = Clone C++
99cmake = CMake
100cobol = COBOL
101coffeescript = CoffeeScript
102cfm = ColdFusion
103css = CSS
104cuesheet = Cuesheet
105d = D
106dart = Dart
107dcl = DCL
108dcpu16 = DCPU-16
109dcs = DCS
110delphi = Delphi
111oxygene = Delphi Prism (Oxygene)
112diff = Diff
113div = DIV
114dot = DOT
115e = E
116ezt = Easytrieve
117ecmascript = ECMAScript
118eiffel = Eiffel
119email = Email
120epc = EPC
121erlang = Erlang
122euphoria = Euphoria
123fsharp = F#
124falcon = Falcon
125filemaker = Filemaker
126fo = FO Language
127f1 = Formula One
128fortran = Fortran
129freebasic = FreeBasic
130freeswitch = FreeSWITCH
131gambas = GAMBAS
132gml = Game Maker
133gdb = GDB
134gdscript = GDScript
135genero = Genero
136genie = Genie
137gettext = GetText
138go = Go
139godot-glsl = Godot GLSL
140groovy = Groovy
141gwbasic = GwBasic
142haskell = Haskell
143haxe = Haxe
144hicest = HicEst
145hq9plus = HQ9 Plus
146html4strict = HTML
147html5 = HTML 5
148icon = Icon
149idl = IDL
150ini = INI file
151inno = Inno Script
152intercal = INTERCAL
153io = IO
154ispfpanel = ISPF Panel Definition
155j = J
156java = Java
157java5 = Java 5
158javascript = JavaScript
159jcl = JCL
160jquery = jQuery
161json = JSON
162julia = Julia
163kixtart = KiXtart
164kotlin = Kotlin
165ksp = KSP (Kontakt Script)
166latex = Latex
167ldif = LDIF
168lb = Liberty BASIC
169lsl2 = Linden Scripting
170lisp = Lisp
171llvm = LLVM
172locobasic = Loco Basic
173logtalk = Logtalk
174lolcode = LOL Code
175lotusformulas = Lotus Formulas
176lotusscript = Lotus Script
177lscript = LScript
178lua = Lua
179m68k = M68000 Assembler
180magiksf = MagikSF
181make = Make
182mapbasic = MapBasic
183markdown = Markdown
184matlab = MatLab
185mercury = Mercury
186metapost = MetaPost
187mirc = mIRC
188mmix = MIX Assembler
189mk-61 = MK-61/52
190modula2 = Modula 2
191modula3 = Modula 3
19268000devpac = Motorola 68000 HiSoft Dev
193mpasm = MPASM
194mxml = MXML
195mysql = MySQL
196nagios = Nagios
197netrexx = NetRexx
198newlisp = newLISP
199nginx = Nginx
200nim = Nim
201nsis = NullSoft Installer
202oberon2 = Oberon 2
203objeck = Objeck Programming Langua
204objc = Objective C
205ocaml = OCaml
206ocaml-brief = OCaml Brief
207octave = Octave
208pf = OpenBSD PACKET FILTER
209glsl = OpenGL Shading
210oorexx = Open Object Rexx
211oobas = Openoffice BASIC
212oracle8 = Oracle 8
213oracle11 = Oracle 11
214oz = Oz
215parasail = ParaSail
216parigp = PARI/GP
217pascal = Pascal
218pawn = Pawn
219pcre = PCRE
220per = Per
221perl = Perl
222perl6 = Perl 6
223phix = Phix
224php = PHP
225php-brief = PHP Brief
226pic16 = Pic 16
227pike = Pike
228pixelbender = Pixel Bender
229pli = PL/I
230plsql = PL/SQL
231postgresql = PostgreSQL
232postscript = PostScript
233povray = POV-Ray
234powerbuilder = PowerBuilder
235powershell = PowerShell
236proftpd = ProFTPd
237progress = Progress
238prolog = Prolog
239properties = Properties
240providex = ProvideX
241puppet = Puppet
242purebasic = PureBasic
243pycon = PyCon
244python = Python
245pys60 = Python for S60
246q = q/kdb+
247qbasic = QBasic
248qml = QML
249rsplus = R
250racket = Racket
251rails = Rails
252rbs = RBScript
253rebol = REBOL
254reg = REG
255rexx = Rexx
256robots = Robots
257roff = Roff Manpage
258rpmspec = RPM Spec
259ruby = Ruby
260gnuplot = Ruby Gnuplot
261rust = Rust
262sas = SAS
263scala = Scala
264scheme = Scheme
265scilab = Scilab
266scl = SCL
267sdlbasic = SdlBasic
268smalltalk = Smalltalk
269smarty = Smarty
270spark = SPARK
271sparql = SPARQL
272sqf = SQF
273sql = SQL
274sshconfig = SSH Config
275standardml = StandardML
276stonescript = StoneScript
277sclang = SuperCollider
278swift = Swift
279systemverilog = SystemVerilog
280tsql = T-SQL
281tcl = TCL
282teraterm = Tera Term
283texgraph = TeXgraph
284thinbasic = thinBasic
285typescript = TypeScript
286typoscript = TypoScript
287unicon = Unicon
288uscript = UnrealScript
289upc = UPC
290urbi = Urbi
291vala = Vala
292vbnet = VB.NET
293vbscript = VBScript
294vedit = Vedit
295verilog = VeriLog
296vhdl = VHDL
297vim = VIM
298vb = VisualBasic
299visualfoxpro = VisualFoxPro
300visualprolog = Visual Pro Log
301whitespace = WhiteSpace
302whois = WHOIS
303winbatch = Winbatch
304xbasic = XBasic
305xml = XML
306xojo = Xojo
307xorg_conf = Xorg Config
308xpp = XPP
309yaml = YAML
310yara = YARA
311z80 = Z80 Assembler
312zxbasic = ZXBasic
313)
314Gui Add, ComboBox, y+0 wp HWNDhcboFormat, % api_paste_format_list
315
316Gui Add, Edit, y+0 wp hp Hidden
317Gui Add, Edit, y+0 wp Center Disabled, api_paste_private:
318Gui Add, DDL, y+0 wp HWNDhddlPrivate, 0 = Public|1 = Unlisted|2 = Private||
319
320Gui Add, Edit, y+0 wp hp Hidden
321Gui Add, Edit, y+0 wp Center Disabled, api_paste_expire_date:
322Gui Add, DDL, y+0 wp HWNDhddlExpireDate, N = Never||10M = 10 Minutes|1H = 1 Hour|1D = 1 Day|1W = 1 Week|2W = 2 Weeks|1M = 1 Month|6M = 6 Months|1Y = 1 Year
323
324Gui Add, Edit, y+0 wp hp Hidden
325Gui Add, Button, y+0 wp, Get List
326
327Gui Add, StatusBar
328Gui Show
329
330getList()
331return
332
333GuiClose:
334GuiEscape:
335 ExitApp
336
337say(s := "") {
338 SB_SetText(s)
339}
340
341joinDic(obj) {
342 local
343 s := ""
344 for k, v in obj
345 s .= k "=" v "&"
346 return SubStr(s, 1, -1)
347}
348
349getList() {
350 local
351 global apiPrefix, hedtPaste, hlvwPasteList
352
353 say("Getting paste list...")
354 content := apiPrefix
355 . "&api_option=list"
356 . "&api_results_limit=1000"
357 xmlPasteList := whr("https://pastebin.com/api/api_post.php", content)
358
359 arrPasteList := parseXML(xmlPasteList)
360
361 Gui ListView, % hlvwPasteList
362 ;clear listview
363 LV_Delete()
364 loop % LV_GetCount("Col")
365 LV_DeleteCol(1)
366
367 map(arrPasteList[1], Func("addHeader").Bind(hlvwPasteList))
368 LV_ModifyCol(1, "AutoHdr")
369
370 map(arrPasteList, Func("addBody"))
371 loop % LV_GetCount("Col")
372 LV_ModifyCol("AutoHdr")
373
374 say("Paste list updated.")
375 return
376}
377
378whr(url, content) {
379 local
380 whr51 := ComObjCreate("WinHttp.WinHttpRequest.5.1")
381 whr51.Open("POST", url, true)
382 whr51.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")
383 whr51.Send(content)
384 whr51.WaitForResponse()
385 return whr51.ResponseText
386}
387
388parseXML(strXML) {
389 local
390 pasteList := []
391 loop parse, strXML, `n, `r
392 {
393 switch (curNode := Trim(A_LoopField)) {
394 case "<paste>": curPaste := {}
395 case "</paste>": pasteList.Push(curPaste)
396 default:
397 lab := InStr(curNode, "<") ;Left Angle Bracket
398 rab := InStr(curNode, ">") ;Right Angle Bracket
399 key := SubStr(curNode, lab + 1, rab - lab - 1)
400
401 labs := InStr(curNode, "</" key ">") ;Left Angle Bracket with Slash
402 val := SubStr(curNode, rab + 1, labs - rab - 1)
403
404 curPaste[key] := val
405 }
406 }
407 return pasteList
408}
409
410addHeader(hlvw, _, colName) {
411 LV_InsertCol(200, "", colName)
412}
413
414addBody(objPasteInfo) {
415 LV_Add("", reduce(objPasteInfo, Func("readable"), [])*)
416}
417
418readable(arrValues, val, key) {
419 local
420 static dicPrivate := {0:"Public", 1:"Unlisted", 2:"Private"}
421
422 newValues := arrValues.Clone()
423 switch key {
424 case "paste_date":
425 FormatTime pasteDate, % parsePasteDate(val), % "yyyy/MM/dd HH:mm:ss"
426 readableVal := pasteDate
427
428 case "paste_private":
429 readableVal := dicPrivate[val]
430
431 default:
432 readableVal := val
433 }
434 newValues.Push(readableVal)
435 return newValues
436}
437
438parsePasteDate(aPasteDate) {
439 local
440 static sc := ComObjCreate("ScriptControl")
441 sc.Language := "jscript"
442
443 aPasteDate .= "000"
444 sc.AddCode(format("var d = new Date({});", aPasteDate))
445
446 yyyy := format("{:4d}", sc.eval("d.getFullYear()"))
447 mm := format("{:02d}", sc.eval("d.getMonth()+1"))
448 dd := format("{:02d}", sc.eval("d.getDate()"))
449 hh24 := format("{:02d}", sc.eval("d.getHours()"))
450 mi := format("{:02d}", sc.eval("d.getMinutes()"))
451 ss := format("{:02d}", sc.eval("d.getSeconds()"))
452
453 return yyyy mm dd hh24 mi ss
454}
455
456;{ String }
457class String {
458 static _ := "".base.base := String
459
460 length {
461 get {
462 return StrLen(this)
463 }
464 }
465
466 __Call(method, args*) {
467 if (method != "")
468 return %method%(this, args*) ;call `method` as normal function
469 }
470}
471
472println(args*) {
473 local
474 s := format(args*)
475 ComObjActive("SciTE4AHK.Application").Output(s "`n")
476 return s
477}
478
479;{ Functions }
480getMonitorWorkArea() {
481 local
482 SysGet mwa, MonitorWorkArea
483 return {x:mwaLeft
484 , y:mwaTop
485 , x2:mwaRight
486 , y2:mwaBottom
487 , w:mwaRight - mwaLeft
488 , h:mwaBottom - mwaTop}
489}
490
491gcgPos(ControlHwnd) {
492 local
493 GuiControlGet controlPos_, Pos, % ControlHwnd
494 return {x:controlPos_x
495 , y:controlPos_y
496 , w:controlPos_w
497 , h:controlPos_h
498 , x2:controlPos_x + controlPos_w
499 , y2:controlPos_y + controlPos_h}
500}
501
502map(obj, callbackFn) {
503 local
504 newObj := {}
505 for key, val in obj
506 newObj[key] := %callbackFn%(val, key, obj)
507 return newObj
508}
509
510reduce(obj, callbackFn, initialValue*) {
511 ;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
512 local
513 enumerator := ObjNewEnum(obj)
514
515 initialValue.Count()
516 ? accumulator := initialValue[1]
517 : enumerator[firstKey, accumulator]
518
519 while enumerator[currentKey, currentValue]
520 accumulator := %callbackFn%(accumulator, currentValue, currentKey, obj)
521
522 return accumulator
523}