| @ -1 +0,0 @@ | |||
| (define-package "dash" "1.5.0" "A modern list library for Emacs" (quote nil)) | |||
| @ -0,0 +1 @@ | |||
| (define-package "dash" "2.7.0" "A modern list library for Emacs" 'nil) | |||
| @ -0,0 +1,15 @@ | |||
| ;;; epl-autoloads.el --- automatically extracted autoloads | |||
| ;; | |||
| ;;; Code: | |||
| (add-to-list 'load-path (or (file-name-directory #$) (car load-path))) | |||
| ;;;### (autoloads nil nil ("epl.el") (21404 16857 241875 9000)) | |||
| ;;;*** | |||
| ;; Local Variables: | |||
| ;; version-control: never | |||
| ;; no-byte-compile: t | |||
| ;; no-update-autoloads: t | |||
| ;; End: | |||
| ;;; epl-autoloads.el ends here | |||
| @ -0,0 +1 @@ | |||
| (define-package "epl" "0.7" "Emacs Package Library" '((cl-lib "0.3"))) | |||
| @ -0,0 +1,565 @@ | |||
| ;;; epl.el --- Emacs Package Library -*- lexical-binding: t; -*- | |||
| ;; Copyright (C) 2013, 2014 Sebastian Wiesner | |||
| ;; Author: Sebastian Wiesner <lunaryorn@gmail.com> | |||
| ;; Maintainer: Johan Andersson <johan.rejeep@gmail.com> | |||
| ;; Sebastian Wiesner <lunaryorn@gmail.com> | |||
| ;; Version: 0.7 | |||
| ;; Package-Requires: ((cl-lib "0.3")) | |||
| ;; Keywords: convenience | |||
| ;; URL: http://github.com/cask/epl | |||
| ;; This file is NOT part of GNU Emacs. | |||
| ;; This program is free software; you can redistribute it and/or modify | |||
| ;; it under the terms of the GNU General Public License as published by | |||
| ;; the Free Software Foundation, either version 3 of the License, or | |||
| ;; (at your option) any later version. | |||
| ;; This program is distributed in the hope that it will be useful, | |||
| ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| ;; GNU General Public License for more details. | |||
| ;; You should have received a copy of the GNU General Public License | |||
| ;; along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| ;;; Commentary: | |||
| ;; A package management library for Emacs, based on package.el. | |||
| ;; The purpose of this library is to wrap all the quirks and hassle of | |||
| ;; package.el into a sane API. | |||
| ;; The following functions comprise the public interface of this library: | |||
| ;;; Package directory selection | |||
| ;; `epl-package-dir' gets the directory of packages. | |||
| ;; `epl-default-package-dir' gets the default package directory. | |||
| ;; `epl-change-package-dir' changes the directory of packages. | |||
| ;;; Package system management | |||
| ;; `epl-initialize' initializes the package system and activates all | |||
| ;; packages. | |||
| ;; `epl-reset' resets the package system. | |||
| ;; `epl-refresh' refreshes all package archives. | |||
| ;; `epl-add-archive' adds a new package archive. | |||
| ;;; Package objects | |||
| ;; Struct `epl-requirement' describes a requirement of a package with `name' and | |||
| ;; `version' slots. | |||
| ;; `epl-requirement-version-string' gets a requirement version as string. | |||
| ;; Struct `epl-package' describes an installed or installable package with a | |||
| ;; `name' and some internal `description'. | |||
| ;; `epl-package-version' gets the version of a package. | |||
| ;; `epl-package-version-string' gets the version of a package as string. | |||
| ;; `epl-package-summary' gets the summary of a package. | |||
| ;; `epl-package-requirements' gets the requirements of a package. | |||
| ;; `epl-package-directory' gets the installation directory of a package. | |||
| ;; `epl-package-from-buffer' creates a package object for the package contained | |||
| ;; in the current buffer. | |||
| ;; `epl-package-from-file' creates a package object for a package file, either | |||
| ;; plain lisp or tarball. | |||
| ;; `epl-package-from-descriptor-file' creates a package object for a package | |||
| ;; description (i.e. *-pkg.el) file. | |||
| ;;; Package database access | |||
| ;; `epl-package-installed-p' determines whether a package is installed. | |||
| ;; `epl-installed-packages' and `epl-available-packages' get all packages | |||
| ;; installed and available for installation respectively. | |||
| ;; `epl-find-installed-package' and `epl-find-available-packages' find installed | |||
| ;; and available packages by name. | |||
| ;; `epl-find-upgrades' finds all upgradable packages. | |||
| ;; `epl-built-in-p' return true if package is built-in to Emacs. | |||
| ;;; Package operations | |||
| ;; `epl-install-file' installs a package file. | |||
| ;; `epl-package-install' installs a package. | |||
| ;; `epl-package-delete' deletes a package. | |||
| ;; `epl-upgrade' upgrades packages. | |||
| ;;; Code: | |||
| (require 'cl-lib) | |||
| (require 'package) | |||
| (defun epl--package-desc-p (package) | |||
| "Whether PACKAGE is a `package-desc' object. | |||
| Like `package-desc-p', but return nil, if `package-desc-p' is not | |||
| defined as function." | |||
| (and (fboundp 'package-desc-p) (package-desc-p package))) | |||
| ;;;; Package directory | |||
| (defun epl-package-dir () | |||
| "Get the directory of packages." | |||
| package-user-dir) | |||
| (defun epl-default-package-dir () | |||
| "Get the default directory of packages." | |||
| (eval (car (get 'package-user-dir 'standard-value)))) | |||
| (defun epl-change-package-dir (directory) | |||
| "Change the directory of packages to DIRECTORY." | |||
| (setq package-user-dir directory) | |||
| (epl-initialize)) | |||
| ;;;; Package system management | |||
| (defvar epl--load-path-before-initialize nil | |||
| "Remember the load path for `epl-reset'.") | |||
| (defun epl-initialize (&optional no-activate) | |||
| "Load Emacs Lisp packages and activate them. | |||
| With NO-ACTIVATE non-nil, do not activate packages." | |||
| (setq epl--load-path-before-initialize load-path) | |||
| (package-initialize no-activate)) | |||
| (defalias 'epl-refresh 'package-refresh-contents) | |||
| (defun epl-add-archive (name url) | |||
| "Add a package archive with NAME and URL." | |||
| (add-to-list 'package-archives (cons name url))) | |||
| (defun epl-reset () | |||
| "Reset the package system. | |||
| Clear the list of installed and available packages, the list of | |||
| package archives and reset the package directory." | |||
| (setq package-alist nil | |||
| package-archives nil | |||
| package-archive-contents nil | |||
| load-path epl--load-path-before-initialize) | |||
| (when (boundp 'package-obsolete-alist) ; Legacy package.el | |||
| (setq package-obsolete-alist nil)) | |||
| (epl-change-package-dir (epl-default-package-dir))) | |||
| ;;;; Package structures | |||
| (cl-defstruct (epl-requirement | |||
| (:constructor epl-requirement-create)) | |||
| "Structure describing a requirement. | |||
| Slots: | |||
| `name' The name of the required package, as symbol. | |||
| `version' The version of the required package, as version list." | |||
| name | |||
| version) | |||
| (defun epl-requirement-version-string (requirement) | |||
| "The version of a REQUIREMENT, as string." | |||
| (package-version-join (epl-requirement-version requirement))) | |||
| (cl-defstruct (epl-package (:constructor epl-package-create)) | |||
| "Structure representing a package. | |||
| Slots: | |||
| `name' The package name, as symbol. | |||
| `description' The package description. | |||
| The format package description varies between package.el | |||
| variants. For `package-desc' variants, it is simply the | |||
| corresponding `package-desc' object. For legacy variants, it is | |||
| a vector `[VERSION REQS DOCSTRING]'. | |||
| Do not access `description' directly, but instead use the | |||
| `epl-package' accessors." | |||
| name | |||
| description) | |||
| (defmacro epl-package-as-description (var &rest body) | |||
| "Cast VAR to a package description in BODY. | |||
| VAR is a symbol, bound to an `epl-package' object. This macro | |||
| casts this object to the `description' object, and binds the | |||
| description to VAR in BODY." | |||
| (declare (indent 1)) | |||
| (unless (symbolp var) | |||
| (signal 'wrong-type-argument (list #'symbolp var))) | |||
| `(if (epl-package-p ,var) | |||
| (let ((,var (epl-package-description ,var))) | |||
| ,@body) | |||
| (signal 'wrong-type-argument (list #'epl-package-p ,var)))) | |||
| (defun epl-package--package-desc-p (package) | |||
| "Whether the description of PACKAGE is a `package-desc'." | |||
| (epl--package-desc-p (epl-package-description package))) | |||
| (defun epl-package-version (package) | |||
| "Get the version of PACKAGE, as version list." | |||
| (epl-package-as-description package | |||
| (cond | |||
| ((fboundp 'package-desc-version) (package-desc-version package)) | |||
| ;; Legacy | |||
| ((fboundp 'package-desc-vers) | |||
| (let ((version (package-desc-vers package))) | |||
| (if (listp version) version (version-to-list version)))) | |||
| (:else (error "Cannot get version from %S" package))))) | |||
| (defun epl-package-version-string (package) | |||
| "Get the version from a PACKAGE, as string." | |||
| (package-version-join (epl-package-version package))) | |||
| (defun epl-package-summary (package) | |||
| "Get the summary of PACKAGE, as string." | |||
| (epl-package-as-description package | |||
| (cond | |||
| ((fboundp 'package-desc-summary) (package-desc-summary package)) | |||
| ((fboundp 'package-desc-doc) (package-desc-doc package)) ; Legacy | |||
| (:else (error "Cannot get summary from %S" package))))) | |||
| (defun epl-requirement--from-req (req) | |||
| "Create a `epl-requirement' from a `package-desc' REQ." | |||
| (cl-destructuring-bind (name version) req | |||
| (epl-requirement-create :name name | |||
| :version (if (listp version) version | |||
| (version-to-list version))))) | |||
| (defun epl-package-requirements (package) | |||
| "Get the requirements of PACKAGE. | |||
| The requirements are a list of `epl-requirement' objects." | |||
| (epl-package-as-description package | |||
| (mapcar #'epl-requirement--from-req (package-desc-reqs package)))) | |||
| (defun epl-package-directory (package) | |||
| "Get the directory PACKAGE is installed to. | |||
| Return the absolute path of the installation directory of | |||
| PACKAGE, or nil, if PACKAGE is not installed." | |||
| (cond | |||
| ((fboundp 'package-desc-dir) | |||
| (package-desc-dir (epl-package-description package))) | |||
| ((fboundp 'package--dir) | |||
| (package--dir (epl-package-name package) | |||
| (epl-package-version-string package))) | |||
| (:else (error "Cannot get package directory from %S" package)))) | |||
| (defun epl-package-->= (pkg1 pkg2) | |||
| "Determine whether PKG1 is before PKG2 by version." | |||
| (not (version-list-< (epl-package-version pkg1) | |||
| (epl-package-version pkg2)))) | |||
| (defun epl-package--from-package-desc (package-desc) | |||
| "Create an `epl-package' from a PACKAGE-DESC. | |||
| PACKAGE-DESC is a `package-desc' object, from recent package.el | |||
| variants." | |||
| (if (and (fboundp 'package-desc-name) | |||
| (epl--package-desc-p package-desc)) | |||
| (epl-package-create :name (package-desc-name package-desc) | |||
| :description package-desc) | |||
| (signal 'wrong-type-argument (list 'epl--package-desc-p package-desc)))) | |||
| (defun epl-package--parse-info (info) | |||
| "Parse a package.el INFO." | |||
| (if (epl--package-desc-p info) | |||
| (epl-package--from-package-desc info) | |||
| ;; For legacy package.el, info is a vector [NAME REQUIRES DESCRIPTION | |||
| ;; VERSION COMMENTARY]. We need to re-shape this vector into the | |||
| ;; `package-alist' format [VERSION REQUIRES DESCRIPTION] to attach it to the | |||
| ;; new `epl-package'. | |||
| (let ((name (intern (aref info 0))) | |||
| (info (vector (aref info 3) (aref info 1) (aref info 2)))) | |||
| (epl-package-create :name name :description info)))) | |||
| (defun epl-package-from-buffer (&optional buffer) | |||
| "Create an `epl-package' object from BUFFER. | |||
| BUFFER defaults to the current buffer." | |||
| (let ((info (with-current-buffer (or buffer (current-buffer)) | |||
| (package-buffer-info)))) | |||
| (epl-package--parse-info info))) | |||
| (defun epl-package-from-lisp-file (file-name) | |||
| "Parse the package headers the file at FILE-NAME. | |||
| Return an `epl-package' object with the header metadata." | |||
| (with-temp-buffer | |||
| (insert-file-contents file-name) | |||
| (epl-package-from-buffer (current-buffer)))) | |||
| (defun epl-package-from-tar-file (file-name) | |||
| "Parse the package tarball at FILE-NAME. | |||
| Return a `epl-package' object with the meta data of the tarball | |||
| package in FILE-NAME." | |||
| (condition-case nil | |||
| ;; In legacy package.el, `package-tar-file-info' takes the name of the tar | |||
| ;; file to parse as argument. In modern package.el, it has no arguments | |||
| ;; and works on the current buffer. Hence, we just try to call the legacy | |||
| ;; version, and if that fails because of a mismatch between formal and | |||
| ;; actual arguments, we use the modern approach. To avoid spurious | |||
| ;; signature warnings by the byte compiler, we suppress warnings when | |||
| ;; calling the function. | |||
| (epl-package--parse-info (with-no-warnings | |||
| (package-tar-file-info file-name))) | |||
| (wrong-number-of-arguments | |||
| (with-temp-buffer | |||
| (insert-file-contents-literally file-name) | |||
| ;; Switch to `tar-mode' to enable extraction of the file. Modern | |||
| ;; `package-tar-file-info' relies on `tar-mode', and signals an error if | |||
| ;; called in a buffer with a different mode. | |||
| (tar-mode) | |||
| (epl-package--parse-info (with-no-warnings | |||
| (package-tar-file-info))))))) | |||
| (defun epl-package-from-file (file-name) | |||
| "Parse the package at FILE-NAME. | |||
| Return an `epl-package' object with the meta data of the package | |||
| at FILE-NAME." | |||
| (if (string-match-p (rx ".tar" string-end) file-name) | |||
| (epl-package-from-tar-file file-name) | |||
| (epl-package-from-lisp-file file-name))) | |||
| (defun epl-package--parse-descriptor-requirement (requirement) | |||
| "Parse a REQUIREMENT in a package descriptor." | |||
| ;; This function is only called on legacy package.el. On package-desc | |||
| ;; package.el, we just let package.el do the work. | |||
| (cl-destructuring-bind (name version-string) requirement | |||
| (list name (version-to-list version-string)))) | |||
| (defun epl-package-from-descriptor-file (descriptor-file) | |||
| "Load a `epl-package' from a package DESCRIPTOR-FILE. | |||
| A package descriptor is a file defining a new package. Its name | |||
| typically ends with -pkg.el." | |||
| (with-temp-buffer | |||
| (insert-file-contents descriptor-file) | |||
| (goto-char (point-min)) | |||
| (let ((sexp (read (current-buffer)))) | |||
| (unless (eq (car sexp) 'define-package) | |||
| (error "%S is no valid package descriptor" descriptor-file)) | |||
| (if (and (fboundp 'package-desc-from-define) | |||
| (fboundp 'package-desc-name)) | |||
| ;; In Emacs snapshot, we can conveniently call a function to parse the | |||
| ;; descriptor | |||
| (let ((desc (apply #'package-desc-from-define (cdr sexp)))) | |||
| (epl-package-create :name (package-desc-name desc) | |||
| :description desc)) | |||
| ;; In legacy package.el, we must manually deconstruct the descriptor, | |||
| ;; because the load function has eval's the descriptor and has a lot of | |||
| ;; global side-effects. | |||
| (cl-destructuring-bind | |||
| (name version-string summary requirements) (cdr sexp) | |||
| (epl-package-create | |||
| :name (intern name) | |||
| :description | |||
| (vector (version-to-list version-string) | |||
| (mapcar #'epl-package--parse-descriptor-requirement | |||
| ;; Strip the leading `quote' from the package list | |||
| (cadr requirements)) | |||
| summary))))))) | |||
| ;;;; Package database access | |||
| (defun epl-package-installed-p (package) | |||
| "Determine whether a PACKAGE is installed. | |||
| PACKAGE is either a package name as symbol, or a package object." | |||
| (let ((name (if (epl-package-p package) | |||
| (epl-package-name package) | |||
| package)) | |||
| (version (when (epl-package-p package) | |||
| (epl-package-version package)))) | |||
| (package-installed-p name version))) | |||
| (defun epl--parse-package-list-entry (entry) | |||
| "Parse a list of packages from ENTRY. | |||
| ENTRY is a single entry in a package list, e.g. `package-alist', | |||
| `package-archive-contents', etc. Typically it is a cons cell, | |||
| but the exact format varies between package.el versions. This | |||
| function tries to parse all known variants. | |||
| Return a list of `epl-package' objects parsed from ENTRY." | |||
| (let ((descriptions (cdr entry))) | |||
| (cond | |||
| ((listp descriptions) | |||
| (sort (mapcar #'epl-package--from-package-desc descriptions) | |||
| #'epl-package-->=)) | |||
| ;; Legacy package.el has just a single package in an entry, which is a | |||
| ;; standard description vector | |||
| ((vectorp descriptions) | |||
| (list (epl-package-create :name (car entry) | |||
| :description descriptions))) | |||
| (:else (error "Cannot parse entry %S" entry))))) | |||
| (defun epl-installed-packages () | |||
| "Get all installed packages. | |||
| Return a list of package objects." | |||
| (apply #'append (mapcar #'epl--parse-package-list-entry package-alist))) | |||
| (defun epl--find-package-in-list (name list) | |||
| "Find a package by NAME in a package LIST. | |||
| Return a list of corresponding `epl-package' objects." | |||
| (let ((entry (assq name list))) | |||
| (when entry | |||
| (epl--parse-package-list-entry entry)))) | |||
| (defun epl-find-installed-package (name) | |||
| "Find an installed package by NAME. | |||
| NAME is a package name, as symbol. | |||
| Return the installed package as `epl-package' object, or nil, if | |||
| no package with NAME is installed." | |||
| ;; FIXME: We must return *all* installed packages here | |||
| (car (epl--find-package-in-list name package-alist))) | |||
| (defun epl-available-packages () | |||
| "Get all packages available for installed. | |||
| Return a list of package objects." | |||
| (apply #'append (mapcar #'epl--parse-package-list-entry | |||
| package-archive-contents))) | |||
| (defun epl-find-available-packages (name) | |||
| "Find available packages for NAME. | |||
| NAME is a package name, as symbol. | |||
| Return a list of available packages for NAME, sorted by version | |||
| number in descending order. Return nil, if there are no packages | |||
| for NAME." | |||
| (epl--find-package-in-list name package-archive-contents)) | |||
| (cl-defstruct (epl-upgrade | |||
| (:constructor epl-upgrade-create)) | |||
| "Structure describing an upgradable package. | |||
| Slots: | |||
| `installed' The installed package | |||
| `available' The package available for installation." | |||
| installed | |||
| available) | |||
| (defun epl-find-upgrades (&optional packages) | |||
| "Find all upgradable PACKAGES. | |||
| PACKAGES is a list of package objects to upgrade, defaulting to | |||
| all installed packages. | |||
| Return a list of `epl-upgrade' objects describing all upgradable | |||
| packages." | |||
| (let ((packages (or packages (epl-installed-packages))) | |||
| upgrades) | |||
| (dolist (pkg packages) | |||
| (let* ((version (epl-package-version pkg)) | |||
| (name (epl-package-name pkg)) | |||
| ;; Find the latest available package for NAME | |||
| (available-pkg (car (epl-find-available-packages name))) | |||
| (available-version (when available-pkg | |||
| (epl-package-version available-pkg)))) | |||
| (when (and available-version (version-list-< version available-version)) | |||
| (push (epl-upgrade-create :installed pkg | |||
| :available available-pkg) | |||
| upgrades)))) | |||
| (nreverse upgrades))) | |||
| (defalias 'epl-built-in-p 'package-built-in-p) | |||
| ;;;; Package operations | |||
| (defalias 'epl-install-file 'package-install-file) | |||
| (defun epl-package-install (package &optional force) | |||
| "Install a PACKAGE. | |||
| PACKAGE is a `epl-package' object. If FORCE is given and | |||
| non-nil, install PACKAGE, even if it is already installed." | |||
| (when (or force (not (epl-package-installed-p package))) | |||
| (if (epl-package--package-desc-p package) | |||
| (package-install (epl-package-description package)) | |||
| ;; The legacy API installs by name. We have no control over versioning, | |||
| ;; etc. | |||
| (package-install (epl-package-name package))))) | |||
| (defun epl-package-delete (package) | |||
| "Delete a PACKAGE. | |||
| PACKAGE is a `epl-package' object to delete." | |||
| ;; package-delete allows for packages being trashed instead of fully deleted. | |||
| ;; Let's prevent his silly behavior | |||
| (let ((delete-by-moving-to-trash nil)) | |||
| ;; The byte compiler will warn us that we are calling `package-delete' with | |||
| ;; the wrong number of arguments, since it can't infer that we guarantee to | |||
| ;; always call the correct version. Thus we suppress all warnings when | |||
| ;; calling `package-delete'. I wish there was a more granular way to | |||
| ;; disable just that specific warning, but it is what it is. | |||
| (if (epl-package--package-desc-p package) | |||
| (with-no-warnings | |||
| (package-delete (epl-package-description package))) | |||
| ;; The legacy API deletes by name (as string!) and version instead by | |||
| ;; descriptor. Hence `package-delete' takes two arguments. For some | |||
| ;; insane reason, the arguments are strings here! | |||
| (let ((name (symbol-name (epl-package-name package))) | |||
| (version (epl-package-version-string package))) | |||
| (with-no-warnings | |||
| (package-delete name version)) | |||
| ;; Legacy package.el does not remove the deleted package | |||
| ;; from the `package-alist', so we do it manually here. | |||
| (let ((pkg (assq (epl-package-name package) package-alist))) | |||
| (when pkg | |||
| (setq package-alist (delq pkg package-alist)))))))) | |||
| (defun epl-upgrade (&optional packages preserve-obsolete) | |||
| "Upgrade PACKAGES. | |||
| PACKAGES is a list of package objects to upgrade, defaulting to | |||
| all installed packages. | |||
| The old versions of the updated packages are deleted, unless | |||
| PRESERVE-OBSOLETE is non-nil. | |||
| Return a list of all performed upgrades, as a list of | |||
| `epl-upgrade' objects." | |||
| (let ((upgrades (epl-find-upgrades packages))) | |||
| (dolist (upgrade upgrades) | |||
| (epl-package-install (epl-upgrade-available upgrade) 'force) | |||
| (unless preserve-obsolete | |||
| (epl-package-delete (epl-upgrade-installed upgrade)))) | |||
| upgrades)) | |||
| (provide 'epl) | |||
| ;;; epl.el ends here | |||
| @ -1 +0,0 @@ | |||
| (define-package "find-file-in-project" "3.2" "Find files in a project quickly." (quote nil)) | |||
| @ -0,0 +1 @@ | |||
| (define-package "find-file-in-project" "3.3" "Find files in a project quickly." 'nil) | |||
| @ -0,0 +1,24 @@ | |||
| * flymake-perlcritic.el 1.0.5 (2012-11-06-15:16) | |||
| * Add support for php+-mode. | |||
| (Contributed by @mgallego.) | |||
| * flymake-perlcritic.el 1.0.4 (2012-03-28-06:08) | |||
| * Append flymake-mode enable to php-hook rather than prepend. | |||
| (Contributed by arnested.) | |||
| * flymake-perlcritic.el 1.0.3 (2012-03-22-16:49) | |||
| * Fixed accidental inclusion of Makefile in previous patch. | |||
| * flymake-perlcritic.el 1.0.2 (2012-03-22-06:15) | |||
| * Makefile for ELPA packaging. | |||
| (Contributed by arnested.) | |||
| * Attempt to autolocate flymake_phpcs wrapper for default value. | |||
| (Contributed by arnested.) | |||
| * flymake-perlcritic.el 1.0.1 (2012-01-11-22:48) | |||
| * Add support for toggle of sniff names in errors. | |||
| (Requires PHP_CodeSniffer >= 1.3.4 or from GitHub.) | |||
| * Add help-text to flymake_phpcs. | |||
| * Bequeath copyright to FSF and add GPL license. | |||
| * Define init function as flymake-phpcs-*. | |||
| * Override Flymake PHP functions less evilly. | |||
| @ -0,0 +1,674 @@ | |||
| GNU GENERAL PUBLIC LICENSE | |||
| Version 3, 29 June 2007 | |||
| Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> | |||
| Everyone is permitted to copy and distribute verbatim copies | |||
| of this license document, but changing it is not allowed. | |||
| Preamble | |||
| The GNU General Public License is a free, copyleft license for | |||
| software and other kinds of works. | |||
| The licenses for most software and other practical works are designed | |||
| to take away your freedom to share and change the works. By contrast, | |||
| the GNU General Public License is intended to guarantee your freedom to | |||
| share and change all versions of a program--to make sure it remains free | |||
| software for all its users. We, the Free Software Foundation, use the | |||
| GNU General Public License for most of our software; it applies also to | |||
| any other work released this way by its authors. You can apply it to | |||
| your programs, too. | |||
| When we speak of free software, we are referring to freedom, not | |||
| price. Our General Public Licenses are designed to make sure that you | |||
| have the freedom to distribute copies of free software (and charge for | |||
| them if you wish), that you receive source code or can get it if you | |||
| want it, that you can change the software or use pieces of it in new | |||
| free programs, and that you know you can do these things. | |||
| To protect your rights, we need to prevent others from denying you | |||
| these rights or asking you to surrender the rights. Therefore, you have | |||
| certain responsibilities if you distribute copies of the software, or if | |||
| you modify it: responsibilities to respect the freedom of others. | |||
| For example, if you distribute copies of such a program, whether | |||
| gratis or for a fee, you must pass on to the recipients the same | |||
| freedoms that you received. You must make sure that they, too, receive | |||
| or can get the source code. And you must show them these terms so they | |||
| know their rights. | |||
| Developers that use the GNU GPL protect your rights with two steps: | |||
| (1) assert copyright on the software, and (2) offer you this License | |||
| giving you legal permission to copy, distribute and/or modify it. | |||
| For the developers' and authors' protection, the GPL clearly explains | |||
| that there is no warranty for this free software. For both users' and | |||
| authors' sake, the GPL requires that modified versions be marked as | |||
| changed, so that their problems will not be attributed erroneously to | |||
| authors of previous versions. | |||
| Some devices are designed to deny users access to install or run | |||
| modified versions of the software inside them, although the manufacturer | |||
| can do so. This is fundamentally incompatible with the aim of | |||
| protecting users' freedom to change the software. The systematic | |||
| pattern of such abuse occurs in the area of products for individuals to | |||
| use, which is precisely where it is most unacceptable. Therefore, we | |||
| have designed this version of the GPL to prohibit the practice for those | |||
| products. If such problems arise substantially in other domains, we | |||
| stand ready to extend this provision to those domains in future versions | |||
| of the GPL, as needed to protect the freedom of users. | |||
| Finally, every program is threatened constantly by software patents. | |||
| States should not allow patents to restrict development and use of | |||
| software on general-purpose computers, but in those that do, we wish to | |||
| avoid the special danger that patents applied to a free program could | |||
| make it effectively proprietary. To prevent this, the GPL assures that | |||
| patents cannot be used to render the program non-free. | |||
| The precise terms and conditions for copying, distribution and | |||
| modification follow. | |||
| TERMS AND CONDITIONS | |||
| 0. Definitions. | |||
| "This License" refers to version 3 of the GNU General Public License. | |||
| "Copyright" also means copyright-like laws that apply to other kinds of | |||
| works, such as semiconductor masks. | |||
| "The Program" refers to any copyrightable work licensed under this | |||
| License. Each licensee is addressed as "you". "Licensees" and | |||
| "recipients" may be individuals or organizations. | |||
| To "modify" a work means to copy from or adapt all or part of the work | |||
| in a fashion requiring copyright permission, other than the making of an | |||
| exact copy. The resulting work is called a "modified version" of the | |||
| earlier work or a work "based on" the earlier work. | |||
| A "covered work" means either the unmodified Program or a work based | |||
| on the Program. | |||
| To "propagate" a work means to do anything with it that, without | |||
| permission, would make you directly or secondarily liable for | |||
| infringement under applicable copyright law, except executing it on a | |||
| computer or modifying a private copy. Propagation includes copying, | |||
| distribution (with or without modification), making available to the | |||
| public, and in some countries other activities as well. | |||
| To "convey" a work means any kind of propagation that enables other | |||
| parties to make or receive copies. Mere interaction with a user through | |||
| a computer network, with no transfer of a copy, is not conveying. | |||
| An interactive user interface displays "Appropriate Legal Notices" | |||
| to the extent that it includes a convenient and prominently visible | |||
| feature that (1) displays an appropriate copyright notice, and (2) | |||
| tells the user that there is no warranty for the work (except to the | |||
| extent that warranties are provided), that licensees may convey the | |||
| work under this License, and how to view a copy of this License. If | |||
| the interface presents a list of user commands or options, such as a | |||
| menu, a prominent item in the list meets this criterion. | |||
| 1. Source Code. | |||
| The "source code" for a work means the preferred form of the work | |||
| for making modifications to it. "Object code" means any non-source | |||
| form of a work. | |||
| A "Standard Interface" means an interface that either is an official | |||
| standard defined by a recognized standards body, or, in the case of | |||
| interfaces specified for a particular programming language, one that | |||
| is widely used among developers working in that language. | |||
| The "System Libraries" of an executable work include anything, other | |||
| than the work as a whole, that (a) is included in the normal form of | |||
| packaging a Major Component, but which is not part of that Major | |||
| Component, and (b) serves only to enable use of the work with that | |||
| Major Component, or to implement a Standard Interface for which an | |||
| implementation is available to the public in source code form. A | |||
| "Major Component", in this context, means a major essential component | |||
| (kernel, window system, and so on) of the specific operating system | |||
| (if any) on which the executable work runs, or a compiler used to | |||
| produce the work, or an object code interpreter used to run it. | |||
| The "Corresponding Source" for a work in object code form means all | |||
| the source code needed to generate, install, and (for an executable | |||
| work) run the object code and to modify the work, including scripts to | |||
| control those activities. However, it does not include the work's | |||
| System Libraries, or general-purpose tools or generally available free | |||
| programs which are used unmodified in performing those activities but | |||
| which are not part of the work. For example, Corresponding Source | |||
| includes interface definition files associated with source files for | |||
| the work, and the source code for shared libraries and dynamically | |||
| linked subprograms that the work is specifically designed to require, | |||
| such as by intimate data communication or control flow between those | |||
| subprograms and other parts of the work. | |||
| The Corresponding Source need not include anything that users | |||
| can regenerate automatically from other parts of the Corresponding | |||
| Source. | |||
| The Corresponding Source for a work in source code form is that | |||
| same work. | |||
| 2. Basic Permissions. | |||
| All rights granted under this License are granted for the term of | |||
| copyright on the Program, and are irrevocable provided the stated | |||
| conditions are met. This License explicitly affirms your unlimited | |||
| permission to run the unmodified Program. The output from running a | |||
| covered work is covered by this License only if the output, given its | |||
| content, constitutes a covered work. This License acknowledges your | |||
| rights of fair use or other equivalent, as provided by copyright law. | |||
| You may make, run and propagate covered works that you do not | |||
| convey, without conditions so long as your license otherwise remains | |||
| in force. You may convey covered works to others for the sole purpose | |||
| of having them make modifications exclusively for you, or provide you | |||
| with facilities for running those works, provided that you comply with | |||
| the terms of this License in conveying all material for which you do | |||
| not control copyright. Those thus making or running the covered works | |||
| for you must do so exclusively on your behalf, under your direction | |||
| and control, on terms that prohibit them from making any copies of | |||
| your copyrighted material outside their relationship with you. | |||
| Conveying under any other circumstances is permitted solely under | |||
| the conditions stated below. Sublicensing is not allowed; section 10 | |||
| makes it unnecessary. | |||
| 3. Protecting Users' Legal Rights From Anti-Circumvention Law. | |||
| No covered work shall be deemed part of an effective technological | |||
| measure under any applicable law fulfilling obligations under article | |||
| 11 of the WIPO copyright treaty adopted on 20 December 1996, or | |||
| similar laws prohibiting or restricting circumvention of such | |||
| measures. | |||
| When you convey a covered work, you waive any legal power to forbid | |||
| circumvention of technological measures to the extent such circumvention | |||
| is effected by exercising rights under this License with respect to | |||
| the covered work, and you disclaim any intention to limit operation or | |||
| modification of the work as a means of enforcing, against the work's | |||
| users, your or third parties' legal rights to forbid circumvention of | |||
| technological measures. | |||
| 4. Conveying Verbatim Copies. | |||
| You may convey verbatim copies of the Program's source code as you | |||
| receive it, in any medium, provided that you conspicuously and | |||
| appropriately publish on each copy an appropriate copyright notice; | |||
| keep intact all notices stating that this License and any | |||
| non-permissive terms added in accord with section 7 apply to the code; | |||
| keep intact all notices of the absence of any warranty; and give all | |||
| recipients a copy of this License along with the Program. | |||
| You may charge any price or no price for each copy that you convey, | |||
| and you may offer support or warranty protection for a fee. | |||
| 5. Conveying Modified Source Versions. | |||
| You may convey a work based on the Program, or the modifications to | |||
| produce it from the Program, in the form of source code under the | |||
| terms of section 4, provided that you also meet all of these conditions: | |||
| a) The work must carry prominent notices stating that you modified | |||
| it, and giving a relevant date. | |||
| b) The work must carry prominent notices stating that it is | |||
| released under this License and any conditions added under section | |||
| 7. This requirement modifies the requirement in section 4 to | |||
| "keep intact all notices". | |||
| c) You must license the entire work, as a whole, under this | |||
| License to anyone who comes into possession of a copy. This | |||
| License will therefore apply, along with any applicable section 7 | |||
| additional terms, to the whole of the work, and all its parts, | |||
| regardless of how they are packaged. This License gives no | |||
| permission to license the work in any other way, but it does not | |||
| invalidate such permission if you have separately received it. | |||
| d) If the work has interactive user interfaces, each must display | |||
| Appropriate Legal Notices; however, if the Program has interactive | |||
| interfaces that do not display Appropriate Legal Notices, your | |||
| work need not make them do so. | |||
| A compilation of a covered work with other separate and independent | |||
| works, which are not by their nature extensions of the covered work, | |||
| and which are not combined with it such as to form a larger program, | |||
| in or on a volume of a storage or distribution medium, is called an | |||
| "aggregate" if the compilation and its resulting copyright are not | |||
| used to limit the access or legal rights of the compilation's users | |||
| beyond what the individual works permit. Inclusion of a covered work | |||
| in an aggregate does not cause this License to apply to the other | |||
| parts of the aggregate. | |||
| 6. Conveying Non-Source Forms. | |||
| You may convey a covered work in object code form under the terms | |||
| of sections 4 and 5, provided that you also convey the | |||
| machine-readable Corresponding Source under the terms of this License, | |||
| in one of these ways: | |||
| a) Convey the object code in, or embodied in, a physical product | |||
| (including a physical distribution medium), accompanied by the | |||
| Corresponding Source fixed on a durable physical medium | |||
| customarily used for software interchange. | |||
| b) Convey the object code in, or embodied in, a physical product | |||
| (including a physical distribution medium), accompanied by a | |||
| written offer, valid for at least three years and valid for as | |||
| long as you offer spare parts or customer support for that product | |||
| model, to give anyone who possesses the object code either (1) a | |||
| copy of the Corresponding Source for all the software in the | |||
| product that is covered by this License, on a durable physical | |||
| medium customarily used for software interchange, for a price no | |||
| more than your reasonable cost of physically performing this | |||
| conveying of source, or (2) access to copy the | |||
| Corresponding Source from a network server at no charge. | |||
| c) Convey individual copies of the object code with a copy of the | |||
| written offer to provide the Corresponding Source. This | |||
| alternative is allowed only occasionally and noncommercially, and | |||
| only if you received the object code with such an offer, in accord | |||
| with subsection 6b. | |||
| d) Convey the object code by offering access from a designated | |||
| place (gratis or for a charge), and offer equivalent access to the | |||
| Corresponding Source in the same way through the same place at no | |||
| further charge. You need not require recipients to copy the | |||
| Corresponding Source along with the object code. If the place to | |||
| copy the object code is a network server, the Corresponding Source | |||
| may be on a different server (operated by you or a third party) | |||
| that supports equivalent copying facilities, provided you maintain | |||
| clear directions next to the object code saying where to find the | |||
| Corresponding Source. Regardless of what server hosts the | |||
| Corresponding Source, you remain obligated to ensure that it is | |||
| available for as long as needed to satisfy these requirements. | |||
| e) Convey the object code using peer-to-peer transmission, provided | |||
| you inform other peers where the object code and Corresponding | |||
| Source of the work are being offered to the general public at no | |||
| charge under subsection 6d. | |||
| A separable portion of the object code, whose source code is excluded | |||
| from the Corresponding Source as a System Library, need not be | |||
| included in conveying the object code work. | |||
| A "User Product" is either (1) a "consumer product", which means any | |||
| tangible personal property which is normally used for personal, family, | |||
| or household purposes, or (2) anything designed or sold for incorporation | |||
| into a dwelling. In determining whether a product is a consumer product, | |||
| doubtful cases shall be resolved in favor of coverage. For a particular | |||
| product received by a particular user, "normally used" refers to a | |||
| typical or common use of that class of product, regardless of the status | |||
| of the particular user or of the way in which the particular user | |||
| actually uses, or expects or is expected to use, the product. A product | |||
| is a consumer product regardless of whether the product has substantial | |||
| commercial, industrial or non-consumer uses, unless such uses represent | |||
| the only significant mode of use of the product. | |||
| "Installation Information" for a User Product means any methods, | |||
| procedures, authorization keys, or other information required to install | |||
| and execute modified versions of a covered work in that User Product from | |||
| a modified version of its Corresponding Source. The information must | |||
| suffice to ensure that the continued functioning of the modified object | |||
| code is in no case prevented or interfered with solely because | |||
| modification has been made. | |||
| If you convey an object code work under this section in, or with, or | |||
| specifically for use in, a User Product, and the conveying occurs as | |||
| part of a transaction in which the right of possession and use of the | |||
| User Product is transferred to the recipient in perpetuity or for a | |||
| fixed term (regardless of how the transaction is characterized), the | |||
| Corresponding Source conveyed under this section must be accompanied | |||
| by the Installation Information. But this requirement does not apply | |||
| if neither you nor any third party retains the ability to install | |||
| modified object code on the User Product (for example, the work has | |||
| been installed in ROM). | |||
| The requirement to provide Installation Information does not include a | |||
| requirement to continue to provide support service, warranty, or updates | |||
| for a work that has been modified or installed by the recipient, or for | |||
| the User Product in which it has been modified or installed. Access to a | |||
| network may be denied when the modification itself materially and | |||
| adversely affects the operation of the network or violates the rules and | |||
| protocols for communication across the network. | |||
| Corresponding Source conveyed, and Installation Information provided, | |||
| in accord with this section must be in a format that is publicly | |||
| documented (and with an implementation available to the public in | |||
| source code form), and must require no special password or key for | |||
| unpacking, reading or copying. | |||
| 7. Additional Terms. | |||
| "Additional permissions" are terms that supplement the terms of this | |||
| License by making exceptions from one or more of its conditions. | |||
| Additional permissions that are applicable to the entire Program shall | |||
| be treated as though they were included in this License, to the extent | |||
| that they are valid under applicable law. If additional permissions | |||
| apply only to part of the Program, that part may be used separately | |||
| under those permissions, but the entire Program remains governed by | |||
| this License without regard to the additional permissions. | |||
| When you convey a copy of a covered work, you may at your option | |||
| remove any additional permissions from that copy, or from any part of | |||
| it. (Additional permissions may be written to require their own | |||
| removal in certain cases when you modify the work.) You may place | |||
| additional permissions on material, added by you to a covered work, | |||
| for which you have or can give appropriate copyright permission. | |||
| Notwithstanding any other provision of this License, for material you | |||
| add to a covered work, you may (if authorized by the copyright holders of | |||
| that material) supplement the terms of this License with terms: | |||
| a) Disclaiming warranty or limiting liability differently from the | |||
| terms of sections 15 and 16 of this License; or | |||
| b) Requiring preservation of specified reasonable legal notices or | |||
| author attributions in that material or in the Appropriate Legal | |||
| Notices displayed by works containing it; or | |||
| c) Prohibiting misrepresentation of the origin of that material, or | |||
| requiring that modified versions of such material be marked in | |||
| reasonable ways as different from the original version; or | |||
| d) Limiting the use for publicity purposes of names of licensors or | |||
| authors of the material; or | |||
| e) Declining to grant rights under trademark law for use of some | |||
| trade names, trademarks, or service marks; or | |||
| f) Requiring indemnification of licensors and authors of that | |||
| material by anyone who conveys the material (or modified versions of | |||
| it) with contractual assumptions of liability to the recipient, for | |||
| any liability that these contractual assumptions directly impose on | |||
| those licensors and authors. | |||
| All other non-permissive additional terms are considered "further | |||
| restrictions" within the meaning of section 10. If the Program as you | |||
| received it, or any part of it, contains a notice stating that it is | |||
| governed by this License along with a term that is a further | |||
| restriction, you may remove that term. If a license document contains | |||
| a further restriction but permits relicensing or conveying under this | |||
| License, you may add to a covered work material governed by the terms | |||
| of that license document, provided that the further restriction does | |||
| not survive such relicensing or conveying. | |||
| If you add terms to a covered work in accord with this section, you | |||
| must place, in the relevant source files, a statement of the | |||
| additional terms that apply to those files, or a notice indicating | |||
| where to find the applicable terms. | |||
| Additional terms, permissive or non-permissive, may be stated in the | |||
| form of a separately written license, or stated as exceptions; | |||
| the above requirements apply either way. | |||
| 8. Termination. | |||
| You may not propagate or modify a covered work except as expressly | |||
| provided under this License. Any attempt otherwise to propagate or | |||
| modify it is void, and will automatically terminate your rights under | |||
| this License (including any patent licenses granted under the third | |||
| paragraph of section 11). | |||
| However, if you cease all violation of this License, then your | |||
| license from a particular copyright holder is reinstated (a) | |||
| provisionally, unless and until the copyright holder explicitly and | |||
| finally terminates your license, and (b) permanently, if the copyright | |||
| holder fails to notify you of the violation by some reasonable means | |||
| prior to 60 days after the cessation. | |||
| Moreover, your license from a particular copyright holder is | |||
| reinstated permanently if the copyright holder notifies you of the | |||
| violation by some reasonable means, this is the first time you have | |||
| received notice of violation of this License (for any work) from that | |||
| copyright holder, and you cure the violation prior to 30 days after | |||
| your receipt of the notice. | |||
| Termination of your rights under this section does not terminate the | |||
| licenses of parties who have received copies or rights from you under | |||
| this License. If your rights have been terminated and not permanently | |||
| reinstated, you do not qualify to receive new licenses for the same | |||
| material under section 10. | |||
| 9. Acceptance Not Required for Having Copies. | |||
| You are not required to accept this License in order to receive or | |||
| run a copy of the Program. Ancillary propagation of a covered work | |||
| occurring solely as a consequence of using peer-to-peer transmission | |||
| to receive a copy likewise does not require acceptance. However, | |||
| nothing other than this License grants you permission to propagate or | |||
| modify any covered work. These actions infringe copyright if you do | |||
| not accept this License. Therefore, by modifying or propagating a | |||
| covered work, you indicate your acceptance of this License to do so. | |||
| 10. Automatic Licensing of Downstream Recipients. | |||
| Each time you convey a covered work, the recipient automatically | |||
| receives a license from the original licensors, to run, modify and | |||
| propagate that work, subject to this License. You are not responsible | |||
| for enforcing compliance by third parties with this License. | |||
| An "entity transaction" is a transaction transferring control of an | |||
| organization, or substantially all assets of one, or subdividing an | |||
| organization, or merging organizations. If propagation of a covered | |||
| work results from an entity transaction, each party to that | |||
| transaction who receives a copy of the work also receives whatever | |||
| licenses to the work the party's predecessor in interest had or could | |||
| give under the previous paragraph, plus a right to possession of the | |||
| Corresponding Source of the work from the predecessor in interest, if | |||
| the predecessor has it or can get it with reasonable efforts. | |||
| You may not impose any further restrictions on the exercise of the | |||
| rights granted or affirmed under this License. For example, you may | |||
| not impose a license fee, royalty, or other charge for exercise of | |||
| rights granted under this License, and you may not initiate litigation | |||
| (including a cross-claim or counterclaim in a lawsuit) alleging that | |||
| any patent claim is infringed by making, using, selling, offering for | |||
| sale, or importing the Program or any portion of it. | |||
| 11. Patents. | |||
| A "contributor" is a copyright holder who authorizes use under this | |||
| License of the Program or a work on which the Program is based. The | |||
| work thus licensed is called the contributor's "contributor version". | |||
| A contributor's "essential patent claims" are all patent claims | |||
| owned or controlled by the contributor, whether already acquired or | |||
| hereafter acquired, that would be infringed by some manner, permitted | |||
| by this License, of making, using, or selling its contributor version, | |||
| but do not include claims that would be infringed only as a | |||
| consequence of further modification of the contributor version. For | |||
| purposes of this definition, "control" includes the right to grant | |||
| patent sublicenses in a manner consistent with the requirements of | |||
| this License. | |||
| Each contributor grants you a non-exclusive, worldwide, royalty-free | |||
| patent license under the contributor's essential patent claims, to | |||
| make, use, sell, offer for sale, import and otherwise run, modify and | |||
| propagate the contents of its contributor version. | |||
| In the following three paragraphs, a "patent license" is any express | |||
| agreement or commitment, however denominated, not to enforce a patent | |||
| (such as an express permission to practice a patent or covenant not to | |||
| sue for patent infringement). To "grant" such a patent license to a | |||
| party means to make such an agreement or commitment not to enforce a | |||
| patent against the party. | |||
| If you convey a covered work, knowingly relying on a patent license, | |||
| and the Corresponding Source of the work is not available for anyone | |||
| to copy, free of charge and under the terms of this License, through a | |||
| publicly available network server or other readily accessible means, | |||
| then you must either (1) cause the Corresponding Source to be so | |||
| available, or (2) arrange to deprive yourself of the benefit of the | |||
| patent license for this particular work, or (3) arrange, in a manner | |||
| consistent with the requirements of this License, to extend the patent | |||
| license to downstream recipients. "Knowingly relying" means you have | |||
| actual knowledge that, but for the patent license, your conveying the | |||
| covered work in a country, or your recipient's use of the covered work | |||
| in a country, would infringe one or more identifiable patents in that | |||
| country that you have reason to believe are valid. | |||
| If, pursuant to or in connection with a single transaction or | |||
| arrangement, you convey, or propagate by procuring conveyance of, a | |||
| covered work, and grant a patent license to some of the parties | |||
| receiving the covered work authorizing them to use, propagate, modify | |||
| or convey a specific copy of the covered work, then the patent license | |||
| you grant is automatically extended to all recipients of the covered | |||
| work and works based on it. | |||
| A patent license is "discriminatory" if it does not include within | |||
| the scope of its coverage, prohibits the exercise of, or is | |||
| conditioned on the non-exercise of one or more of the rights that are | |||
| specifically granted under this License. You may not convey a covered | |||
| work if you are a party to an arrangement with a third party that is | |||
| in the business of distributing software, under which you make payment | |||
| to the third party based on the extent of your activity of conveying | |||
| the work, and under which the third party grants, to any of the | |||
| parties who would receive the covered work from you, a discriminatory | |||
| patent license (a) in connection with copies of the covered work | |||
| conveyed by you (or copies made from those copies), or (b) primarily | |||
| for and in connection with specific products or compilations that | |||
| contain the covered work, unless you entered into that arrangement, | |||
| or that patent license was granted, prior to 28 March 2007. | |||
| Nothing in this License shall be construed as excluding or limiting | |||
| any implied license or other defenses to infringement that may | |||
| otherwise be available to you under applicable patent law. | |||
| 12. No Surrender of Others' Freedom. | |||
| If conditions are imposed on you (whether by court order, agreement or | |||
| otherwise) that contradict the conditions of this License, they do not | |||
| excuse you from the conditions of this License. If you cannot convey a | |||
| covered work so as to satisfy simultaneously your obligations under this | |||
| License and any other pertinent obligations, then as a consequence you may | |||
| not convey it at all. For example, if you agree to terms that obligate you | |||
| to collect a royalty for further conveying from those to whom you convey | |||
| the Program, the only way you could satisfy both those terms and this | |||
| License would be to refrain entirely from conveying the Program. | |||
| 13. Use with the GNU Affero General Public License. | |||
| Notwithstanding any other provision of this License, you have | |||
| permission to link or combine any covered work with a work licensed | |||
| under version 3 of the GNU Affero General Public License into a single | |||
| combined work, and to convey the resulting work. The terms of this | |||
| License will continue to apply to the part which is the covered work, | |||
| but the special requirements of the GNU Affero General Public License, | |||
| section 13, concerning interaction through a network will apply to the | |||
| combination as such. | |||
| 14. Revised Versions of this License. | |||
| The Free Software Foundation may publish revised and/or new versions of | |||
| the GNU General Public License from time to time. Such new versions will | |||
| be similar in spirit to the present version, but may differ in detail to | |||
| address new problems or concerns. | |||
| Each version is given a distinguishing version number. If the | |||
| Program specifies that a certain numbered version of the GNU General | |||
| Public License "or any later version" applies to it, you have the | |||
| option of following the terms and conditions either of that numbered | |||
| version or of any later version published by the Free Software | |||
| Foundation. If the Program does not specify a version number of the | |||
| GNU General Public License, you may choose any version ever published | |||
| by the Free Software Foundation. | |||
| If the Program specifies that a proxy can decide which future | |||
| versions of the GNU General Public License can be used, that proxy's | |||
| public statement of acceptance of a version permanently authorizes you | |||
| to choose that version for the Program. | |||
| Later license versions may give you additional or different | |||
| permissions. However, no additional obligations are imposed on any | |||
| author or copyright holder as a result of your choosing to follow a | |||
| later version. | |||
| 15. Disclaimer of Warranty. | |||
| THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY | |||
| APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT | |||
| HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY | |||
| OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, | |||
| THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |||
| PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM | |||
| IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF | |||
| ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | |||
| 16. Limitation of Liability. | |||
| IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | |||
| WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS | |||
| THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY | |||
| GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE | |||
| USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF | |||
| DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD | |||
| PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), | |||
| EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF | |||
| SUCH DAMAGES. | |||
| 17. Interpretation of Sections 15 and 16. | |||
| If the disclaimer of warranty and limitation of liability provided | |||
| above cannot be given local legal effect according to their terms, | |||
| reviewing courts shall apply local law that most closely approximates | |||
| an absolute waiver of all civil liability in connection with the | |||
| Program, unless a warranty or assumption of liability accompanies a | |||
| copy of the Program in return for a fee. | |||
| END OF TERMS AND CONDITIONS | |||
| How to Apply These Terms to Your New Programs | |||
| If you develop a new program, and you want it to be of the greatest | |||
| possible use to the public, the best way to achieve this is to make it | |||
| free software which everyone can redistribute and change under these terms. | |||
| To do so, attach the following notices to the program. It is safest | |||
| to attach them to the start of each source file to most effectively | |||
| state the exclusion of warranty; and each file should have at least | |||
| the "copyright" line and a pointer to where the full notice is found. | |||
| <one line to give the program's name and a brief idea of what it does.> | |||
| Copyright (C) <year> <name of author> | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or | |||
| (at your option) any later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| Also add information on how to contact you by electronic and paper mail. | |||
| If the program does terminal interaction, make it output a short | |||
| notice like this when it starts in an interactive mode: | |||
| <program> Copyright (C) <year> <name of author> | |||
| This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | |||
| This is free software, and you are welcome to redistribute it | |||
| under certain conditions; type `show c' for details. | |||
| The hypothetical commands `show w' and `show c' should show the appropriate | |||
| parts of the General Public License. Of course, your program's commands | |||
| might be different; for a GUI interface, you would use an "about box". | |||
| You should also get your employer (if you work as a programmer) or school, | |||
| if any, to sign a "copyright disclaimer" for the program, if necessary. | |||
| For more information on this, and how to apply and follow the GNU GPL, see | |||
| <http://www.gnu.org/licenses/>. | |||
| The GNU General Public License does not permit incorporating your program | |||
| into proprietary programs. If your program is a subroutine library, you | |||
| may consider it more useful to permit linking proprietary applications with | |||
| the library. If this is what you want to do, use the GNU Lesser General | |||
| Public License instead of this License. But first, please read | |||
| <http://www.gnu.org/philosophy/why-not-lgpl.html>. | |||
| @ -0,0 +1,63 @@ | |||
| PHP_CodeSniffer plugin for Emacs Flymake mode | |||
| ============================================= | |||
| Flymake mode is an Emacs mode that allows you to run continuous | |||
| syntax checks against the current buffer "While U Type". | |||
| PHP_CodeSniffer is a static analysis tool for PHP that can be | |||
| configured to produce a wide range of warnings and errors | |||
| according to various customizable coding standards. | |||
| Emacs-flymake-phpcs glues the two together, giving you continuous | |||
| static analysis as you edit. | |||
| Setup | |||
| ----- | |||
| You will also need PHP_CodeSniffer installed, this can be installed | |||
| via PEAR or you can get the most recent from SVN here: | |||
| * http://svn.php.net/repository/pear/packages/PHP_CodeSniffer/trunk | |||
| Once you have PHP_CodeSniffer installed you can install | |||
| flymake-phpcs.el somewhere in your emacs load-path and add | |||
| something like the following to your .emacs: | |||
| ```lisp | |||
| ;; If flymake_phpcs isn't found correctly, specify the full path | |||
| (setq flymake-phpcs-command "~/projects/emacs-flymake-phpcs/bin/flymake_phpcs") | |||
| ;; Customize the coding standard checked by phpcs | |||
| (setq flymake-phpcs-standard | |||
| "~/projects/devtools/php_codesniffer/MyCompanyStandard") | |||
| ;; Show the name of sniffs in warnings (eg show | |||
| ;; "Generic.CodeAnalysis.VariableAnalysis.UnusedVariable" in an unused | |||
| ;; variable warning) | |||
| (setq flymake-phpcs-show-rule t) | |||
| (require 'flymake-phpcs) | |||
| ``` | |||
| Have fun. | |||
| See Also | |||
| -------- | |||
| If you want undefined and unused variable warnings, you might be | |||
| interested in my PHP_CodeSniffer-VariableAnalysis plugin: | |||
| * https://github.com/illusori/PHP_Codesniffer-VariableAnalysis | |||
| You might also be interested in my patched version of flymake.el | |||
| which contains fixes and enhancements that can be used by flymake-phpcs.el, | |||
| you can grab it from here: | |||
| * https://github.com/illusori/emacs-flymake | |||
| Known Issues & Bugs | |||
| ------------------- | |||
| * flymake-phpcs-standard file-name expansion is triggered by presence | |||
| of a / in the value, which isn't portable across OSes that use other | |||
| directory delimiters. | |||
| @ -0,0 +1,25 @@ | |||
| #!/bin/bash | |||
| # | |||
| # Wrapper around phpcs for Emacs flymake since flymake dislikes phpcs' exit code. | |||
| showhelp() { | |||
| echo "flymake_phpcs [-h] <source-file> [<phpcs-arguments>] | |||
| Run phpcs and \"php -l\" on <source-file> in a manner appropriate for use by Emacs flymake-phpcs.el. | |||
| -h Display this help. | |||
| <source-file> The source file to run the checks on. | |||
| <phpcs-arguments> Any additional argments on the commandline will be passed to phpcs."; | |||
| exit 0; | |||
| } | |||
| FILE_NAME="$1" | |||
| shift | |||
| # Run with --report=emacs so we can use this for compile-mode too. | |||
| phpcs --report=emacs "$FILE_NAME" $* | |||
| # Run php -l too for good measure. | |||
| php -l -f "$FILE_NAME" | |||
| exit 0 | |||
| @ -0,0 +1,16 @@ | |||
| ;;; flymake-phpcs-autoloads.el --- automatically extracted autoloads | |||
| ;; | |||
| ;;; Code: | |||
| (add-to-list 'load-path (or (file-name-directory #$) (car load-path))) | |||
| ;;;### (autoloads nil nil ("flymake-phpcs-pkg.el" "flymake-phpcs.el") | |||
| ;;;;;; (21371 33456 197735 130000)) | |||
| ;;;*** | |||
| ;; Local Variables: | |||
| ;; version-control: never | |||
| ;; no-byte-compile: t | |||
| ;; no-update-autoloads: t | |||
| ;; End: | |||
| ;;; flymake-phpcs-autoloads.el ends here | |||
| @ -0,0 +1 @@ | |||
| (define-package "flymake-phpcs" "1.0.5" "Flymake handler for PHP to invoke PHP-CodeSniffer" '((flymake "0.3"))) | |||
| @ -0,0 +1,81 @@ | |||
| ;;; flymake-phpcs.el --- Flymake handler for PHP to invoke PHP-CodeSniffer | |||
| ;; | |||
| ;; Copyright (C) 2011-2012 Free Software Foundation, Inc. | |||
| ;; | |||
| ;; Author: Sam Graham <libflymake-phpcs-emacs BLAHBLAH illusori.co.uk> | |||
| ;; Maintainer: Sam Graham <libflymake-phpcs-emacs BLAHBLAH illusori.co.uk> | |||
| ;; URL: https://github.com/illusori/emacs-flymake-phpcs | |||
| ;; Version: 1.0.5 | |||
| ;; Package-Requires: ((flymake "0.3")) | |||
| ;; This program is free software: you can redistribute it and/or modify | |||
| ;; it under the terms of the GNU General Public License as published by | |||
| ;; the Free Software Foundation, either version 3 of the License, or | |||
| ;; (at your option) any later version. | |||
| ;; | |||
| ;; This program is distributed in the hope that it will be useful, | |||
| ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| ;; GNU General Public License for more details. | |||
| ;; | |||
| ;; You should have received a copy of the GNU General Public License | |||
| ;; along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| ;; | |||
| ;;; Commentary: | |||
| ;; | |||
| ;; flymake-phpcs.el adds support for running PHP_CodeSniffer | |||
| ;; (http://pear.php.net/package/PHP_CodeSniffer/) to perform static | |||
| ;; analysis of your PHP file in addition to syntax checking. | |||
| ;; | |||
| ;;; Usage: | |||
| ;; (require 'flymake-phpcs) | |||
| (eval-when-compile (require 'flymake)) | |||
| (defcustom flymake-phpcs-command (executable-find (concat | |||
| (file-name-directory | |||
| (or load-file-name buffer-file-name)) | |||
| "bin/flymake_phpcs")) | |||
| "Location of flymake_phpcs wrapper." | |||
| :group 'flymake-phpcs | |||
| :type 'string) | |||
| (defcustom flymake-phpcs-standard "PEAR" | |||
| "The coding standard to pass to phpcs via --standard." | |||
| :group 'flymake-phpcs | |||
| :type 'string) | |||
| (defcustom flymake-phpcs-show-rule nil | |||
| "Whether to display the name of the phpcs rule generating any errors or warnings." | |||
| :group 'flymake-phpcs | |||
| :type 'boolean) | |||
| (defun flymake-phpcs-init () | |||
| (let* ((temp-file (flymake-init-create-temp-buffer-copy | |||
| (if (fboundp 'flymake-create-temp-copy) | |||
| 'flymake-create-temp-copy | |||
| 'flymake-create-temp-inplace))) | |||
| (local-file (file-relative-name temp-file | |||
| (file-name-directory buffer-file-name)))) | |||
| (list flymake-phpcs-command | |||
| (append | |||
| (list local-file) | |||
| (if flymake-phpcs-standard | |||
| (list (concat "--standard=" | |||
| ;; Looking for "/" is hardly portable | |||
| (if (string-match "/" flymake-phpcs-standard) | |||
| (expand-file-name flymake-phpcs-standard) | |||
| flymake-phpcs-standard)))) | |||
| (if flymake-phpcs-show-rule (list "-s")))))) | |||
| (eval-after-load "flymake" | |||
| '(progn | |||
| ;; Add a new error pattern to catch PHP-CodeSniffer output | |||
| (add-to-list 'flymake-err-line-patterns | |||
| '("\\(.*\\):\\([0-9]+\\):\\([0-9]+\\): \\(.*\\)" 1 2 3 4)) | |||
| (let ((mode-and-masks (flymake-get-file-name-mode-and-masks "example.php"))) | |||
| (setcar mode-and-masks 'flymake-phpcs-init)) | |||
| (add-hook 'php+-mode-hook (lambda() (flymake-mode 1)) t) | |||
| (add-hook 'php-mode-hook (lambda() (flymake-mode 1)) t))) | |||
| (provide 'flymake-phpcs) | |||
| ;;; flymake-phpcs.el ends here | |||
| @ -0,0 +1,16 @@ | |||
| ;;; fringe-helper-autoloads.el --- automatically extracted autoloads | |||
| ;; | |||
| ;;; Code: | |||
| (add-to-list 'load-path (or (file-name-directory #$) (car load-path))) | |||
| ;;;### (autoloads nil nil ("fringe-helper.el") (21394 7902 706100 | |||
| ;;;;;; 633000)) | |||
| ;;;*** | |||
| ;; Local Variables: | |||
| ;; version-control: never | |||
| ;; no-byte-compile: t | |||
| ;; no-update-autoloads: t | |||
| ;; End: | |||
| ;;; fringe-helper-autoloads.el ends here | |||
| @ -0,0 +1 @@ | |||
| (define-package "fringe-helper" "1.0.1" "helper functions for fringe bitmaps" 'nil) | |||
| @ -0,0 +1,345 @@ | |||
| ;;; fringe-helper.el --- helper functions for fringe bitmaps | |||
| ;; | |||
| ;; Copyright (C) 2008, 2013 Nikolaj Schumacher | |||
| ;; | |||
| ;; Author: Nikolaj Schumacher <bugs * nschum de> | |||
| ;; Version: 1.0.1 | |||
| ;; Keywords: lisp | |||
| ;; URL: http://nschum.de/src/emacs/fringe-helper/ | |||
| ;; Compatibility: GNU Emacs 22.x, GNU Emacs 23.x, GNU Emacs 24.x | |||
| ;; | |||
| ;; This file is NOT part of GNU Emacs. | |||
| ;; | |||
| ;; This program is free software; you can redistribute it and/or | |||
| ;; modify it under the terms of the GNU General Public License | |||
| ;; as published by the Free Software Foundation; either version 2 | |||
| ;; of the License, or (at your option) any later version. | |||
| ;; | |||
| ;; This program is distributed in the hope that it will be useful, | |||
| ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| ;; GNU General Public License for more details. | |||
| ;; | |||
| ;; You should have received a copy of the GNU General Public License | |||
| ;; along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| ;; | |||
| ;;; Commentary: | |||
| ;; | |||
| ;; fringe-helper contains helper functions for fringe bitmaps. | |||
| ;; | |||
| ;; `fringe-helper-define' allows you to to define fringe bitmaps using a visual | |||
| ;; string replesentation. For example: | |||
| ;; | |||
| ;; (fringe-helper-define 'test-bitmap '(top repeat) | |||
| ;; "XX......" | |||
| ;; "..XX...." | |||
| ;; "....XX.." | |||
| ;; "......XX") | |||
| ;; | |||
| ;; You can also generate arguments for `define-fringe-bitmap' yourself, by | |||
| ;; using `fringe-helper-convert'. | |||
| ;; | |||
| ;; fringe-helper also provides a few stock bitmaps. They are loaded on demand | |||
| ;; by `fringe-lib-load' and adapt to the current fringe size to a certain | |||
| ;; extend. | |||
| ;; | |||
| ;; `fringe-helper-insert' inserts a fringe bitmap at point and | |||
| ;; `fringe-helper-insert-region' inserts a fringe bitmap along a region. | |||
| ;; `fringe-helper-remove' removes both kinds. | |||
| ;; | |||
| ;; | |||
| ;; Here's an example for enhancing `flymake-mode' with fringe bitmaps: | |||
| ;; | |||
| ;; (require 'fringe-helper) | |||
| ;; (require 'flymake) | |||
| ;; | |||
| ;; (defvar flymake-fringe-overlays nil) | |||
| ;; (make-variable-buffer-local 'flymake-fringe-overlays) | |||
| ;; | |||
| ;; (defadvice flymake-make-overlay (after add-to-fringe first | |||
| ;; (beg end tooltip-text face mouse-face) | |||
| ;; activate compile) | |||
| ;; (push (fringe-helper-insert-region | |||
| ;; beg end | |||
| ;; (fringe-lib-load (if (eq face 'flymake-errline) | |||
| ;; fringe-lib-exclamation-mark | |||
| ;; fringe-lib-question-mark)) | |||
| ;; 'left-fringe 'font-lock-warning-face) | |||
| ;; flymake-fringe-overlays)) | |||
| ;; | |||
| ;; (defadvice flymake-delete-own-overlays (after remove-from-fringe activate | |||
| ;; compile) | |||
| ;; (mapc 'fringe-helper-remove flymake-fringe-overlays) | |||
| ;; (setq flymake-fringe-overlays nil)) | |||
| ;; | |||
| ;; | |||
| ;;; Change Log: | |||
| ;; | |||
| ;; Workaround for deleted overlay during callback. | |||
| ;; | |||
| ;; 2013-05-10 (1.0.1) | |||
| ;; Fixed overlay leak. (thanks to Cornelius Mika) | |||
| ;; | |||
| ;; 2013-03-24 (1.0) | |||
| ;; Fixed byte compile error. | |||
| ;; | |||
| ;; 2008-06-04 (0.1.1) | |||
| ;; Fixed bug where `fringe-helper-remove' missed overlays at the end. | |||
| ;; Fixed `fringe-lib-load' to work when already loaded. | |||
| ;; | |||
| ;; 2008-04-25 (0.1) | |||
| ;; Initial release. | |||
| ;; | |||
| ;;; Code: | |||
| (eval-when-compile (require 'cl)) | |||
| (eval-and-compile | |||
| (defun fringe-helper-convert (&rest strings) | |||
| "Convert STRINGS into a vector usable for `define-fringe-bitmap'. | |||
| Each string in STRINGS represents a line of the fringe bitmap. | |||
| Periods (.) are background-colored pixel; Xs are foreground-colored. The | |||
| fringe bitmap always is aligned to the right. If the fringe has half | |||
| width, only the left 4 pixels of an 8 pixel bitmap will be shown. | |||
| For example, the following code defines a diagonal line. | |||
| \(fringe-helper-convert | |||
| \"XX......\" | |||
| \"..XX....\" | |||
| \"....XX..\" | |||
| \"......XX\"\)" | |||
| (unless (cdr strings) | |||
| ;; only one string, probably with newlines | |||
| (setq strings (split-string (car strings) "\n"))) | |||
| (apply 'vector | |||
| (mapcar (lambda (str) | |||
| (let ((num 0)) | |||
| (dolist (c (string-to-list str)) | |||
| (setq num (+ (* num 2) (if (eq c ?.) 0 1)))) | |||
| num)) | |||
| strings)))) | |||
| (defmacro fringe-helper-define (name alignment &rest strings) | |||
| "Define a fringe bitmap from a visual representation. | |||
| Parameters NAME and ALIGNMENT are the same as `define-fringe-bitmap'. | |||
| Each string in STRINGS represents a line of the fringe bitmap as in | |||
| `fringe-helper-convert'." | |||
| (declare (indent defun)) | |||
| `(define-fringe-bitmap ,name | |||
| (eval-when-compile (fringe-helper-convert ,@strings)) | |||
| nil nil ,alignment)) | |||
| (defun fringe-helper-insert (bitmap pos &optional side face) | |||
| "Insert a fringe bitmap at POS. | |||
| BITMAP is the name of a bitmap defined with `define-fringe-bitmap' or | |||
| `fringe-helper-define'. SIDE defaults to 'left-fringe and can also be | |||
| 'right-fringe. FACE is used to determine the bitmap's color. | |||
| The function returns an object suitable for passing to | |||
| `fringe-helper-remove'." | |||
| (let* ((display-string `(,(or side 'left-fringe) ,bitmap . | |||
| ,(when face (cons face nil)))) | |||
| (before-string (propertize "!" 'display display-string)) | |||
| (ov (make-overlay pos pos))) | |||
| (overlay-put ov 'before-string before-string) | |||
| (overlay-put ov 'fringe-helper t) | |||
| ov)) | |||
| (defun fringe-helper-insert-region (beg end bitmap side &optional face) | |||
| "Insert fringe bitmaps between BEG and END. | |||
| BITMAP is the name of a bitmap defined with `define-fringe-bitmap' or | |||
| `fringe-helper-define'. SIDE defaults to 'left-fringe and can also be | |||
| 'right-fringe. FACE is used to determine the bitmap's color. The | |||
| function returns an overlay covering the entire region, which is suitable | |||
| for passing to `fringe-helper-remove'. The region grows and shrinks with | |||
| input automatically." | |||
| (let* ((display-string `(,(or side 'left-fringe) ,bitmap . | |||
| ,(when face (cons face nil)))) | |||
| (before-string (propertize "!" 'display display-string)) | |||
| (parent (make-overlay beg end)) | |||
| ov) | |||
| (save-excursion | |||
| (goto-char beg) | |||
| (goto-char (point-at-bol 2)) | |||
| ;; can't use <= here, or we'll get an infinity loop at buffer end | |||
| (while (and (<= (point) end) (< (point) (point-max))) | |||
| (setq ov (make-overlay (point) (point))) | |||
| (overlay-put ov 'before-string before-string) | |||
| (overlay-put ov 'fringe-helper-parent parent) | |||
| (goto-char (point-at-bol 2)))) | |||
| (overlay-put parent 'fringe-helper t) | |||
| (overlay-put parent 'before-string before-string) | |||
| (overlay-put parent 'insert-in-front-hooks | |||
| '(fringe-helper-modification-func)) | |||
| (overlay-put parent 'modification-hooks | |||
| '(fringe-helper-modification-func)) | |||
| parent)) | |||
| (defun fringe-helper-modification-func (ov after-p beg end &optional len) | |||
| ;; Sometimes this hook is called with a deleted overlay. | |||
| (when (overlay-start ov) | |||
| (setq beg (max beg (overlay-start ov))) | |||
| (setq end (min end (overlay-end ov))) | |||
| (if after-p | |||
| (if (eq beg end) | |||
| ;; evaporate overlay | |||
| (when (= (overlay-start ov) (overlay-end ov)) | |||
| (delete-overlay ov)) | |||
| ;; if new lines are inserted, add new bitmaps | |||
| (let ((before-string (overlay-get ov 'before-string)) | |||
| fringe-ov) | |||
| (save-excursion | |||
| (goto-char beg) | |||
| (while (search-forward "\n" end t) | |||
| (setq fringe-ov (make-overlay (point) (point))) | |||
| (overlay-put fringe-ov 'before-string before-string) | |||
| (overlay-put fringe-ov 'fringe-helper-parent ov))))) | |||
| ;; if a \n is removed, remove the fringe overlay | |||
| (unless (= beg end) | |||
| (save-excursion | |||
| (goto-char beg) | |||
| (while (search-forward "\n" end t) | |||
| (let ((overlays (overlays-in (point) (1+ (point))))) | |||
| (while overlays | |||
| (when (eq (overlay-get (car overlays) 'fringe-helper-parent) ov) | |||
| (delete-overlay (car overlays)) | |||
| (setq overlays nil)) | |||
| (pop overlays))))))))) | |||
| (defun fringe-helper-remove (fringe-bitmap-reference) | |||
| "Remove a fringe bitmap." | |||
| (unless (or (not (overlay-buffer fringe-bitmap-reference)) | |||
| (overlay-get fringe-bitmap-reference 'fringe-helper-parent)) | |||
| ;; region | |||
| (dolist (ov (overlays-in (overlay-start fringe-bitmap-reference) | |||
| (1+ (overlay-end fringe-bitmap-reference)))) | |||
| (when (eq (overlay-get ov 'fringe-helper-parent) fringe-bitmap-reference) | |||
| (delete-overlay ov))) | |||
| (delete-overlay fringe-bitmap-reference))) | |||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||
| (defun fringe-lib-load (pattern &optional side) | |||
| "Load a stock bitmap. | |||
| It returns the symbol name of the loaded bitmap, which is suitable for passing | |||
| to `fringe-helper-insert'. The actual work of defining the bitmap is only done | |||
| once. PATTERN can be one of the following: | |||
| `fringe-lib-exclamation-mark': an exclamation mark | |||
| `fringe-lib-question-mark': a question mark | |||
| `fringe-lib-zig-zag': a zig-zag pattern | |||
| `fringe-lib-wave': a wavy-line pattern | |||
| `fringe-lib-stipple': a stipple pattern | |||
| `fringe-lib-full': a solid color | |||
| SIDE should be either 'left-fringe or 'right-fringe and defaults to the former." | |||
| (let ((fringe-width (frame-parameter (selected-frame) | |||
| (or side 'left-fringe))) | |||
| (alignment (when (eq (car pattern) 'repeat) | |||
| (setq pattern (cdr pattern)) | |||
| '(top t)))) | |||
| (while (> (caar pattern) fringe-width) | |||
| (pop pattern)) | |||
| (setq pattern (cdar pattern)) | |||
| (or (car (memq (car pattern) fringe-bitmaps)) | |||
| (define-fringe-bitmap (car pattern) (cdr pattern) nil nil alignment)))) | |||
| (defconst fringe-lib-exclamation-mark | |||
| `((5 fringe-lib-exclamation-mark-5 . | |||
| ,(eval-when-compile | |||
| (fringe-helper-convert "...XX..." | |||
| "..XXXX.." | |||
| "..XXXX.." | |||
| "...XX..." | |||
| "...XX..." | |||
| "........" | |||
| "........" | |||
| "...XX..." | |||
| "...XX..."))) | |||
| (0 fringe-lib-exclamation-mark-0 . | |||
| ,(eval-when-compile | |||
| (fringe-helper-convert ".XX....." | |||
| ".XX....." | |||
| ".XX....." | |||
| ".XX....." | |||
| ".XX....." | |||
| "........" | |||
| "........" | |||
| ".XX....." | |||
| ".XX....."))))) | |||
| (defconst fringe-lib-question-mark | |||
| `((5 fringe-lib-question-mark-5 . | |||
| ,(eval-when-compile | |||
| (fringe-helper-convert "...XX..." | |||
| "..XXXX.." | |||
| "..X..X.." | |||
| "....XX.." | |||
| "...XX..." | |||
| "...XX..." | |||
| "........" | |||
| "...XX..." | |||
| "...XX..."))) | |||
| (0 fringe-lib-question-mark-0 . | |||
| ,(eval-when-compile | |||
| (fringe-helper-convert ".XX....." | |||
| "XXXX...." | |||
| "X..X...." | |||
| "..XX...." | |||
| ".XX....." | |||
| ".XX....." | |||
| "........" | |||
| ".XX....." | |||
| ".XX....."))))) | |||
| (defconst fringe-lib-zig-zag | |||
| `(repeat | |||
| (0 fringe-lib-zig-zag-0 . | |||
| ,(eval-when-compile | |||
| (fringe-helper-convert "X......." | |||
| "X......." | |||
| ".X......" | |||
| ".X......" | |||
| "..X....." | |||
| "..X....." | |||
| ".X......" | |||
| ".X......"))))) | |||
| (defconst fringe-lib-wave | |||
| `(repeat | |||
| (0 fringe-lib-wave-0 . | |||
| ,(eval-when-compile | |||
| (fringe-helper-convert "X......." | |||
| ".X......" | |||
| "..X....." | |||
| "..X....." | |||
| "..X....." | |||
| ".X......" | |||
| "X......." | |||
| "X......."))))) | |||
| (defconst fringe-lib-stipple | |||
| `(repeat | |||
| (0 fringe-lib-stipple-0 . | |||
| ,(eval-when-compile | |||
| (fringe-helper-convert "XXXXXXXX" | |||
| "XXXXXXXX" | |||
| "XXXXXXXX" | |||
| "........" | |||
| "........" | |||
| "........"))))) | |||
| (defconst fringe-lib-full | |||
| `(repeat | |||
| (0 fringe-lib-full-0 . | |||
| ,(eval-when-compile | |||
| (fringe-helper-convert "XXXXXXXX"))))) | |||
| (provide 'fringe-helper) | |||
| ;;; fringe-helper.el ends here | |||
| @ -1,29 +0,0 @@ | |||
| ;;; json-mode-autoloads.el --- automatically extracted autoloads | |||
| ;; | |||
| ;;; Code: | |||
| ;;;### (autoloads (json-mode) "json-mode" "json-mode.el" (21017 62178 | |||
| ;;;;;; 0 0)) | |||
| ;;; Generated autoloads from json-mode.el | |||
| (autoload 'json-mode "json-mode" "\ | |||
| Major mode for editing JSON files | |||
| \(fn)" t nil) | |||
| ;;;*** | |||
| ;;;### (autoloads nil nil ("json-mode-pkg.el") (21017 62178 965022 | |||
| ;;;;;; 0)) | |||
| ;;;*** | |||
| (provide 'json-mode-autoloads) | |||
| ;; Local Variables: | |||
| ;; version-control: never | |||
| ;; no-byte-compile: t | |||
| ;; no-update-autoloads: t | |||
| ;; coding: utf-8 | |||
| ;; End: | |||
| ;;; json-mode-autoloads.el ends here | |||
| @ -1 +0,0 @@ | |||
| (define-package "json-mode" "0.1.2" "Major mode for editing JSON files" (quote nil)) | |||
| @ -1,44 +0,0 @@ | |||
| ;;; json-mode.el --- Major mode for editing JSON files | |||
| ;;; Author: Josh Johnston | |||
| ;;; URL: https://github.com/joshwnj/json-mode | |||
| ;;; Version: 0.1.2 | |||
| ;;;; | |||
| ;; extend javascript-mode's syntax highlighting | |||
| (defvar json-mode-hook nil) | |||
| (defconst json-quoted-key-re "\\(\"[^\"]+?\"[ ]*:\\)") | |||
| (defconst json-quoted-string-re "\\(\".*?\"\\)") | |||
| (defconst json-number-re "[^\"]\\([0-9]+\\(\\.[0-9]+\\)?\\)[^\"]") | |||
| (defconst json-keyword-re "\\(true\\|false\\|null\\)") | |||
| (defconst json-font-lock-keywords-1 | |||
| (list | |||
| (list json-quoted-key-re 1 font-lock-keyword-face) | |||
| (list json-quoted-string-re 1 font-lock-string-face) | |||
| (list json-keyword-re 1 font-lock-constant-face) | |||
| (list json-number-re 1 font-lock-constant-face) | |||
| ) | |||
| "Level one font lock.") | |||
| (defun beautify-json () | |||
| (interactive) | |||
| (let ((b (if mark-active (min (point) (mark)) (point-min))) | |||
| (e (if mark-active (max (point) (mark)) (point-max)))) | |||
| ;; Beautify json with support for non-ascii characters. | |||
| ;; Thanks to https://github.com/jarl-dk for this improvement. | |||
| (shell-command-on-region b e | |||
| "python -c 'import sys,json; data=json.loads(sys.stdin.read()); print json.dumps(data,sort_keys=True,indent=4).decode(\"unicode_escape\").encode(\"utf8\",\"replace\")'" (current-buffer) t))) | |||
| ;;;###autoload | |||
| (define-derived-mode json-mode javascript-mode "JSON" | |||
| "Major mode for editing JSON files" | |||
| (set (make-local-variable 'font-lock-defaults) '(json-font-lock-keywords-1 t))) | |||
| (add-to-list 'auto-mode-alist '("\\.json$" . json-mode)) | |||
| (define-key json-mode-map (kbd "C-c C-f") 'beautify-json) | |||
| (provide 'json-mode) | |||
| ;;; json-mode.el ends here | |||
| @ -0,0 +1,34 @@ | |||
| ;;; json-mode-autoloads.el --- automatically extracted autoloads | |||
| ;; | |||
| ;;; Code: | |||
| (add-to-list 'load-path (or (file-name-directory #$) (car load-path))) | |||
| ;;;### (autoloads nil "json-mode" "json-mode.el" (21404 16856 131173 | |||
| ;;;;;; 649000)) | |||
| ;;; Generated autoloads from json-mode.el | |||
| (autoload 'json-mode-beautify "json-mode" "\ | |||
| Beautify / pretty-print from BEG to END, and optionally PRESERVE-KEY-ORDER. | |||
| \(fn &optional PRESERVE-KEY-ORDER)" t nil) | |||
| (autoload 'json-mode-beautify-ordered "json-mode" "\ | |||
| Beautify / pretty-print from BEG to END preserving key order. | |||
| \(fn)" t nil) | |||
| (autoload 'json-mode "json-mode" "\ | |||
| Major mode for editing JSON files | |||
| \(fn)" t nil) | |||
| (add-to-list 'auto-mode-alist '("\\.json$" . json-mode)) | |||
| ;;;*** | |||
| ;; Local Variables: | |||
| ;; version-control: never | |||
| ;; no-byte-compile: t | |||
| ;; no-update-autoloads: t | |||
| ;; End: | |||
| ;;; json-mode-autoloads.el ends here | |||
| @ -0,0 +1 @@ | |||
| (define-package "json-mode" "1.2.0" "Major mode for editing JSON files" 'nil) | |||
| @ -0,0 +1,95 @@ | |||
| ;;; json-mode.el --- Major mode for editing JSON files | |||
| ;; Copyright (C) 2011-2013 Josh Johnston | |||
| ;; Author: Josh Johnston | |||
| ;; URL: https://github.com/joshwnj/json-mode | |||
| ;; Version: 1.2.0 | |||
| ;; This program is free software; you can redistribute it and/or modify | |||
| ;; it under the terms of the GNU General Public License as published by | |||
| ;; the Free Software Foundation, either version 3 of the License, or | |||
| ;; (at your option) any later version. | |||
| ;; This program is distributed in the hope that it will be useful, | |||
| ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| ;; GNU General Public License for more details. | |||
| ;; You should have received a copy of the GNU General Public License | |||
| ;; along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| ;;; Commentary: | |||
| ;; extend the builtin js-mode's syntax highlighting | |||
| ;;; Code: | |||
| (require 'js) | |||
| (require 'rx) | |||
| (defconst json-mode-quoted-string-re | |||
| (rx (group (char ?\") | |||
| (zero-or-more (or (seq ?\\ ?\\) | |||
| (seq ?\\ ?\") | |||
| (seq ?\\ (not (any ?\" ?\\))) | |||
| (not (any ?\" ?\\)))) | |||
| (char ?\")))) | |||
| (defconst json-mode-quoted-key-re | |||
| (rx (group (char ?\") | |||
| (zero-or-more (or (seq ?\\ ?\\) | |||
| (seq ?\\ ?\") | |||
| (seq ?\\ (not (any ?\" ?\\))) | |||
| (not (any ?\" ?\\)))) | |||
| (char ?\")) | |||
| (zero-or-more blank) | |||
| ?\:)) | |||
| (defconst json-mode-number-re (rx (group (one-or-more digit) | |||
| (optional ?\. (one-or-more digit))))) | |||
| (defconst json-mode-keyword-re (rx (group (or "true" "false" "null")))) | |||
| (defconst json-font-lock-keywords-1 | |||
| (list | |||
| (list json-mode-quoted-key-re 1 font-lock-keyword-face) | |||
| (list json-mode-quoted-string-re 1 font-lock-string-face) | |||
| (list json-mode-keyword-re 1 font-lock-constant-face) | |||
| (list json-mode-number-re 1 font-lock-constant-face) | |||
| ) | |||
| "Level one font lock.") | |||
| (defconst json-mode-beautify-command-python2 | |||
| "python2 -c \"import sys,json,collections; data=json.loads(sys.stdin.read(),object_pairs_hook=collections.OrderedDict); print json.dumps(data,sort_keys=%s,indent=4,separators=(',',': ')).decode('unicode_escape').encode('utf8','replace')\"") | |||
| (defconst json-mode-beautify-command-python3 | |||
| "python3 -c \"import sys,json,codecs,collections; data=json.loads(sys.stdin.read(),object_pairs_hook=collections.OrderedDict); print((codecs.getdecoder('unicode_escape')(json.dumps(data,sort_keys=%s,indent=4,separators=(',',': '))))[0])\"") | |||
| ;;;###autoload | |||
| (defun json-mode-beautify (&optional preserve-key-order) | |||
| "Beautify / pretty-print from BEG to END, and optionally PRESERVE-KEY-ORDER." | |||
| (interactive "P") | |||
| (shell-command-on-region (if (use-region-p) (region-beginning) (point-min)) | |||
| (if (use-region-p) (region-end) (point-max)) | |||
| (concat (if (executable-find "env") "env " "") | |||
| (format (if (executable-find "python2") | |||
| json-mode-beautify-command-python2 | |||
| json-mode-beautify-command-python3) | |||
| (if preserve-key-order "False" "True"))) | |||
| (current-buffer) t)) | |||
| ;;;###autoload | |||
| (defun json-mode-beautify-ordered () | |||
| "Beautify / pretty-print from BEG to END preserving key order." | |||
| (interactive) | |||
| (json-mode-beautify t)) | |||
| ;;;###autoload | |||
| (define-derived-mode json-mode javascript-mode "JSON" | |||
| "Major mode for editing JSON files" | |||
| (set (make-local-variable 'font-lock-defaults) '(json-font-lock-keywords-1 t))) | |||
| ;;;###autoload | |||
| (add-to-list 'auto-mode-alist '("\\.json$" . json-mode)) | |||
| (define-key json-mode-map (kbd "C-c C-f") 'json-mode-beautify) | |||
| (provide 'json-mode) | |||
| ;;; json-mode.el ends here | |||
| @ -1 +0,0 @@ | |||
| (define-package "magit" "1.2.0" "Control Git from Emacs.") | |||
| @ -0,0 +1 @@ | |||
| (define-package "magit" "1.2.1" "Control Git from Emacs." 'nil) | |||
| @ -1,102 +0,0 @@ | |||
| ;;; php-extras-gen-eldoc.el --- Extra features for `php-mode' | |||
| ;; Copyright (C) 2012, 2013 Arne Jørgensen | |||
| ;; Author: Arne Jørgensen <arne@arnested.dk> | |||
| ;; This software is free software: you can redistribute it and/or | |||
| ;; modify it under the terms of the GNU General Public License as | |||
| ;; published by the Free Software Foundation, either version 3 of the | |||
| ;; License, or (at your option) any later version. | |||
| ;; This software is distributed in the hope that it will be useful, | |||
| ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
| ;; General Public License for more details. | |||
| ;; You should have received a copy of the GNU General Public License | |||
| ;; along with this software. If not, see | |||
| ;; <http://www.gnu.org/licenses/>. | |||
| ;;; Commentary: | |||
| ;; Download and parse PHP manual from php.net and build a new | |||
| ;; `php-extras-function-arguments' hash table of PHP functions and | |||
| ;; their arguments. | |||
| ;; Please note that build a new `php-extras-function-arguments' is a | |||
| ;; slow process and might be error prone. | |||
| ;;; Code: | |||
| (require 'php-mode) | |||
| (require 'php-extras) | |||
| (defvar php-extras-gen-eldoc-temp-methodname nil) | |||
| (defvar php-extras-php-funcsummary-url | |||
| "http://svn.php.net/repository/phpdoc/doc-base/trunk/funcsummary.txt" | |||
| "URL of the funcsummary.txt list of PHP functions.") | |||
| ;;;###autoload | |||
| (defun php-extras-generate-eldoc () | |||
| "Regenerate PHP function argument hash table from php.net. This is slow!" | |||
| (interactive) | |||
| (when (yes-or-no-p "Regenerate PHP function argument hash table from php.net? This is slow! ") | |||
| (php-extras-generate-eldoc-1 t))) | |||
| (defun php-extras-generate-eldoc-1 (&optional byte-compile) | |||
| (let ((function-arguments-temp (make-hash-table | |||
| :size 5000 | |||
| :rehash-threshold 1.0 | |||
| :rehash-size 100 | |||
| :test 'equal))) | |||
| (with-temp-buffer | |||
| (url-insert-file-contents php-extras-php-funcsummary-url) | |||
| (goto-char (point-min)) | |||
| (let ((line-count (count-lines (point-min) (point-max)))) | |||
| (with-syntax-table php-mode-syntax-table | |||
| (while (not (eobp)) | |||
| (let ((current-line (buffer-substring (point-at-bol) (point-at-eol)))) | |||
| ;; Skip methods for now: is there anything more intelligent | |||
| ;; we could do with them? | |||
| (unless (string-match-p "::" current-line) | |||
| (search-forward "(" (point-at-eol)) | |||
| (goto-char (match-beginning 0)) | |||
| (let ((function-name (thing-at-point 'symbol)) | |||
| (help-string (replace-regexp-in-string "[[:space:]]+" " " | |||
| current-line)) | |||
| (progress (* 100 (/ (float (line-number-at-pos)) line-count)))) | |||
| (message "[%2d%%] Parsing %s..." progress function-name) | |||
| (puthash function-name help-string function-arguments-temp)))) | |||
| ;; Skip over function description | |||
| (forward-line 2))))) | |||
| (let* ((file (concat php-extras-eldoc-functions-file ".el")) | |||
| (base-name (file-name-nondirectory php-extras-eldoc-functions-file))) | |||
| (with-temp-file file | |||
| (insert (format | |||
| ";;; %s.el -- file auto generated by `php-extras-generate-eldoc' | |||
| \(require 'php-extras) | |||
| \(setq php-extras-function-arguments %S) | |||
| \(provide 'php-extras-eldoc-functions) | |||
| ;;; %s.el ends here | |||
| " | |||
| base-name | |||
| function-arguments-temp | |||
| base-name))) | |||
| (when byte-compile | |||
| (message "Byte compiling and loading %s ..." file) | |||
| (byte-compile-file file t) | |||
| (message "Byte compiling and loading %s ... done." file))))) | |||
| (provide 'php-extras-gen-eldoc) | |||
| ;;; php-extras-gen-eldoc.el ends here | |||
| @ -1,3 +0,0 @@ | |||
| (define-package "php-extras" "1.0.0.20130923" | |||
| "Extra features for `php-mode'" | |||
| '((php-mode "1.5.0"))) | |||
| @ -0,0 +1,121 @@ | |||
| ;;; php-extras-gen-eldoc.el --- Extra features for `php-mode' | |||
| ;; Copyright (C) 2012, 2013, 2014 Arne Jørgensen | |||
| ;; Author: Arne Jørgensen <arne@arnested.dk> | |||
| ;; This software is free software: you can redistribute it and/or | |||
| ;; modify it under the terms of the GNU General Public License as | |||
| ;; published by the Free Software Foundation, either version 3 of the | |||
| ;; License, or (at your option) any later version. | |||
| ;; This software is distributed in the hope that it will be useful, | |||
| ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
| ;; General Public License for more details. | |||
| ;; You should have received a copy of the GNU General Public License | |||
| ;; along with this software. If not, see | |||
| ;; <http://www.gnu.org/licenses/>. | |||
| ;;; Commentary: | |||
| ;; Download and parse PHP manual from php.net and build a new | |||
| ;; `php-extras-function-arguments' hash table of PHP functions and | |||
| ;; their arguments. | |||
| ;; Please note that build a new `php-extras-function-arguments' is a | |||
| ;; slow process and might be error prone. | |||
| ;;; Code: | |||
| (require 'php-mode) | |||
| (require 'php-extras) | |||
| (require 'json) | |||
| (require 'shr) | |||
| (defvar php-extras-php-doc-url | |||
| "http://doc.php.net/downloads/json/php_manual_en.json" | |||
| "URL of the JSON list of PHP functions.") | |||
| ;;;###autoload | |||
| (defun php-extras-generate-eldoc () | |||
| "Regenerate PHP function argument hash table from php.net. This is slow!" | |||
| (interactive) | |||
| (when (yes-or-no-p "Regenerate PHP function argument hash table from php.net? This is slow! ") | |||
| (php-extras-generate-eldoc-1 t))) | |||
| (defun php-extras-generate-eldoc-1 (&optional byte-compile) | |||
| (with-current-buffer (url-retrieve-synchronously php-extras-php-doc-url) | |||
| (search-forward-regexp "^$") | |||
| (let* ((data (json-read)) | |||
| (count 0) | |||
| (progress 0) | |||
| (length (length data)) | |||
| (function-arguments-temp (make-hash-table | |||
| :size length | |||
| :rehash-threshold 1.0 | |||
| :rehash-size 100 | |||
| :test 'equal)) | |||
| doc) | |||
| (dolist (elem data) | |||
| (setq count (+ count 1)) | |||
| ;; Skip methods for now: is there anything more intelligent we | |||
| ;; could do with them? | |||
| (unless (string-match-p "::" (symbol-name (car elem))) | |||
| (setq progress (* 100 (/ (float count) length))) | |||
| (message "[%2d%%] Adding function: %s..." progress (car elem)) | |||
| (setq doc (concat | |||
| (cdr (assoc 'purpose (cdr elem))) | |||
| "\n\n" | |||
| (cdr (assoc 'prototype (cdr elem))) | |||
| "\n\n" | |||
| ;; The return element is HTML - use `shr' to | |||
| ;; render it back to plain text. | |||
| (save-window-excursion | |||
| (with-temp-buffer | |||
| (insert (cdr (assoc 'return (cdr elem)))) | |||
| (shr-render-buffer (current-buffer)) | |||
| (delete-trailing-whitespace) | |||
| (buffer-string))) | |||
| "\n\n" | |||
| "(" (cdr (assoc 'versions (cdr elem))) ")")) | |||
| (puthash (symbol-name (car elem)) (cons `(documentation . ,doc) (cdr elem)) function-arguments-temp))) | |||
| ;; PHP control structures are not present in JSON list. We add | |||
| ;; them here (hard coded - there are not so many of them). | |||
| (let ((php-control-structures '("if" "else" "elseif" "while" "do.while" "for" "foreach" "break" "continue" "switch" "declare" "return" "require" "include" "require_once" "include_once" "goto"))) | |||
| (dolist (php-control-structure php-control-structures) | |||
| (message "Adding control structure: %s..." php-control-structure) | |||
| (puthash php-control-structure | |||
| '((purpose . "Control structure") | |||
| (id . (concat "control-structures." php-control-structure))) | |||
| function-arguments-temp))) | |||
| (let* ((file (concat php-extras-eldoc-functions-file ".el")) | |||
| (base-name (file-name-nondirectory php-extras-eldoc-functions-file))) | |||
| (with-temp-file file | |||
| (insert (format | |||
| ";;; %s.el -- file auto generated by `php-extras-generate-eldoc' | |||
| \(require 'php-extras) | |||
| \(setq php-extras-function-arguments %S) | |||
| \(provide 'php-extras-eldoc-functions) | |||
| ;;; %s.el ends here | |||
| " | |||
| base-name | |||
| function-arguments-temp | |||
| base-name))) | |||
| (when byte-compile | |||
| (message "Byte compiling and loading %s ..." file) | |||
| (byte-compile-file file t) | |||
| (message "Byte compiling and loading %s ... done." file)))))) | |||
| (provide 'php-extras-gen-eldoc) | |||
| ;;; php-extras-gen-eldoc.el ends here | |||
| @ -0,0 +1 @@ | |||
| (define-package "php-extras" "2.2.0.20140405" "Extra features for `php-mode'" '((php-mode "1.5.0"))) | |||
| @ -0,0 +1,122 @@ | |||
| ;;; pkg-info-autoloads.el --- automatically extracted autoloads | |||
| ;; | |||
| ;;; Code: | |||
| (add-to-list 'load-path (or (file-name-directory #$) (car load-path))) | |||
| ;;;### (autoloads nil "pkg-info" "pkg-info.el" (21404 16847 995193 | |||
| ;;;;;; 920000)) | |||
| ;;; Generated autoloads from pkg-info.el | |||
| (autoload 'pkg-info-library-original-version "pkg-info" "\ | |||
| Get the original version in the header of LIBRARY. | |||
| The original version is stored in the X-Original-Version header. | |||
| This header is added by the MELPA package archive to preserve | |||
| upstream version numbers. | |||
| LIBRARY is either a symbol denoting a named feature, or a library | |||
| name as string. | |||
| If SHOW is non-nil, show the version in the minibuffer. | |||
| Return the version from the header of LIBRARY as list. Signal an | |||
| error if the LIBRARY was not found or had no X-Original-Version | |||
| header. | |||
| See Info node `(elisp)Library Headers' for more information | |||
| about library headers. | |||
| \(fn LIBRARY &optional SHOW)" t nil) | |||
| (autoload 'pkg-info-library-version "pkg-info" "\ | |||
| Get the version in the header of LIBRARY. | |||
| LIBRARY is either a symbol denoting a named feature, or a library | |||
| name as string. | |||
| If SHOW is non-nil, show the version in the minibuffer. | |||
| Return the version from the header of LIBRARY as list. Signal an | |||
| error if the LIBRARY was not found or had no proper header. | |||
| See Info node `(elisp)Library Headers' for more information | |||
| about library headers. | |||
| \(fn LIBRARY &optional SHOW)" t nil) | |||
| (autoload 'pkg-info-defining-library-original-version "pkg-info" "\ | |||
| Get the original version of the library defining FUNCTION. | |||
| The original version is stored in the X-Original-Version header. | |||
| This header is added by the MELPA package archive to preserve | |||
| upstream version numbers. | |||
| If SHOW is non-nil, show the version in mini-buffer. | |||
| This function is mainly intended to find the version of a major | |||
| or minor mode, i.e. | |||
| (pkg-info-defining-library-version 'flycheck-mode) | |||
| Return the version of the library defining FUNCTION. Signal an | |||
| error if FUNCTION is not a valid function, if its defining | |||
| library was not found, or if the library had no proper version | |||
| header. | |||
| \(fn FUNCTION &optional SHOW)" t nil) | |||
| (autoload 'pkg-info-defining-library-version "pkg-info" "\ | |||
| Get the version of the library defining FUNCTION. | |||
| If SHOW is non-nil, show the version in mini-buffer. | |||
| This function is mainly intended to find the version of a major | |||
| or minor mode, i.e. | |||
| (pkg-info-defining-library-version 'flycheck-mode) | |||
| Return the version of the library defining FUNCTION. Signal an | |||
| error if FUNCTION is not a valid function, if its defining | |||
| library was not found, or if the library had no proper version | |||
| header. | |||
| \(fn FUNCTION &optional SHOW)" t nil) | |||
| (autoload 'pkg-info-package-version "pkg-info" "\ | |||
| Get the version of an installed PACKAGE. | |||
| If SHOW is non-nil, show the version in the minibuffer. | |||
| Return the version as list, or nil if PACKAGE is not installed. | |||
| \(fn PACKAGE &optional SHOW)" t nil) | |||
| (autoload 'pkg-info-version-info "pkg-info" "\ | |||
| Obtain complete version info for LIBRARY and PACKAGE. | |||
| LIBRARY is a symbol denoting a named feature, or a library name | |||
| as string. PACKAGE is a symbol denoting an ELPA package. If | |||
| omitted or nil, default to LIBRARY. | |||
| If SHOW is non-nil, show the version in the minibuffer. | |||
| When called interactively, prompt for LIBRARY. When called | |||
| interactively with prefix argument, prompt for PACKAGE as well. | |||
| Return a string with complete version information for LIBRARY. | |||
| This version information contains the version from the headers of | |||
| LIBRARY, and the version of the installed PACKAGE, the LIBRARY is | |||
| part of. If PACKAGE is not installed, or if the PACKAGE version | |||
| is the same as the LIBRARY version, do not include a package | |||
| version. | |||
| \(fn LIBRARY &optional PACKAGE SHOW)" t nil) | |||
| ;;;*** | |||
| ;; Local Variables: | |||
| ;; version-control: never | |||
| ;; no-byte-compile: t | |||
| ;; no-update-autoloads: t | |||
| ;; End: | |||
| ;;; pkg-info-autoloads.el ends here | |||
| @ -0,0 +1 @@ | |||
| (define-package "pkg-info" "0.5" "Information about packages" '((dash "1.6.0") (epl "0.4"))) | |||
| @ -0,0 +1,277 @@ | |||
| ;;; pkg-info.el --- Information about packages -*- lexical-binding: t; -*- | |||
| ;; Copyright (C) 2013, 2014 Sebastian Wiesner | |||
| ;; Author: Sebastian Wiesner <lunaryorn@gmail.com> | |||
| ;; URL: https://github.com/lunaryorn/pkg-info.el | |||
| ;; Keywords: convenience | |||
| ;; Version: 0.5 | |||
| ;; Package-Requires: ((dash "1.6.0") (epl "0.4")) | |||
| ;; This file is not part of GNU Emacs. | |||
| ;; This program is free software; you can redistribute it and/or modify | |||
| ;; it under the terms of the GNU General Public License as published by | |||
| ;; the Free Software Foundation, either version 3 of the License, or | |||
| ;; (at your option) any later version. | |||
| ;; This program is distributed in the hope that it will be useful, | |||
| ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| ;; GNU General Public License for more details. | |||
| ;; You should have received a copy of the GNU General Public License | |||
| ;; along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| ;;; Commentary: | |||
| ;; This library extracts information from installed packages. | |||
| ;;;; Functions: | |||
| ;; `pkg-info-library-version' extracts the version from the header of a library. | |||
| ;; | |||
| ;; `pkg-info-defining-library-version' extracts the version from the header of a | |||
| ;; library defining a function. | |||
| ;; | |||
| ;; `pkg-info-package-version' gets the version of an installed package. | |||
| ;; | |||
| ;; `pkg-info-format-version' formats a version list as human readable string. | |||
| ;; | |||
| ;; `pkg-info-version-info' returns complete version information for a specific | |||
| ;; package. | |||
| ;;; Code: | |||
| (require 'epl) | |||
| (require 'dash) | |||
| (require 'lisp-mnt) | |||
| (require 'find-func) | |||
| ;;;; Version information | |||
| (defun pkg-info-format-version (version) | |||
| "Format VERSION as human-readable string. | |||
| Return a human-readable string representing VERSION." | |||
| ;; XXX: Find a better, more flexible way of formatting? | |||
| (package-version-join version)) | |||
| (defsubst pkg-info--show-version-and-return (version show) | |||
| "Show and return VERSION. | |||
| When SHOW is non-nil, show VERSION in minibuffer. | |||
| Return VERSION." | |||
| (when show | |||
| (message (if (listp version) (pkg-info-format-version version) version))) | |||
| version) | |||
| (defun pkg-info--read-library () | |||
| "Read a library from minibuffer." | |||
| (completing-read "Load library: " | |||
| (apply-partially 'locate-file-completion-table | |||
| load-path | |||
| (get-load-suffixes)))) | |||
| (defun pkg-info--read-function () | |||
| "Read a function name from minibuffer." | |||
| (let ((input (completing-read "Function: " obarray #'boundp :require-match))) | |||
| (if (string= input "") nil (intern input)))) | |||
| (defun pkg-info--read-package () | |||
| "Read a package name from minibuffer." | |||
| (let* ((installed (epl-installed-packages)) | |||
| (names (-sort #'string< | |||
| (--map (symbol-name (epl-package-name it)) installed))) | |||
| (default (car names))) | |||
| (completing-read "Installed package: " names nil 'require-match | |||
| nil nil default))) | |||
| (defun pkg-info-library-source (library) | |||
| "Get the source file of LIBRARY. | |||
| LIBRARY is either a symbol denoting a named feature, or a library | |||
| name as string. | |||
| Return the source file of LIBRARY as string." | |||
| (find-library-name (if (symbolp library) (symbol-name library) library))) | |||
| (defun pkg-info-defining-library (function) | |||
| "Get the source file of the library defining FUNCTION. | |||
| FUNCTION is a function symbol. | |||
| Return the file name of the library as string. Signal an error | |||
| if the library does not exist, or if the definition of FUNCTION | |||
| was not found." | |||
| (unless (functionp function) | |||
| (signal 'wrong-type-argument (list 'functionp function))) | |||
| (let ((library (symbol-file function 'defun))) | |||
| (unless library | |||
| (error "Can't find definition of %s" function)) | |||
| library)) | |||
| (defun pkg-info-x-original-version (file) | |||
| "Read the X-Original-Version header from FILE. | |||
| Return the value as version list, or return nil if FILE lacks | |||
| this header. Signal an error, if the value of the header is not | |||
| a valid version." | |||
| (let ((version-str (with-temp-buffer | |||
| (insert-file-contents file) | |||
| (lm-header "X-Original-Version")))) | |||
| (when version-str | |||
| (version-to-list version-str)))) | |||
| ;;;###autoload | |||
| (defun pkg-info-library-original-version (library &optional show) | |||
| "Get the original version in the header of LIBRARY. | |||
| The original version is stored in the X-Original-Version header. | |||
| This header is added by the MELPA package archive to preserve | |||
| upstream version numbers. | |||
| LIBRARY is either a symbol denoting a named feature, or a library | |||
| name as string. | |||
| If SHOW is non-nil, show the version in the minibuffer. | |||
| Return the version from the header of LIBRARY as list. Signal an | |||
| error if the LIBRARY was not found or had no X-Original-Version | |||
| header. | |||
| See Info node `(elisp)Library Headers' for more information | |||
| about library headers." | |||
| (interactive (list (pkg-info--read-library) t)) | |||
| (let ((version (pkg-info-x-original-version | |||
| (pkg-info-library-source library)))) | |||
| (if version | |||
| (pkg-info--show-version-and-return version show) | |||
| (error "Library %s has no original version" library)))) | |||
| ;;;###autoload | |||
| (defun pkg-info-library-version (library &optional show) | |||
| "Get the version in the header of LIBRARY. | |||
| LIBRARY is either a symbol denoting a named feature, or a library | |||
| name as string. | |||
| If SHOW is non-nil, show the version in the minibuffer. | |||
| Return the version from the header of LIBRARY as list. Signal an | |||
| error if the LIBRARY was not found or had no proper header. | |||
| See Info node `(elisp)Library Headers' for more information | |||
| about library headers." | |||
| (interactive (list (pkg-info--read-library) t)) | |||
| (let* ((source (pkg-info-library-source library)) | |||
| (version (epl-package-version (epl-package-from-file source)))) | |||
| (pkg-info--show-version-and-return version show))) | |||
| ;;;###autoload | |||
| (defun pkg-info-defining-library-original-version (function &optional show) | |||
| "Get the original version of the library defining FUNCTION. | |||
| The original version is stored in the X-Original-Version header. | |||
| This header is added by the MELPA package archive to preserve | |||
| upstream version numbers. | |||
| If SHOW is non-nil, show the version in mini-buffer. | |||
| This function is mainly intended to find the version of a major | |||
| or minor mode, i.e. | |||
| (pkg-info-defining-library-version 'flycheck-mode) | |||
| Return the version of the library defining FUNCTION. Signal an | |||
| error if FUNCTION is not a valid function, if its defining | |||
| library was not found, or if the library had no proper version | |||
| header." | |||
| (interactive (list (pkg-info--read-function) t)) | |||
| (pkg-info-library-original-version (pkg-info-defining-library function) show)) | |||
| ;;;###autoload | |||
| (defun pkg-info-defining-library-version (function &optional show) | |||
| "Get the version of the library defining FUNCTION. | |||
| If SHOW is non-nil, show the version in mini-buffer. | |||
| This function is mainly intended to find the version of a major | |||
| or minor mode, i.e. | |||
| (pkg-info-defining-library-version 'flycheck-mode) | |||
| Return the version of the library defining FUNCTION. Signal an | |||
| error if FUNCTION is not a valid function, if its defining | |||
| library was not found, or if the library had no proper version | |||
| header." | |||
| (interactive (list (pkg-info--read-function) t)) | |||
| (pkg-info-library-version (pkg-info-defining-library function) show)) | |||
| ;;;###autoload | |||
| (defun pkg-info-package-version (package &optional show) | |||
| "Get the version of an installed PACKAGE. | |||
| If SHOW is non-nil, show the version in the minibuffer. | |||
| Return the version as list, or nil if PACKAGE is not installed." | |||
| (interactive (list (pkg-info--read-package) t)) | |||
| (let* ((name (if (stringp package) (intern package) package)) | |||
| (package (epl-find-installed-package name))) | |||
| (unless package | |||
| (error "Can't find installed package %s" name)) | |||
| (pkg-info--show-version-and-return (epl-package-version package) show))) | |||
| ;;;###autoload | |||
| (defun pkg-info-version-info (library &optional package show) | |||
| "Obtain complete version info for LIBRARY and PACKAGE. | |||
| LIBRARY is a symbol denoting a named feature, or a library name | |||
| as string. PACKAGE is a symbol denoting an ELPA package. If | |||
| omitted or nil, default to LIBRARY. | |||
| If SHOW is non-nil, show the version in the minibuffer. | |||
| When called interactively, prompt for LIBRARY. When called | |||
| interactively with prefix argument, prompt for PACKAGE as well. | |||
| Return a string with complete version information for LIBRARY. | |||
| This version information contains the version from the headers of | |||
| LIBRARY, and the version of the installed PACKAGE, the LIBRARY is | |||
| part of. If PACKAGE is not installed, or if the PACKAGE version | |||
| is the same as the LIBRARY version, do not include a package | |||
| version." | |||
| (interactive (list (pkg-info--read-library) | |||
| (when current-prefix-arg | |||
| (pkg-info--read-package)) | |||
| t)) | |||
| (let* ((package (or package (if (stringp library) (intern library) library))) | |||
| (orig-version (condition-case nil | |||
| (pkg-info-library-original-version library) | |||
| (error nil))) | |||
| ;; If we have X-Original-Version, we assume that MELPA replaced the | |||
| ;; library version with its generated version, so we use the | |||
| ;; X-Original-Version header instead, and ignore the library version | |||
| ;; header | |||
| (lib-version (or orig-version (pkg-info-library-version library))) | |||
| (pkg-version (condition-case nil | |||
| (pkg-info-package-version package) | |||
| (error nil))) | |||
| (version (if (and pkg-version | |||
| (not (version-list-= lib-version pkg-version))) | |||
| (format "%s (package: %s)" | |||
| (pkg-info-format-version lib-version) | |||
| (pkg-info-format-version pkg-version)) | |||
| (pkg-info-format-version lib-version)))) | |||
| (pkg-info--show-version-and-return version show))) | |||
| (provide 'pkg-info) | |||
| ;; Local Variables: | |||
| ;; indent-tabs-mode: nil | |||
| ;; coding: utf-8 | |||
| ;; End: | |||
| ;;; pkg-info.el ends here | |||
| @ -1 +0,0 @@ | |||
| (define-package "s" "1.6.1" "The long lost Emacs string manipulation library." (quote nil)) | |||
| @ -0,0 +1 @@ | |||
| (define-package "s" "1.9.0" "The long lost Emacs string manipulation library." 'nil) | |||
| @ -1,18 +0,0 @@ | |||
| ;;; yaml-mode-autoloads.el --- automatically extracted autoloads | |||
| ;; | |||
| ;;; Code: | |||
| ;;;### (autoloads nil nil ("yaml-mode-pkg.el" "yaml-mode.el") (20966 | |||
| ;;;;;; 63395 755844 0)) | |||
| ;;;*** | |||
| (provide 'yaml-mode-autoloads) | |||
| ;; Local Variables: | |||
| ;; version-control: never | |||
| ;; no-byte-compile: t | |||
| ;; no-update-autoloads: t | |||
| ;; coding: utf-8 | |||
| ;; End: | |||
| ;;; yaml-mode-autoloads.el ends here | |||
| @ -1 +0,0 @@ | |||
| (define-package "yaml-mode" "0.0.7" "Major mode for editing YAML files" (quote nil)) | |||
| @ -0,0 +1,28 @@ | |||
| ;;; yaml-mode-autoloads.el --- automatically extracted autoloads | |||
| ;; | |||
| ;;; Code: | |||
| (add-to-list 'load-path (or (file-name-directory #$) (car load-path))) | |||
| ;;;### (autoloads nil "yaml-mode" "yaml-mode.el" (21404 16846 983196 | |||
| ;;;;;; 439000)) | |||
| ;;; Generated autoloads from yaml-mode.el | |||
| (let ((loads (get 'yaml 'custom-loads))) (if (member '"yaml-mode" loads) nil (put 'yaml 'custom-loads (cons '"yaml-mode" loads)))) | |||
| (autoload 'yaml-mode "yaml-mode" "\ | |||
| Simple mode to edit YAML. | |||
| \\{yaml-mode-map} | |||
| \(fn)" t nil) | |||
| (add-to-list 'auto-mode-alist '("\\.ya?ml$" . yaml-mode)) | |||
| ;;;*** | |||
| ;; Local Variables: | |||
| ;; version-control: never | |||
| ;; no-byte-compile: t | |||
| ;; no-update-autoloads: t | |||
| ;; End: | |||
| ;;; yaml-mode-autoloads.el ends here | |||
| @ -0,0 +1 @@ | |||
| (define-package "yaml-mode" "0.0.9" "Major mode for editing YAML files" 'nil) | |||