mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Merge branch 'master' into feature-Mathematica10Extensions
This commit is contained in:
@@ -181,6 +181,14 @@ module Linguist
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Common Lisp", "NewLisp" do |data|
|
||||
if /^\s*\((defun|in-package|defpackage) /.match(data)
|
||||
Language["Common Lisp"]
|
||||
elsif /^\s*\(define /.match(data)
|
||||
Language["NewLisp"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "TypeScript", "XML" do |data|
|
||||
if data.include?("<TS ")
|
||||
Language["XML"]
|
||||
|
||||
@@ -1888,6 +1888,19 @@ NetLogo:
|
||||
tm_scope: source.lisp
|
||||
ace_mode: lisp
|
||||
|
||||
NewLisp:
|
||||
type: programming
|
||||
lexer: NewLisp
|
||||
color: "#eedd66"
|
||||
extensions:
|
||||
- .nl
|
||||
- .lisp
|
||||
- .lsp
|
||||
interpreters:
|
||||
- newlisp
|
||||
tm_scope: source.lisp
|
||||
ace_mode: lisp
|
||||
|
||||
Nginx:
|
||||
type: markup
|
||||
extensions:
|
||||
|
||||
@@ -33,7 +33,8 @@ module Linguist
|
||||
['<!--', '-->'], # XML
|
||||
['{-', '-}'], # Haskell
|
||||
['(*', '*)'], # Coq
|
||||
['"""', '"""'] # Python
|
||||
['"""', '"""'], # Python
|
||||
["'''", "'''"] # Python
|
||||
]
|
||||
|
||||
START_SINGLE_LINE_COMMENT = Regexp.compile(SINGLE_LINE_COMMENTS.map { |c|
|
||||
|
||||
21
samples/Common Lisp/sample.lsp
Normal file
21
samples/Common Lisp/sample.lsp
Normal file
@@ -0,0 +1,21 @@
|
||||
;;;; -*- lisp -*-
|
||||
|
||||
(in-package :foo)
|
||||
|
||||
;;; Header comment.
|
||||
(defvar *foo*)
|
||||
|
||||
(eval-when (:execute :compile-toplevel :load-toplevel)
|
||||
(defun add (x &optional y &key z)
|
||||
(declare (ignore z))
|
||||
;; Inline comment.
|
||||
(+ x (or y 1))))
|
||||
|
||||
#|
|
||||
Multi-line comment.
|
||||
|#
|
||||
|
||||
(defmacro foo (x &body b)
|
||||
(if x
|
||||
`(1+ ,x) ;After-line comment.
|
||||
42))
|
||||
239
samples/NewLisp/irc.lsp
Normal file
239
samples/NewLisp/irc.lsp
Normal file
@@ -0,0 +1,239 @@
|
||||
#!/usr/bin/env newlisp
|
||||
|
||||
;; @module IRC
|
||||
;; @description a basic irc library
|
||||
;; @version early alpha! 0.1 2013-01-02 20:11:22
|
||||
;; @author cormullion
|
||||
;; Usage:
|
||||
;; (IRC:init "newlithper") ; a username/nick (not that one obviously :-)
|
||||
;; (IRC:connect "irc.freenode.net" 6667) ; irc/server
|
||||
;; (IRC:join-channel {#newlisp}) ; join a room
|
||||
;; either (IRC:read-irc-loop) ; loop - monitor only, no input
|
||||
;; or (IRC:session) ; a command-line session, end with /QUIT
|
||||
|
||||
(context 'IRC)
|
||||
(define Inickname)
|
||||
(define Ichannels)
|
||||
(define Iserver)
|
||||
(define Iconnected)
|
||||
(define Icallbacks '())
|
||||
(define Idle-time 400) ; seconds
|
||||
(define Itime-stamp) ; time since last message was processed
|
||||
|
||||
(define (register-callback callback-name callback-function)
|
||||
(println {registering callback for } callback-name { : } (sym (term callback-function) (prefix callback-function)))
|
||||
(push (list callback-name (sym (term callback-function) (prefix callback-function))) Icallbacks))
|
||||
|
||||
(define (deregister-callback callback-name)
|
||||
(println {deregistering callback for } callback-name)
|
||||
(setf (assoc "idle-event" Icallbacks) nil)
|
||||
(println {current callbacks: } Icallbacks))
|
||||
|
||||
(define (do-callback callback-name data)
|
||||
(when (set 'func (lookup callback-name Icallbacks)) ; find first callback
|
||||
(if-not (catch (apply func (list data)) 'error)
|
||||
(println {error in callback } callback-name {: } error))))
|
||||
|
||||
(define (do-callbacks callback-name data)
|
||||
(dolist (rf (ref-all callback-name Icallbacks))
|
||||
(set 'callback-entry (Icallbacks (first rf)))
|
||||
(when (set 'func (last callback-entry))
|
||||
(if-not (catch (apply func (list data)) 'error)
|
||||
(println {error in callback } callback-name {: } error)))))
|
||||
|
||||
(define (init str)
|
||||
(set 'Inickname str)
|
||||
(set 'Iconnected nil)
|
||||
(set 'Ichannels '())
|
||||
(set 'Itime-stamp (time-of-day)))
|
||||
|
||||
(define (connect server port)
|
||||
(set 'Iserver (net-connect server port))
|
||||
(net-send Iserver (format "USER %s %s %s :%s\r\n" Inickname Inickname Inickname Inickname))
|
||||
(net-send Iserver (format "NICK %s \r\n" Inickname))
|
||||
(set 'Iconnected true)
|
||||
(do-callbacks "connect" (list (list "server" server) (list "port" port))))
|
||||
|
||||
(define (identify password)
|
||||
(net-send Iserver (format "PRIVMSG nickserv :identify %s\r\n" password)))
|
||||
|
||||
(define (join-channel channel)
|
||||
(when (net-send Iserver (format "JOIN %s \r\n" channel))
|
||||
(push channel Ichannels)
|
||||
(do-callbacks "join-channel" (list (list "channel" channel) (list "nickname" Inickname)))))
|
||||
|
||||
(define (part chan)
|
||||
(if-not (empty? chan)
|
||||
; leave specified
|
||||
(begin
|
||||
(net-send Iserver (format "PART %s\r\n" chan))
|
||||
(replace channel Ichannels)
|
||||
(do-callbacks "part" (list (list "channel" channel))))
|
||||
; leave all
|
||||
(begin
|
||||
(dolist (channel Ichannels)
|
||||
(net-send Iserver (format "PART %s\r\n" channel))
|
||||
(replace channel Ichannels)
|
||||
(do-callbacks "part" (list (list "channel" channel)))))))
|
||||
|
||||
(define (do-quit message)
|
||||
(do-callbacks "quit" '()) ; chance to do stuff before quit...
|
||||
(net-send Iserver (format "QUIT :%s\r\n" message))
|
||||
(sleep 1000)
|
||||
(set 'Ichannels '())
|
||||
(close Iserver)
|
||||
(set 'Iconnected nil))
|
||||
|
||||
(define (privmsg user message)
|
||||
(net-send Iserver (format "PRIVMSG %s :%s\r\n" user message)))
|
||||
|
||||
(define (notice user message)
|
||||
(net-send Iserver (format "NOTICE %s :%s\r\n" user message)))
|
||||
|
||||
(define (send-to-server message (channel nil))
|
||||
(cond
|
||||
((starts-with message {/}) ; default command character
|
||||
(set 'the-message (replace "^/" (copy message) {} 0)) ; keep original
|
||||
(net-send Iserver (format "%s \r\n" the-message)) ; send it
|
||||
; do a quit
|
||||
(if (starts-with (lower-case the-message) "quit")
|
||||
(do-quit { enough})))
|
||||
(true
|
||||
(if (nil? channel)
|
||||
; say to all channels
|
||||
(dolist (c Ichannels)
|
||||
(net-send Iserver (format "PRIVMSG %s :%s\r\n" c message)))
|
||||
; say to specified channel
|
||||
(if (find channel Ichannels)
|
||||
(net-send Iserver (format "PRIVMSG %s :%s\r\n" channel message))))))
|
||||
(do-callbacks "send-to-server" (list (list "channel" channel) (list "message" message))))
|
||||
|
||||
(define (process-command sender command text)
|
||||
(cond
|
||||
((= sender "PING")
|
||||
(net-send Iserver (format "PONG %s\r\n" command)))
|
||||
((or (= command "NOTICE") (= command "PRIVMSG"))
|
||||
(process-message sender command text))
|
||||
((= command "JOIN")
|
||||
(set 'username (first (clean empty? (parse sender {!|:} 0))))
|
||||
(set 'channel (last (clean empty? (parse sender {!|:} 0))))
|
||||
(println {username } username { joined } channel)
|
||||
(do-callbacks "join" (list (list "channel" channel) (list "username" username))))
|
||||
(true
|
||||
nil)))
|
||||
|
||||
(define (process-message sender command text)
|
||||
(let ((username {} target {} message {}))
|
||||
(set 'username (first (clean empty? (parse sender {!|:} 0))))
|
||||
(set 'target (trim (first (clean empty? (parse text {!|:} 0)))))
|
||||
(set 'message (slice text (+ (find {:} text) 1)))
|
||||
(cond
|
||||
((starts-with message "\001")
|
||||
(process-ctcp username target message))
|
||||
((find target Ichannels)
|
||||
(cond
|
||||
((= command {PRIVMSG})
|
||||
(do-callbacks "channel-message" (list (list "channel" target) (list "username" username) (list "message" message))))
|
||||
((= command {NOTICE})
|
||||
(do-callbacks "channel-notice" (list (list "channel" target) (list "username" username) (list "message" message))))))
|
||||
((= target Inickname)
|
||||
(cond
|
||||
((= command {PRIVMSG})
|
||||
(do-callbacks "private-message" (list (list "username" username) (list "message" message))))
|
||||
((= command {NOTICE})
|
||||
(do-callbacks "private-notice" (list (list "username" username) (list "message" message))))))
|
||||
(true
|
||||
nil))))
|
||||
|
||||
(define (process-ctcp username target message)
|
||||
(cond
|
||||
((starts-with message "\001VERSION\001")
|
||||
(net-send Iserver (format "NOTICE %s :\001VERSION %s\001\r\n" username message)))
|
||||
((starts-with message "\001PING")
|
||||
(set 'data (first (rest (clean empty? (parse message { } 0)))))
|
||||
(set 'data (trim data "\001" "\001"))
|
||||
(net-send Iserver (format "NOTICE %s :\001PING %s\001\r\n" username data)))
|
||||
((starts-with message "\001ACTION")
|
||||
; (set 'data (first (rest (clean empty? (parse message { } 0)))))
|
||||
; (set 'data (join data { }))
|
||||
; (set 'data (trim data "\001" "\001"))
|
||||
(if (find target Ichannels)
|
||||
(do-callbacks "channel-action" (list (list "username" username) (list "message" message))))
|
||||
(if (= target Inickname)
|
||||
(do-callbacks "private-action" (list (list "username" username) (list "message" message)))))
|
||||
((starts-with message "\001TIME\001")
|
||||
(net-send Iserver (format "NOTICE %s:\001TIME :%s\001\r\n" username (date))))))
|
||||
|
||||
(define (parse-buffer raw-buffer)
|
||||
(let ((messages (clean empty? (parse raw-buffer "\r\n" 0)))
|
||||
(sender {} command {} text {}))
|
||||
; check for elapsed time since last activity
|
||||
(when (> (sub (time-of-day) Itime-stamp) (mul Idle-time 1000))
|
||||
(do-callbacks "idle-event")
|
||||
(set 'Itime-stamp (time-of-day)))
|
||||
(dolist (message messages)
|
||||
(set 'message-parts (parse message { }))
|
||||
(unless (empty? message-parts)
|
||||
(set 'sender (first message-parts))
|
||||
(catch (set 'command (first (rest message-parts))) 'error)
|
||||
(catch (set 'text (join (rest (rest message-parts)) { })) 'error))
|
||||
(process-command sender command text))))
|
||||
|
||||
(define (read-irc)
|
||||
(let ((buffer {}))
|
||||
(when (!= (net-peek Iserver) 0)
|
||||
(net-receive Iserver buffer 8192 "\n")
|
||||
(unless (empty? buffer)
|
||||
(parse-buffer buffer)))))
|
||||
|
||||
(define (read-irc-loop) ; monitoring
|
||||
(let ((buffer {}))
|
||||
(while Iconnected
|
||||
(read-irc)
|
||||
(sleep 1000))))
|
||||
|
||||
(define (print-raw-message data) ; example of using a callback
|
||||
(set 'raw-data (lookup "message" data))
|
||||
(set 'channel (lookup "channel" data))
|
||||
(set 'message-text raw-data)
|
||||
(println (date (date-value) 0 {%H:%M:%S }) username {> } message-text))
|
||||
|
||||
(define (print-outgoing-message data)
|
||||
(set 'raw-data (lookup "message" data))
|
||||
(set 'channel (lookup "channel" data))
|
||||
(set 'message-text raw-data)
|
||||
(println (date (date-value) 0 {%H:%M:%S }) Inickname {> } message-text))
|
||||
|
||||
(define (session); interactive terminal
|
||||
; must add callbacks to display messages
|
||||
(register-callback "channel-message" 'print-raw-message)
|
||||
(register-callback "send-to-server" 'print-outgoing-message)
|
||||
(while Iconnected
|
||||
(while (zero? (peek 0))
|
||||
(read-irc)
|
||||
(sleep 1000))
|
||||
(send-to-server (string (read-line 0))))
|
||||
(println {finished session } (date))
|
||||
(exit))
|
||||
|
||||
; end of IRC code
|
||||
|
||||
[text]
|
||||
|
||||
simple bot code:
|
||||
(load (string (env {HOME}) {/projects/programming/newlisp-projects/irc.lsp}))
|
||||
(context 'BOT)
|
||||
(define bot-name "bot")
|
||||
(define (join-channel data)
|
||||
(println {in BOT:join-channel with data: } data))
|
||||
(define (process-message data)
|
||||
????)
|
||||
(IRC:register-callback "join-channel" 'join-channel)
|
||||
(IRC:register-callback "channel-message" 'process-message)
|
||||
(IRC:register-callback "idle-event" 'do-idle-event)
|
||||
(IRC:register-callback "send-to-server" 'do-send-event)
|
||||
(IRC:init bot-name)
|
||||
(IRC:connect "irc.freenode.net" 6667)
|
||||
(IRC:join-channel {#newlisp})
|
||||
(IRC:read-irc-loop)
|
||||
[/text]
|
||||
195
samples/NewLisp/log-to-database.lisp
Normal file
195
samples/NewLisp/log-to-database.lisp
Normal file
@@ -0,0 +1,195 @@
|
||||
(module "sqlite3.lsp") ; loads the SQLite3 database module
|
||||
|
||||
; FUNCTIONS-------------------------------------------------
|
||||
|
||||
(define (displayln str-to-display)
|
||||
(println str-to-display)
|
||||
)
|
||||
|
||||
(define (open-database sql-db-to-open)
|
||||
(if (sql3:open (string sql-db-to-open ".db"))
|
||||
(displayln "")
|
||||
(displayln "There was a problem opening the database " sql-db-to-open ": " (sql3:error))))
|
||||
|
||||
(define (close-database)
|
||||
(if (sql3:close)
|
||||
(displayln "")
|
||||
(displayln "There was a problem closing the database: " (sql3:error))))
|
||||
|
||||
;====== SAFE-FOR-SQL ===============================================================
|
||||
; this function makes strings safe for inserting into SQL statements
|
||||
; to avoid SQL injection issues
|
||||
; it's simple right now but will add to it later
|
||||
;===================================================================================
|
||||
(define (safe-for-sql str-sql-query)
|
||||
(if (string? str-sql-query) (begin
|
||||
(replace "&" str-sql-query "&")
|
||||
(replace "'" str-sql-query "'")
|
||||
(replace "\"" str-sql-query """)
|
||||
))
|
||||
(set 'result str-sql-query))
|
||||
|
||||
(define (query sql-text)
|
||||
(set 'sqlarray (sql3:sql sql-text)) ; results of query
|
||||
(if sqlarray
|
||||
(setq query-return sqlarray)
|
||||
(if (sql3:error)
|
||||
(displayln (sql3:error) " query problem ")
|
||||
(setq query-return nil))))
|
||||
|
||||
(define-macro (create-record)
|
||||
; first save the values
|
||||
(set 'temp-record-values nil)
|
||||
(set 'temp-table-name (first (args)))
|
||||
;(displayln "<BR>Arguments: " (args))
|
||||
(dolist (s (rest (args))) (push (eval s) temp-record-values -1))
|
||||
; now save the arguments as symbols under the context "DB"
|
||||
(dolist (s (rest (args)))
|
||||
(set 'temp-index-num (string $idx)) ; we need to number the symbols to keep them in the correct order
|
||||
(if (= (length temp-index-num) 1) (set 'temp-index-num (string "0" temp-index-num))) ; leading 0 keeps the max at 100.
|
||||
(sym (string temp-index-num s) 'DB))
|
||||
; now create the sql query
|
||||
(set 'temp-sql-query (string "INSERT INTO " temp-table-name " ("))
|
||||
;(displayln "<P>TABLE NAME: " temp-table-name)
|
||||
;(displayln "<P>SYMBOLS: " (symbols DB))
|
||||
;(displayln "<BR>VALUES: " temp-record-values)
|
||||
(dolist (d (symbols DB)) (extend temp-sql-query (rest (rest (rest (rest (rest (string d)))))) ", "))
|
||||
(set 'temp-sql-query (chop (chop temp-sql-query)))
|
||||
(extend temp-sql-query ") VALUES (")
|
||||
(dolist (q temp-record-values)
|
||||
(if (string? q) (extend temp-sql-query "'")) ; only quote if value is non-numeric
|
||||
(extend temp-sql-query (string (safe-for-sql q)))
|
||||
(if (string? q) (extend temp-sql-query "'")) ; close quote if value is non-numeric
|
||||
(extend temp-sql-query ", ")) ; all values are sanitized to avoid SQL injection
|
||||
(set 'temp-sql-query (chop (chop temp-sql-query)))
|
||||
(extend temp-sql-query ");")
|
||||
;(displayln "<p>***** SQL QUERY: " temp-sql-query)
|
||||
(displayln (query temp-sql-query)) ; actually run the query against the database
|
||||
(delete 'DB) ; we're done, so delete all symbols in the DB context.
|
||||
)
|
||||
|
||||
(define-macro (update-record)
|
||||
; first save the values
|
||||
(set 'temp-record-values nil)
|
||||
(set 'temp-table-name (first (args)))
|
||||
(set 'continue true) ; debugging
|
||||
(dolist (s (rest (args))) (push (eval s) temp-record-values -1))
|
||||
; now save the arguments as symbols under the context "D2"
|
||||
(dolist (st (rest (args)))
|
||||
(set 'temp-index-num (string $idx)) ; we need to number the symbols to keep them in the correct order
|
||||
(if (= (length temp-index-num) 1) (set 'temp-index-num (string "0" temp-index-num))) ; leading 0 keeps the max at 100.
|
||||
;(displayln "<br>SYMBOL>>>>" (string temp-index-num st) "<<<") ; debugging
|
||||
(sym (string temp-index-num st) 'D2)
|
||||
)
|
||||
(if continue (begin ; --- temporary debugging
|
||||
; now create the sql query
|
||||
(set 'temp-sql-query (string "UPDATE " temp-table-name " SET "))
|
||||
;(displayln "<P>TABLE NAME: " temp-table-name)
|
||||
;(displayln "<P>SYMBOLS: " (symbols D2))
|
||||
;(displayln "<BR>VALUES: " temp-record-values)
|
||||
(dolist (d (rest (symbols D2))) ; ignore the first argument, as it will be the ConditionColumn for later
|
||||
(extend temp-sql-query (rest (rest (rest (rest (rest (string d)))))) "=")
|
||||
(set 'q (temp-record-values (+ $idx 1)))
|
||||
(if (string? q) (extend temp-sql-query "'")) ; only quote if value is non-numeric
|
||||
(extend temp-sql-query (string (safe-for-sql q)))
|
||||
(if (string? q) (extend temp-sql-query "'")) ; close quote if value is non-numeric
|
||||
(extend temp-sql-query ", ") ; all values are sanitized to avoid SQL injection
|
||||
)
|
||||
(set 'temp-sql-query (chop (chop temp-sql-query)))
|
||||
; okay now add the ConditionColumn value
|
||||
(extend temp-sql-query (string " WHERE " (rest (rest (rest (rest (rest (string (first (symbols D2)))))))) "="))
|
||||
(if (string? (first temp-record-values)) (extend temp-sql-query "'"))
|
||||
(extend temp-sql-query (string (safe-for-sql (first temp-record-values))))
|
||||
(if (string? (first temp-record-values)) (extend temp-sql-query "'"))
|
||||
(extend temp-sql-query ";")
|
||||
;(displayln "<p>***** SQL QUERY: " temp-sql-query)
|
||||
(query temp-sql-query) ; actually run the query against the database
|
||||
(delete 'D2) ; we're done, so delete all symbols in the DB context.
|
||||
)) ; --- end temporary debugging
|
||||
)
|
||||
|
||||
(define-macro (delete-record)
|
||||
(set 'temp-table-name (first (args)))
|
||||
(set 'temp-record-values nil)
|
||||
(dolist (s (rest (args))) (push (eval s) temp-record-values -1)) ; only one value for NOW...
|
||||
(sym (first (rest (args))) 'DB) ; put the second argument (for now) into a symbol in the DB context
|
||||
; this will have to be in a dolist loop of (rest (args)) when I add more
|
||||
(set 'temp-sql-query (string "DELETE FROM " temp-table-name " WHERE "))
|
||||
(dolist (d (symbols DB)) (extend temp-sql-query (rest (rest (rest (string d))))))
|
||||
(extend temp-sql-query "=")
|
||||
; why am I doing a loop here? There should be only one value, right? But maybe for future extension...
|
||||
(dolist (q temp-record-values)
|
||||
(if (string? q) (extend temp-sql-query "'")) ; only quote if value is non-numeric
|
||||
(extend temp-sql-query (string (safe-for-sql q)))
|
||||
(if (string? q) (extend temp-sql-query "'"))) ; close quote if value is non-numeric
|
||||
(extend temp-sql-query ";")
|
||||
;(displayln "TEMP-DELETE-QUERY: " temp-sql-query)
|
||||
(query temp-sql-query)
|
||||
(delete 'DB) ; we're done, so delete all symbols in the DB context.
|
||||
)
|
||||
|
||||
(define-macro (get-record)
|
||||
(set 'temp-table-name (first (args)))
|
||||
; if you have more arguments than just the table name, they become the elements of the WHERE clause
|
||||
(if (> (length (args)) 1) (begin
|
||||
(set 'temp-record-values nil)
|
||||
(dolist (s (rest (args))) (push (eval s) temp-record-values -1)) ; only one value for NOW...
|
||||
(sym (first (rest (args))) 'DB) ; put the second argument (for now) into a symbol in the DB context
|
||||
; this will have to be in a dolist loop of (rest (args)) when I add more
|
||||
(set 'temp-sql-query (string "SELECT * FROM " temp-table-name " WHERE "))
|
||||
(dolist (d (symbols DB)) (extend temp-sql-query (rest (rest (rest (string d))))))
|
||||
(extend temp-sql-query "=")
|
||||
; why am I doing a loop here? There should be only one value, right? But maybe for future extension...
|
||||
(dolist (q temp-record-values)
|
||||
(if (string? q) (extend temp-sql-query "'")) ; only quote if value is non-numeric
|
||||
(extend temp-sql-query (string (safe-for-sql q)))
|
||||
(if (string? q) (extend temp-sql-query "'"))) ; close quote if value is non-numeric
|
||||
(extend temp-sql-query ";")
|
||||
)
|
||||
; otherwise, just get everything in that table
|
||||
(set 'temp-sql-query (string "SELECT * FROM " temp-table-name ";"))
|
||||
)
|
||||
;(displayln "TEMP-GET-QUERY: " temp-sql-query)
|
||||
(delete 'DB) ; we're done, so delete all symbols in the DB context.
|
||||
(set 'return-value (query temp-sql-query)) ; this returns a list of everything in the record
|
||||
)
|
||||
|
||||
; END FUNCTIONS ===================
|
||||
|
||||
|
||||
(open-database "SERVER-LOGS")
|
||||
(query "CREATE TABLE Logs (Id INTEGER PRIMARY KEY, IP TEXT, UserId TEXT, UserName TEXT, Date DATE, Request TEXT, Result TEXT, Size INTEGER, Referrer TEXT, UserAgent TEXT)")
|
||||
;(print (query "SELECT * from SQLITE_MASTER;"))
|
||||
(set 'access-log (read-file "/var/log/apache2/access.log"))
|
||||
(set 'access-list (parse access-log "\n"))
|
||||
(set 'max-items (integer (first (first (query "select count(*) from Logs")))))
|
||||
(println "Number of items in database: " max-items)
|
||||
(println "Number of lines in log: " (length access-list))
|
||||
(dolist (line access-list)
|
||||
(set 'line-list (parse line))
|
||||
;(println "Line# " $idx " - " line-list)
|
||||
;(println "Length of line: " (length line-list))
|
||||
(if (> (length line-list) 0) (begin
|
||||
(++ max-items)
|
||||
(set 'Id max-items) (print $idx "/" (length access-list))
|
||||
(set 'IP (string (line-list 0) (line-list 1) (line-list 2)))
|
||||
(set 'UserId (line-list 3))
|
||||
(set 'UserName (line-list 4))
|
||||
(set 'Date (line-list 5))
|
||||
(set 'Date (trim Date "["))
|
||||
(set 'Date (trim Date "]"))
|
||||
;(println "DATE: " Date)
|
||||
(set 'date-parsed (date-parse Date "%d/%b/%Y:%H:%M:%S -0700"))
|
||||
;(println "DATE-PARSED: " date-parsed)
|
||||
(set 'Date (date date-parsed 0 "%Y-%m-%dT%H:%M:%S"))
|
||||
(println " " Date)
|
||||
(set 'Request (line-list 6))
|
||||
(set 'Result (line-list 7))
|
||||
(set 'Size (line-list 8))
|
||||
(set 'Referrer (line-list 9))
|
||||
(set 'UserAgent (line-list 10))
|
||||
(create-record "Logs" Id IP UserId UserName Date Request Result Size Referrer UserAgent)
|
||||
))
|
||||
)
|
||||
(close-database)
|
||||
(exit)
|
||||
121
samples/Pascal/cwindirs.pp
Normal file
121
samples/Pascal/cwindirs.pp
Normal file
@@ -0,0 +1,121 @@
|
||||
|
||||
unit cwindirs;
|
||||
|
||||
|
||||
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
windows,
|
||||
strings;
|
||||
|
||||
Const
|
||||
CSIDL_PROGRAMS = $0002;
|
||||
CSIDL_PERSONAL = $0005;
|
||||
CSIDL_FAVORITES = $0006;
|
||||
CSIDL_STARTUP = $0007;
|
||||
CSIDL_RECENT = $0008;
|
||||
CSIDL_SENDTO = $0009;
|
||||
CSIDL_STARTMENU = $000B;
|
||||
CSIDL_MYMUSIC = $000D;
|
||||
CSIDL_MYVIDEO = $000E;
|
||||
CSIDL_DESKTOPDIRECTORY = $0010;
|
||||
CSIDL_NETHOOD = $0013;
|
||||
CSIDL_TEMPLATES = $0015;
|
||||
CSIDL_COMMON_STARTMENU = $0016;
|
||||
CSIDL_COMMON_PROGRAMS = $0017;
|
||||
CSIDL_COMMON_STARTUP = $0018;
|
||||
CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
|
||||
CSIDL_APPDATA = $001A;
|
||||
CSIDL_PRINTHOOD = $001B;
|
||||
CSIDL_LOCAL_APPDATA = $001C;
|
||||
CSIDL_COMMON_FAVORITES = $001F;
|
||||
CSIDL_INTERNET_CACHE = $0020;
|
||||
CSIDL_COOKIES = $0021;
|
||||
CSIDL_HISTORY = $0022;
|
||||
CSIDL_COMMON_APPDATA = $0023;
|
||||
CSIDL_WINDOWS = $0024;
|
||||
CSIDL_SYSTEM = $0025;
|
||||
CSIDL_PROGRAM_FILES = $0026;
|
||||
CSIDL_MYPICTURES = $0027;
|
||||
CSIDL_PROFILE = $0028;
|
||||
CSIDL_PROGRAM_FILES_COMMON = $002B;
|
||||
CSIDL_COMMON_TEMPLATES = $002D;
|
||||
CSIDL_COMMON_DOCUMENTS = $002E;
|
||||
CSIDL_COMMON_ADMINTOOLS = $002F;
|
||||
CSIDL_ADMINTOOLS = $0030;
|
||||
CSIDL_COMMON_MUSIC = $0035;
|
||||
CSIDL_COMMON_PICTURES = $0036;
|
||||
CSIDL_COMMON_VIDEO = $0037;
|
||||
CSIDL_CDBURN_AREA = $003B;
|
||||
CSIDL_PROFILES = $003E;
|
||||
|
||||
CSIDL_FLAG_CREATE = $8000;
|
||||
|
||||
Function GetWindowsSpecialDir(ID : Integer) : String;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
sysutils;
|
||||
|
||||
Type
|
||||
PFNSHGetFolderPath = Function(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall;
|
||||
|
||||
|
||||
var
|
||||
SHGetFolderPath : PFNSHGetFolderPath = Nil;
|
||||
CFGDLLHandle : THandle = 0;
|
||||
|
||||
Procedure InitDLL;
|
||||
|
||||
Var
|
||||
pathBuf: array[0..MAX_PATH-1] of char;
|
||||
pathLength: Integer;
|
||||
begin
|
||||
{ Load shfolder.dll using a full path, in order to prevent spoofing (Mantis #18185)
|
||||
Don't bother loading shell32.dll because shfolder.dll itself redirects SHGetFolderPath
|
||||
to shell32.dll whenever possible. }
|
||||
pathLength:=GetSystemDirectory(pathBuf, MAX_PATH);
|
||||
if (pathLength>0) and (pathLength<MAX_PATH-14) then
|
||||
begin
|
||||
StrLCopy(@pathBuf[pathLength],'\shfolder.dll',MAX_PATH-pathLength-1);
|
||||
CFGDLLHandle:=LoadLibrary(pathBuf);
|
||||
|
||||
if (CFGDLLHandle<>0) then
|
||||
begin
|
||||
Pointer(ShGetFolderPath):=GetProcAddress(CFGDLLHandle,'SHGetFolderPathA');
|
||||
If @ShGetFolderPath=nil then
|
||||
begin
|
||||
FreeLibrary(CFGDLLHandle);
|
||||
CFGDllHandle:=0;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
If (@ShGetFolderPath=Nil) then
|
||||
Raise Exception.Create('Could not determine SHGetFolderPath Function');
|
||||
end;
|
||||
|
||||
Function GetWindowsSpecialDir(ID : Integer) : String;
|
||||
|
||||
Var
|
||||
APath : Array[0..MAX_PATH] of char;
|
||||
|
||||
begin
|
||||
Result:='';
|
||||
if (CFGDLLHandle=0) then
|
||||
InitDLL;
|
||||
If (SHGetFolderPath<>Nil) then
|
||||
begin
|
||||
if SHGetFolderPath(0,ID or CSIDL_FLAG_CREATE,0,0,@APATH[0])=S_OK then
|
||||
Result:=IncludeTrailingPathDelimiter(StrPas(@APath[0]));
|
||||
end;
|
||||
end;
|
||||
|
||||
Initialization
|
||||
Finalization
|
||||
if CFGDLLHandle<>0 then
|
||||
FreeLibrary(CFGDllHandle);
|
||||
end.
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
{ $Id$ }
|
||||
{
|
||||
---------------------------------------------------------------------------
|
||||
gtkextra.pp - GTK(2) widgetset - additional gdk/gtk functions
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
This unit contains missing gdk/gtk functions and defines for certain
|
||||
versions of gtk or fpc.
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
@created(Sun Jan 28th WET 2006)
|
||||
@lastmod($Date$)
|
||||
@author(Marc Weustink <marc@@dommelstein.nl>)
|
||||
|
||||
*****************************************************************************
|
||||
This file is part of the Lazarus Component Library (LCL)
|
||||
|
||||
See the file COPYING.modifiedLGPL.txt, included in this distribution,
|
||||
for details about the license.
|
||||
*****************************************************************************
|
||||
}
|
||||
|
||||
unit GtkExtra;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
{$I gtkdefines.inc}
|
||||
|
||||
{$ifdef gtk1}
|
||||
{$I gtk1extrah.inc}
|
||||
{$endif}
|
||||
|
||||
{$ifdef gtk2}
|
||||
{$I gtk2extrah.inc}
|
||||
{$endif}
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
{$ifdef gtk1}
|
||||
{$I gtk1extra.inc}
|
||||
{$endif}
|
||||
|
||||
{$ifdef gtk2}
|
||||
{$I gtk2extra.inc}
|
||||
{$endif}
|
||||
|
||||
end.
|
||||
22
samples/Pascal/large.pp
Normal file
22
samples/Pascal/large.pp
Normal file
@@ -0,0 +1,22 @@
|
||||
program large;
|
||||
|
||||
const
|
||||
max = 100000000;
|
||||
|
||||
type
|
||||
tlist = array[1..max] of longint;
|
||||
|
||||
var
|
||||
data : tlist;
|
||||
i : integer;
|
||||
|
||||
begin
|
||||
|
||||
i := 0;
|
||||
while(i < max)
|
||||
do
|
||||
begin
|
||||
data[i] := 0;
|
||||
Writeln(data[i])
|
||||
end
|
||||
end.
|
||||
26
samples/Pascal/tw27294.pp
Normal file
26
samples/Pascal/tw27294.pp
Normal file
@@ -0,0 +1,26 @@
|
||||
uses
|
||||
uw27294;
|
||||
|
||||
var
|
||||
p : procedure;
|
||||
|
||||
procedure test;
|
||||
|
||||
begin
|
||||
p:=@test;
|
||||
writeln('OK');
|
||||
end;
|
||||
|
||||
procedure global;
|
||||
begin
|
||||
p:=nil;
|
||||
test;
|
||||
p();
|
||||
end;
|
||||
|
||||
begin
|
||||
global;
|
||||
uw27294.global;
|
||||
end.
|
||||
|
||||
|
||||
@@ -133,6 +133,13 @@ class TestHeuristcs < Minitest::Test
|
||||
})
|
||||
end
|
||||
|
||||
def test_lsp_by_heuristics
|
||||
assert_heuristics({
|
||||
"Common Lisp" => all_fixtures("Common Lisp"),
|
||||
"NewLisp" => all_fixtures("NewLisp")
|
||||
})
|
||||
end
|
||||
|
||||
def test_cs_by_heuristics
|
||||
assert_heuristics({
|
||||
"C#" => all_fixtures("C#", "*.cs"),
|
||||
|
||||
@@ -41,6 +41,8 @@ class TestTokenizer < Minitest::Test
|
||||
assert_equal %w(foo), tokenize("foo {- Comment -}")
|
||||
assert_equal %w(foo), tokenize("foo (* Comment *)")
|
||||
assert_equal %w(%), tokenize("2 % 10\n% Comment")
|
||||
assert_equal %w(foo bar), tokenize("foo\n\"\"\"\nComment\n\"\"\"\nbar")
|
||||
assert_equal %w(foo bar), tokenize("foo\n'''\nComment\n'''\nbar")
|
||||
end
|
||||
|
||||
def test_sgml_tags
|
||||
|
||||
Reference in New Issue
Block a user