From 330e9a5ed40c13ada5260c8d007cb5b5ed9ffb4e Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Tue, 6 Dec 2011 15:26:22 +0100 Subject: [PATCH 01/22] added derived ikiwiki mode; do not follow [[!command]]-directives --- markdown-mode.el | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index f2c1823c..a517c5a1 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -810,6 +810,11 @@ wiki links of the form [[PageName|link text]]. In this regular expression, #1 matches the page name and #3 matches the link text.") +(defconst markdown-regex-ikiwiki-directive + "\\[\\[![^]]+?\\]\\]" + "Regular expression for matching ikiwiki directives of the form +[[!command param1='test']].") + (defconst markdown-regex-uri (concat "\\(" (mapconcat 'identity markdown-uri-types "\\|") @@ -2072,13 +2077,15 @@ match the current file name after conversion. This modifies the data returned by `match-data'. Note that the potential wiki link name must be available via `match-string'." (let ((case-fold-search nil)) - (and (thing-at-point-looking-at markdown-regex-wiki-link) - (or (not buffer-file-name) - (not (string-equal (buffer-file-name) - (markdown-convert-wiki-link-to-filename - (markdown-wiki-link-link))))) - (not (save-match-data - (save-excursion)))))) + (and (and (eq major-mode 'ikiwiki-mode) + (not (thing-at-point-looking-at markdown-regex-ikiwiki-directive))) + (thing-at-point-looking-at markdown-regex-wiki-link) + (or (not buffer-file-name) + (not (string-equal (buffer-file-name) + (markdown-convert-wiki-link-to-filename + (markdown-wiki-link-link))))) + (not (save-match-data + (save-excursion)))))) (defun markdown-wiki-link-link () "Return the link part of the wiki link using current match data. @@ -2318,6 +2325,11 @@ This is an exact copy of `line-number-at-pos' for use in emacs21." ;; do the initial link fontification (markdown-fontify-buffer-wiki-links)) +;;; Ikiwiki Markdown Mode ============================================ + +(define-derived-mode ikiwiki-mode markdown-mode "MarkdownIki" + "Major mode for editing Ikiwiki Markdown files." +) (provide 'markdown-mode) From 8c3cb08571d1c9112b280b6e92f8051daea8571a Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Tue, 6 Dec 2011 17:54:59 +0100 Subject: [PATCH 02/22] ikiwiki-directives are now handled by changing the link-regex in case of ikiwiki-mode; this has the advantage that behaviour can be fully customized and the directives are not subject to all the fancy linking behaviour --- markdown-mode.el | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index a517c5a1..e96aafd4 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -590,6 +590,9 @@ This will not take effect until Emacs is restarted." (defvar markdown-missing-link-face 'markdown-missing-link-face "Face name to use for links where the linked file does not exist.") +(defvar markdown-ikiwiki-directive-face 'markdown-ikiwiki-directive-face + "Face name to use for ikiwiki-directives.") + (defvar markdown-reference-face 'markdown-reference-face "Face name to use for reference.") @@ -688,6 +691,11 @@ This will not take effect until Emacs is restarted." "Face for missing links." :group 'markdown-faces) +(defface markdown-ikiwiki-directive-face + '((t (:inherit markdown-header-face))) + "Face for ikiwiki-directives." + :group 'markdown-faces) + (defface markdown-reference-face '((t (:inherit font-lock-type-face))) "Face for link references." @@ -892,6 +900,13 @@ text.") (cons "\\\\eqref{\\w+}" 'markdown-reference-face)) "Syntax highlighting for LaTeX fragments.") +(defconst markdown-mode-font-lock-keywords-ikiwiki + (list + ;; directive [[!command ]] + (cons markdown-regex-ikiwiki-directive + 'markdown-ikiwiki-directive-face)) + "Syntax highlighting for Ikiwiki-specific statements.") + (defvar markdown-mode-font-lock-keywords (append (if markdown-enable-math @@ -2077,9 +2092,7 @@ match the current file name after conversion. This modifies the data returned by `match-data'. Note that the potential wiki link name must be available via `match-string'." (let ((case-fold-search nil)) - (and (and (eq major-mode 'ikiwiki-mode) - (not (thing-at-point-looking-at markdown-regex-ikiwiki-directive))) - (thing-at-point-looking-at markdown-regex-wiki-link) + (and (thing-at-point-looking-at markdown-regex-wiki-link) (or (not buffer-file-name) (not (string-equal (buffer-file-name) (markdown-convert-wiki-link-to-filename @@ -2329,6 +2342,21 @@ This is an exact copy of `line-number-at-pos' for use in emacs21." (define-derived-mode ikiwiki-mode markdown-mode "MarkdownIki" "Major mode for editing Ikiwiki Markdown files." + + ;; change regex to exclude ikiwiki-directives + (setq markdown-regex-wiki-link + "\\[\\[\\([^!][^]|]+\\)\\(|\\([^]]+\\)\\)?\\]\\]") + + ;; Font lock. + (setq markdown-mode-font-lock-keywords + (append markdown-mode-font-lock-keywords-ikiwiki + markdown-mode-font-lock-keywords )) + (set (make-local-variable 'font-lock-defaults) + '(markdown-mode-font-lock-keywords)) + + + ;; do the initial link fontification + (markdown-fontify-buffer-wiki-links) ) (provide 'markdown-mode) From a1db02d5f0ac8759078c3cc89605c755abcf340e Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Wed, 7 Dec 2011 12:50:30 +0100 Subject: [PATCH 03/22] replacing markdown-follow-wiki-link-at-point with ikiwiki-specific function --- markdown-mode.el | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/markdown-mode.el b/markdown-mode.el index e96aafd4..3b6f4516 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -1,4 +1,4 @@ -;;; markdown-mode.el --- Emacs Major mode for Markdown-formatted text files +;;; backup --- Emacs Major mode for Markdown-formatted text files ;; Copyright (C) 2007-2011 Jason R. Blevins ;; Copyright (C) 2007, 2009 Edward O'Connor @@ -1610,6 +1610,7 @@ it in the usual way." (markdown-follow-wiki-link-at-point) (markdown-do-normal-return))) + ;;; Keymap ==================================================================== @@ -2139,6 +2140,19 @@ See `markdown-wiki-link-p' and `markdown-follow-wiki-link'." (markdown-follow-wiki-link (markdown-wiki-link-link)) (error "Point is not at a Wiki Link"))) +(defun markdown-follow-wiki-link-at-point-ikiwiki () + "Find Wiki Link at point. Asks whether it should be +created in a subdirectory of the current file or in the cwd. +This function replaces `markdown-follow-wiki-link-at-point' +in `ikiwiki-mode'. +See `markdown-wiki-link-p' and `markdown-follow-wiki-link'." + (interactive) + (progn + (message "ikiwiki-follow") + (if (markdown-wiki-link-p) + (markdown-follow-wiki-link (markdown-wiki-link-link)) + (error "Point is not at a Wiki Link"))) ) + (defun markdown-next-wiki-link () "Jump to next wiki link. See `markdown-wiki-link-p'." @@ -2347,6 +2361,10 @@ This is an exact copy of `line-number-at-pos' for use in emacs21." (setq markdown-regex-wiki-link "\\[\\[\\([^!][^]|]+\\)\\(|\\([^]]+\\)\\)?\\]\\]") + ;; change link-following function to prompt for filename + (message "loading ikiwiki-mode") + (setq markdown-follow-wiki-link-at-point 'markdown-follow-wiki-link-at-point-ikiwiki) + ;; Font lock. (setq markdown-mode-font-lock-keywords (append markdown-mode-font-lock-keywords-ikiwiki From 68f911517d1490d587fb41bdab4a8f65ba61669b Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Wed, 7 Dec 2011 12:58:12 +0100 Subject: [PATCH 04/22] Do not enforce markdown-mode in new buffers but use the mode from the buffer we are coming from. This helps to create gfm-mode or ikiwiki-mode files in their appropriate modes. --- markdown-mode.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index 3b6f4516..025dbb6f 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -1,4 +1,4 @@ -;;; backup --- Emacs Major mode for Markdown-formatted text files +;;; markdown-mode.el --- Emacs Major mode for Markdown-formatted text files ;; Copyright (C) 2007-2011 Jason R. Blevins ;; Copyright (C) 2007, 2009 Edward O'Connor @@ -2129,8 +2129,8 @@ and [[test test]] both map to Test-test.ext." Convert the name to a file name and call `find-file'. Ensure that the new buffer remains in `markdown-mode'." (let ((filename (markdown-convert-wiki-link-to-filename name))) - (find-file filename)) - (markdown-mode)) + (find-file filename))) + (defun markdown-follow-wiki-link-at-point () "Find Wiki Link at point. From 7805d9575126a93c36b0085e761d66cf46b4ede8 Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Wed, 7 Dec 2011 14:24:25 +0100 Subject: [PATCH 05/22] amarkdown-follow-wiki-link-to-file can prompt for file --- markdown-mode.el | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index 025dbb6f..0512ffa9 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -2126,8 +2126,7 @@ and [[test test]] both map to Test-test.ext." (defun markdown-follow-wiki-link (name) "Follow the wiki link NAME. -Convert the name to a file name and call `find-file'. Ensure that -the new buffer remains in `markdown-mode'." +Convert the name to a file name and call `find-file'." (let ((filename (markdown-convert-wiki-link-to-filename name))) (find-file filename))) @@ -2140,18 +2139,6 @@ See `markdown-wiki-link-p' and `markdown-follow-wiki-link'." (markdown-follow-wiki-link (markdown-wiki-link-link)) (error "Point is not at a Wiki Link"))) -(defun markdown-follow-wiki-link-at-point-ikiwiki () - "Find Wiki Link at point. Asks whether it should be -created in a subdirectory of the current file or in the cwd. -This function replaces `markdown-follow-wiki-link-at-point' -in `ikiwiki-mode'. -See `markdown-wiki-link-p' and `markdown-follow-wiki-link'." - (interactive) - (progn - (message "ikiwiki-follow") - (if (markdown-wiki-link-p) - (markdown-follow-wiki-link (markdown-wiki-link-link)) - (error "Point is not at a Wiki Link"))) ) (defun markdown-next-wiki-link () "Jump to next wiki link. @@ -2361,9 +2348,30 @@ This is an exact copy of `line-number-at-pos' for use in emacs21." (setq markdown-regex-wiki-link "\\[\\[\\([^!][^]|]+\\)\\(|\\([^]]+\\)\\)?\\]\\]") - ;; change link-following function to prompt for filename + (message "loading ikiwiki-mode") - (setq markdown-follow-wiki-link-at-point 'markdown-follow-wiki-link-at-point-ikiwiki) + + + (defun markdown-follow-wiki-link-to-file (file) + "" + (interactive (list + (read-string "File: " + (concat + (file-name-as-directory (file-name-sans-extension (buffer-name))) + (markdown-convert-wiki-link-to-filename + (markdown-wiki-link-link)))))) + (message"filename is %s" file)) + + ;; change link-following function to prompt for filename + (defun markdown-follow-wiki-link-at-point () + "Find Wiki Link at point. Asks whether it should be +created in a subdirectory of the current file or in the cwd. +This function replaces `markdown-follow-wiki-link-at-point' +in `ikiwiki-mode'. +See `markdown-wiki-link-p' and `markdown-follow-wiki-link'." + (interactive) + (call-interactively 'markdown-follow-wiki-link-to-file)) + ;; Font lock. (setq markdown-mode-font-lock-keywords From 5ddea9a18e03601b50965b263d923fd555e6946b Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Wed, 7 Dec 2011 16:38:51 +0100 Subject: [PATCH 06/22] fancy link-following for ikiwiki completed --- markdown-mode.el | 82 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 68 insertions(+), 14 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index 0512ffa9..711ae2ad 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -492,6 +492,11 @@ buffers which are visiting a file." :group 'markdown :type 'boolean) +(defcustom markdown-ikiwiki-toplevel nil + "Path to main ikiwiki-directory." + :group 'markdown + :type 'string) + (defcustom markdown-wiki-link-alias-first t "When non-nil, treat aliased wiki links like [[alias text|PageName]]. Otherwise, they will be treated as [[PageName|alias text]]." @@ -2139,6 +2144,67 @@ See `markdown-wiki-link-p' and `markdown-follow-wiki-link'." (markdown-follow-wiki-link (markdown-wiki-link-link)) (error "Point is not at a Wiki Link"))) +(defun markdown-follow-wiki-link-file (file) + "Given a path, open a new file at this location, +possibly creating directories. Used in conjunction with +`markdown-follow-wiki-link-at-point-ikiwiki' to allow opening +files in different locations." + (interactive (list + (read-string + "File: " + (concat + (file-name-as-directory (file-name-sans-extension (buffer-name))) + (markdown-convert-wiki-link-to-filename + (markdown-wiki-link-link)))))) + (let ( (dir (file-name-directory file)) ) + (if dir (make-directory (file-name-directory file) t) ) + (find-file file) + (message"filename is %s" file)) ) + +(defun markdown-follow-wiki-link-at-point-ikiwiki (option) + "In Ikiwiki, [[link]]'s can link to three different files: +a) files located in the top-level hierarchy of the wiki +b) files in the current working directory +c) files in a subdirectory of the name of the current page. +When calling the current function, the user is prompted as to in +which of the three locations he wishes to create/visit the file. +For the top-level option, the variable `markdown-ikiwiki-toplevel' +needs to be set. Default is (b)." + (interactive (list (read-char + (let ( (a (if markdown-ikiwiki-toplevel "(a) top-level " nil)) + (b "(b) current dir ") + (c "(c) subdir of current page ")) + (progn + (if (and a (file-exists-p + (concat (file-name-as-directory markdown-ikiwiki-toplevel) + (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link))))) + (put-text-property 0 (length a) 'face 'markdown-link-face a) + (put-text-property 0 (length a) 'face 'markdown-missing-link-face a) ) + (if (file-exists-p + (concat (file-name-as-directory (file-name-sans-extension (buffer-name))) + (markdown-convert-wiki-link-to-filename + (markdown-wiki-link-link)) )) + (put-text-property 0 (length c) 'face 'markdown-link-face c) + (put-text-property 0 (length c) 'face 'markdown-missing-link-face c) ) + (if (file-exists-p + (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link))) + (put-text-property 0 (length b) 'face 'markdown-link-face b) + (put-text-property 0 (length b) 'face 'markdown-missing-link-face b) ) + (concat a (if a "\t|\t") b "\t|\t" c )))))) + (message "option = %s" (char-to-string option)) + (message "wiki-link-link = %s" (markdown-wiki-link-link)) + (let* ((opt (char-to-string option)) + (filename (if (and markdown-ikiwiki-toplevel (string= opt "a")) + (concat (file-name-as-directory markdown-ikiwiki-toplevel) + (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link))) + (if (string= opt "c") + (concat (file-name-as-directory (file-name-sans-extension (buffer-name))) + (markdown-convert-wiki-link-to-filename + (markdown-wiki-link-link)) ) + (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link)))))) + (message "filename is %s" filename) + (markdown-follow-wiki-link-file filename))) + (defun markdown-next-wiki-link () "Jump to next wiki link. @@ -2343,25 +2409,13 @@ This is an exact copy of `line-number-at-pos' for use in emacs21." (define-derived-mode ikiwiki-mode markdown-mode "MarkdownIki" "Major mode for editing Ikiwiki Markdown files." + (message "Loading ikiwiki-mode") ;; change regex to exclude ikiwiki-directives (setq markdown-regex-wiki-link "\\[\\[\\([^!][^]|]+\\)\\(|\\([^]]+\\)\\)?\\]\\]") - (message "loading ikiwiki-mode") - - - (defun markdown-follow-wiki-link-to-file (file) - "" - (interactive (list - (read-string "File: " - (concat - (file-name-as-directory (file-name-sans-extension (buffer-name))) - (markdown-convert-wiki-link-to-filename - (markdown-wiki-link-link)))))) - (message"filename is %s" file)) - ;; change link-following function to prompt for filename (defun markdown-follow-wiki-link-at-point () "Find Wiki Link at point. Asks whether it should be @@ -2370,7 +2424,7 @@ This function replaces `markdown-follow-wiki-link-at-point' in `ikiwiki-mode'. See `markdown-wiki-link-p' and `markdown-follow-wiki-link'." (interactive) - (call-interactively 'markdown-follow-wiki-link-to-file)) + (call-interactively 'markdown-follow-wiki-link-at-point-ikiwiki)) ;; Font lock. From b0dac893db5f67c7b84e98b56a942fb946c49f7c Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Wed, 7 Dec 2011 16:47:53 +0100 Subject: [PATCH 07/22] bug squashed --- markdown-mode.el | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index 711ae2ad..8f3791b3 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -2159,7 +2159,7 @@ files in different locations." (let ( (dir (file-name-directory file)) ) (if dir (make-directory (file-name-directory file) t) ) (find-file file) - (message"filename is %s" file)) ) + (message "filename is %s" file)) ) (defun markdown-follow-wiki-link-at-point-ikiwiki (option) "In Ikiwiki, [[link]]'s can link to three different files: @@ -2191,8 +2191,6 @@ needs to be set. Default is (b)." (put-text-property 0 (length b) 'face 'markdown-link-face b) (put-text-property 0 (length b) 'face 'markdown-missing-link-face b) ) (concat a (if a "\t|\t") b "\t|\t" c )))))) - (message "option = %s" (char-to-string option)) - (message "wiki-link-link = %s" (markdown-wiki-link-link)) (let* ((opt (char-to-string option)) (filename (if (and markdown-ikiwiki-toplevel (string= opt "a")) (concat (file-name-as-directory markdown-ikiwiki-toplevel) @@ -2423,9 +2421,10 @@ created in a subdirectory of the current file or in the cwd. This function replaces `markdown-follow-wiki-link-at-point' in `ikiwiki-mode'. See `markdown-wiki-link-p' and `markdown-follow-wiki-link'." - (interactive) - (call-interactively 'markdown-follow-wiki-link-at-point-ikiwiki)) - + (interactive) + (if (markdown-wiki-link-p) + (call-interactively 'markdown-follow-wiki-link-at-point-ikiwiki) + (error "Point is not at a Wiki Link"))) ;; Font lock. (setq markdown-mode-font-lock-keywords From 9fc1ddbab90ba7fa49dd5816ed476263c107582b Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Thu, 8 Dec 2011 11:15:42 +0100 Subject: [PATCH 08/22] markdown-linked-file-exists-p replaces file-exists-p in markdown-fontiy-region-wiki-links for ikiwiki-support --- markdown-mode.el | 65 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index 8f3791b3..740578ac 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -2161,6 +2161,36 @@ files in different locations." (find-file file) (message "filename is %s" file)) ) +(defun markdown-linked-file-exists-p (file &optional LOCATION) + "Check if file exists in different possible locations. + +LOCATION can be one of 'toplevel', 'cwd' or 'subdir' +corresponding to `markdown-ikiwiki-toplevel', the current working +directory and a subdirectory of the same name as +the (extensionless) `buffer-name'. If nil, all three locations are checked. + +This behaviour is only used when in `ikiwiki-mode'. Else, it is +identical to `file-exists-p'. +" + (if (eq major-mode 'ikiwiki-mode) + (if (and (or (not LOCATION) (string= LOCATION "toplevel")) + markdown-ikiwiki-toplevel + (file-exists-p + (concat (file-name-as-directory + markdown-ikiwiki-toplevel) file))) + t + (if (and (or (not LOCATION) (string= LOCATION "cwd")) + (file-exists-p file)) t + (if (and (or (not LOCATION) (string= LOCATION "subdir")) + (file-exists-p + (concat (file-name-as-directory + (file-name-sans-extension (buffer-name))) + file ))) + t + nil))) + (file-exists-p file) )) + + (defun markdown-follow-wiki-link-at-point-ikiwiki (option) "In Ikiwiki, [[link]]'s can link to three different files: a) files located in the top-level hierarchy of the wiki @@ -2173,24 +2203,18 @@ needs to be set. Default is (b)." (interactive (list (read-char (let ( (a (if markdown-ikiwiki-toplevel "(a) top-level " nil)) (b "(b) current dir ") - (c "(c) subdir of current page ")) - (progn - (if (and a (file-exists-p - (concat (file-name-as-directory markdown-ikiwiki-toplevel) - (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link))))) - (put-text-property 0 (length a) 'face 'markdown-link-face a) - (put-text-property 0 (length a) 'face 'markdown-missing-link-face a) ) - (if (file-exists-p - (concat (file-name-as-directory (file-name-sans-extension (buffer-name))) - (markdown-convert-wiki-link-to-filename - (markdown-wiki-link-link)) )) - (put-text-property 0 (length c) 'face 'markdown-link-face c) - (put-text-property 0 (length c) 'face 'markdown-missing-link-face c) ) - (if (file-exists-p - (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link))) - (put-text-property 0 (length b) 'face 'markdown-link-face b) - (put-text-property 0 (length b) 'face 'markdown-missing-link-face b) ) - (concat a (if a "\t|\t") b "\t|\t" c )))))) + (c "(c) subdir of current page ") + (file (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link)))) + (if (and a (markdown-linked-file-exists-p file "toplevel")) + (put-text-property 0 (length a) 'face 'markdown-link-face a) + (put-text-property 0 (length a) 'face 'markdown-missing-link-face a) ) + (if (markdown-linked-file-exists-p file "cwd") + (put-text-property 0 (length b) 'face 'markdown-link-face b) + (put-text-property 0 (length b) 'face 'markdown-missing-link-face b) ) + (if (markdown-linked-file-exists-p file "subdir") + (put-text-property 0 (length c) 'face 'markdown-link-face c) + (put-text-property 0 (length c) 'face 'markdown-missing-link-face c) ) + (concat a (if a "\t|\t") b "\t|\t" c ))))) (let* ((opt (char-to-string option)) (filename (if (and markdown-ikiwiki-toplevel (string= opt "a")) (concat (file-name-as-directory markdown-ikiwiki-toplevel) @@ -2235,7 +2259,8 @@ See `markdown-wiki-link-p'." (defun markdown-fontify-region-wiki-links (from to) "Search region given by FROM and TO for wiki links and fontify them. If a wiki link is found check to see if the backing file exists -and highlight accordingly." +and highlight accordingly. Checking for the backing file is done using +`markdown-linked-file-exists-p'" (goto-char from) (while (re-search-forward markdown-regex-wiki-link to t) (let ((highlight-beginning (match-beginning 0)) @@ -2243,7 +2268,7 @@ and highlight accordingly." (file-name (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link)))) - (if (file-exists-p file-name) + (if (markdown-linked-file-exists-p file-name) (markdown-highlight-wiki-link highlight-beginning highlight-end markdown-link-face) (markdown-highlight-wiki-link From 3828cd7daae73e532b9ccd2e6b6ff2deb3ec98bc Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Thu, 8 Dec 2011 11:22:57 +0100 Subject: [PATCH 09/22] markdown-linked-file-exists-p returns now the path instead of just t --- markdown-mode.el | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index 740578ac..37d6cd22 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -2163,6 +2163,7 @@ files in different locations." (defun markdown-linked-file-exists-p (file &optional LOCATION) "Check if file exists in different possible locations. +Returns the full file name or nil. LOCATION can be one of 'toplevel', 'cwd' or 'subdir' corresponding to `markdown-ikiwiki-toplevel', the current working @@ -2175,20 +2176,21 @@ identical to `file-exists-p'. (if (eq major-mode 'ikiwiki-mode) (if (and (or (not LOCATION) (string= LOCATION "toplevel")) markdown-ikiwiki-toplevel - (file-exists-p - (concat (file-name-as-directory - markdown-ikiwiki-toplevel) file))) - t + (file-exists-p (setq fullfile + (concat (file-name-as-directory + markdown-ikiwiki-toplevel) file)))) + fullfile (if (and (or (not LOCATION) (string= LOCATION "cwd")) - (file-exists-p file)) t + (file-exists-p file)) file (if (and (or (not LOCATION) (string= LOCATION "subdir")) - (file-exists-p - (concat (file-name-as-directory - (file-name-sans-extension (buffer-name))) - file ))) - t + (file-exists-p + (setq fullfile + (concat (file-name-as-directory + (file-name-sans-extension (buffer-name))) + file )))) + fullfile nil))) - (file-exists-p file) )) + (file-exists-p file) )) (defun markdown-follow-wiki-link-at-point-ikiwiki (option) @@ -2215,7 +2217,7 @@ needs to be set. Default is (b)." (put-text-property 0 (length c) 'face 'markdown-link-face c) (put-text-property 0 (length c) 'face 'markdown-missing-link-face c) ) (concat a (if a "\t|\t") b "\t|\t" c ))))) - (let* ((opt (char-to-string option)) + (let* ((opt (char-to-string option)) (filename (if (and markdown-ikiwiki-toplevel (string= opt "a")) (concat (file-name-as-directory markdown-ikiwiki-toplevel) (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link))) From 2e11d06c01a19d0cb8e797ac12d81d4df0241388 Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Thu, 8 Dec 2011 11:44:44 +0100 Subject: [PATCH 10/22] refactored stupid redefinition of markdown-follow-wiki-link-at-point This is now handled in the original function such that switching between modes works better. --- markdown-mode.el | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index 37d6cd22..ac6f504a 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -2138,10 +2138,14 @@ Convert the name to a file name and call `find-file'." (defun markdown-follow-wiki-link-at-point () "Find Wiki Link at point. +In `ikiwiki-mode', ask for location of file, see +`markdown-follow-wiki-link-at-point-ikiwiki'. See `markdown-wiki-link-p' and `markdown-follow-wiki-link'." (interactive) (if (markdown-wiki-link-p) - (markdown-follow-wiki-link (markdown-wiki-link-link)) + (if (eq major-mode 'ikiwiki-mode) + (call-interactively 'markdown-follow-wiki-link-at-point-ikiwiki) + (markdown-follow-wiki-link (markdown-wiki-link-link))) (error "Point is not at a Wiki Link"))) (defun markdown-follow-wiki-link-file (file) @@ -2440,19 +2444,6 @@ This is an exact copy of `line-number-at-pos' for use in emacs21." (setq markdown-regex-wiki-link "\\[\\[\\([^!][^]|]+\\)\\(|\\([^]]+\\)\\)?\\]\\]") - - ;; change link-following function to prompt for filename - (defun markdown-follow-wiki-link-at-point () - "Find Wiki Link at point. Asks whether it should be -created in a subdirectory of the current file or in the cwd. -This function replaces `markdown-follow-wiki-link-at-point' -in `ikiwiki-mode'. -See `markdown-wiki-link-p' and `markdown-follow-wiki-link'." - (interactive) - (if (markdown-wiki-link-p) - (call-interactively 'markdown-follow-wiki-link-at-point-ikiwiki) - (error "Point is not at a Wiki Link"))) - ;; Font lock. (setq markdown-mode-font-lock-keywords (append markdown-mode-font-lock-keywords-ikiwiki From bbd8c150f6a0484cfdba83b2794b5368453cb605 Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Thu, 8 Dec 2011 12:04:03 +0100 Subject: [PATCH 11/22] nicer face for ikiwiki-directives --- markdown-mode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown-mode.el b/markdown-mode.el index ac6f504a..e96a3a94 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -697,7 +697,7 @@ This will not take effect until Emacs is restarted." :group 'markdown-faces) (defface markdown-ikiwiki-directive-face - '((t (:inherit markdown-header-face))) + '((t (:inherit font-lock-warning-face :weight normal))) "Face for ikiwiki-directives." :group 'markdown-faces) From c1d2ca655eee8dd921709d01ea0e890e98680aa6 Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Thu, 8 Dec 2011 12:31:48 +0100 Subject: [PATCH 12/22] do not overwrite markdown-regex-wiki-link in ikiwiki-mode; instead ask for ikiwiki-mode whenever this variable is used --- markdown-mode.el | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index e96a3a94..9a116f15 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -823,6 +823,13 @@ wiki links of the form [[PageName|link text]]. In this regular expression, #1 matches the page name and #3 matches the link text.") +(defconst markdown-regex-wiki-link-ikiwiki + "\\[\\[\\([^!][^]|]+\\)\\(|\\([^]]+\\)\\)?\\]\\]" + "Regular expression for matching wiki links. +Similar to `markdown-regex-wiki-link' except, that +links beginning with '!' are not matched (because +these are ikiwiki-directives.") + (defconst markdown-regex-ikiwiki-directive "\\[\\[![^]]+?\\]\\]" "Regular expression for matching ikiwiki directives of the form @@ -2098,7 +2105,9 @@ match the current file name after conversion. This modifies the data returned by `match-data'. Note that the potential wiki link name must be available via `match-string'." (let ((case-fold-search nil)) - (and (thing-at-point-looking-at markdown-regex-wiki-link) + (and (thing-at-point-looking-at (if (eq major-mode 'ikiwiki-mode) + markdown-regex-wiki-link-ikiwiki + markdown-regex-wiki-link)) (or (not buffer-file-name) (not (string-equal (buffer-file-name) (markdown-convert-wiki-link-to-filename @@ -2243,14 +2252,18 @@ See `markdown-wiki-link-p'." (goto-char (+ 1 (match-end 0)))) (save-match-data ; Search for the next wiki link and move to the beginning. - (re-search-forward markdown-regex-wiki-link nil t) + (re-search-forward (if (eq major-mode 'ikiwiki-mode) + markdown-regex-wiki-link-ikiwiki + markdown-regex-wiki-link) nil t) (goto-char (match-beginning 0)))) (defun markdown-previous-wiki-link () "Jump to previous wiki link. See `markdown-wiki-link-p'." (interactive) - (re-search-backward markdown-regex-wiki-link nil t)) + (re-search-backward (if (eq major-mode 'ikiwiki-mode) + markdown-regex-wiki-link-ikiwiki + markdown-regex-wiki-link) nil t)) (defun markdown-highlight-wiki-link (from to face) "Highlight the wiki link in the region between FROM and TO using FACE." @@ -2268,7 +2281,9 @@ If a wiki link is found check to see if the backing file exists and highlight accordingly. Checking for the backing file is done using `markdown-linked-file-exists-p'" (goto-char from) - (while (re-search-forward markdown-regex-wiki-link to t) + (while (re-search-forward (if (eq major-mode 'ikiwiki-mode) + markdown-regex-wiki-link-ikiwiki + markdown-regex-wiki-link) to t) (let ((highlight-beginning (match-beginning 0)) (highlight-end (match-end 0)) (file-name @@ -2435,15 +2450,10 @@ This is an exact copy of `line-number-at-pos' for use in emacs21." (markdown-fontify-buffer-wiki-links)) ;;; Ikiwiki Markdown Mode ============================================ - (define-derived-mode ikiwiki-mode markdown-mode "MarkdownIki" "Major mode for editing Ikiwiki Markdown files." (message "Loading ikiwiki-mode") - ;; change regex to exclude ikiwiki-directives - (setq markdown-regex-wiki-link - "\\[\\[\\([^!][^]|]+\\)\\(|\\([^]]+\\)\\)?\\]\\]") - ;; Font lock. (setq markdown-mode-font-lock-keywords (append markdown-mode-font-lock-keywords-ikiwiki @@ -2451,9 +2461,10 @@ This is an exact copy of `line-number-at-pos' for use in emacs21." (set (make-local-variable 'font-lock-defaults) '(markdown-mode-font-lock-keywords)) - ;; do the initial link fontification (markdown-fontify-buffer-wiki-links) + +; (add-hook 'after-change-major-mode-hook 'leave-ikiwiki-mode) ) (provide 'markdown-mode) From 148b9eecc3baffac5d8ee4e54aca2b5097e0f9b3 Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Wed, 14 Dec 2011 12:23:56 +0100 Subject: [PATCH 13/22] initial structure --- markdown-mode.el | 155 ++++++++++++++++++++++++++++------------------- 1 file changed, 91 insertions(+), 64 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index 9a116f15..2704f2ae 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -492,10 +492,6 @@ buffers which are visiting a file." :group 'markdown :type 'boolean) -(defcustom markdown-ikiwiki-toplevel nil - "Path to main ikiwiki-directory." - :group 'markdown - :type 'string) (defcustom markdown-wiki-link-alias-first t "When non-nil, treat aliased wiki links like [[alias text|PageName]]. @@ -546,6 +542,24 @@ This will not take effect until Emacs is restarted." (const :tag "Immediately after the paragraph" immediately) (const :tag "Before next header" header))) +;;; Ikiwiki customization ================================================== + +(defgroup ikiwiki nil + "Major mode for editing ikiwiki files in Markdown format." + :prefix "ikiwiki-" + :group 'wp + :link '(url-link "http://ihrke.github.com/markdown-mode/")) + +(defcustom ikiwiki-toplevel nil + "Path to main ikiwiki-directory." + :group 'ikiwiki + :type 'string) + +(defcustom ikiwiki-browse-extensions (".mdwn") + "Extension used for ikiwiki files when browsing the wiki." + :group 'ikiwiki + :type 'list) + ;;; Font lock ================================================================= (require 'font-lock) @@ -2094,6 +2108,19 @@ with the extension removed and replaced with .html." (interactive) (browse-url (markdown-export))) + +(defun ikiwiki-browse-wiki (path) + "Browse the structure of `ikiwiki-toplevel' directory. All +files having an extension in `ikiwiki-browse-extensions' are +displayed in the buffer." + (interactive (list ikiwiki-toplevel)) + ) + + +;; examples +;(directory-files "." t (concat ".+\\(" (mapconcat 'identity '("mdwn" "text" "markdown") "\\|") "\\)$")) +;(directory-files "." t ".+\\(mdwn\\|text\\|markdown\\)$") + ;;; WikiLink Following/Markup ================================================= (require 'thingatpt) @@ -2106,14 +2133,14 @@ returned by `match-data'. Note that the potential wiki link name must be available via `match-string'." (let ((case-fold-search nil)) (and (thing-at-point-looking-at (if (eq major-mode 'ikiwiki-mode) - markdown-regex-wiki-link-ikiwiki - markdown-regex-wiki-link)) - (or (not buffer-file-name) - (not (string-equal (buffer-file-name) - (markdown-convert-wiki-link-to-filename - (markdown-wiki-link-link))))) - (not (save-match-data - (save-excursion)))))) + markdown-regex-wiki-link-ikiwiki + markdown-regex-wiki-link)) + (or (not buffer-file-name) + (not (string-equal (buffer-file-name) + (markdown-convert-wiki-link-to-filename + (markdown-wiki-link-link))))) + (not (save-match-data + (save-excursion)))))) (defun markdown-wiki-link-link () "Return the link part of the wiki link using current match data. @@ -2163,23 +2190,23 @@ possibly creating directories. Used in conjunction with `markdown-follow-wiki-link-at-point-ikiwiki' to allow opening files in different locations." (interactive (list - (read-string - "File: " - (concat - (file-name-as-directory (file-name-sans-extension (buffer-name))) - (markdown-convert-wiki-link-to-filename - (markdown-wiki-link-link)))))) + (read-string + "File: " + (concat + (file-name-as-directory (file-name-sans-extension (buffer-name))) + (markdown-convert-wiki-link-to-filename + (markdown-wiki-link-link)))))) (let ( (dir (file-name-directory file)) ) - (if dir (make-directory (file-name-directory file) t) ) - (find-file file) - (message "filename is %s" file)) ) + (if dir (make-directory (file-name-directory file) t) ) + (find-file file) + (message "filename is %s" file)) ) (defun markdown-linked-file-exists-p (file &optional LOCATION) "Check if file exists in different possible locations. Returns the full file name or nil. LOCATION can be one of 'toplevel', 'cwd' or 'subdir' -corresponding to `markdown-ikiwiki-toplevel', the current working +corresponding to `ikiwiki-toplevel', the current working directory and a subdirectory of the same name as the (extensionless) `buffer-name'. If nil, all three locations are checked. @@ -2187,23 +2214,23 @@ This behaviour is only used when in `ikiwiki-mode'. Else, it is identical to `file-exists-p'. " (if (eq major-mode 'ikiwiki-mode) - (if (and (or (not LOCATION) (string= LOCATION "toplevel")) - markdown-ikiwiki-toplevel - (file-exists-p (setq fullfile - (concat (file-name-as-directory - markdown-ikiwiki-toplevel) file)))) - fullfile - (if (and (or (not LOCATION) (string= LOCATION "cwd")) - (file-exists-p file)) file - (if (and (or (not LOCATION) (string= LOCATION "subdir")) - (file-exists-p - (setq fullfile - (concat (file-name-as-directory - (file-name-sans-extension (buffer-name))) - file )))) - fullfile - nil))) - (file-exists-p file) )) + (if (and (or (not LOCATION) (string= LOCATION "toplevel")) + ikiwiki-toplevel + (file-exists-p (setq fullfile + (concat (file-name-as-directory + ikiwiki-toplevel) file)))) + fullfile + (if (and (or (not LOCATION) (string= LOCATION "cwd")) + (file-exists-p file)) file + (if (and (or (not LOCATION) (string= LOCATION "subdir")) + (file-exists-p + (setq fullfile + (concat (file-name-as-directory + (file-name-sans-extension (buffer-name))) + file )))) + fullfile + nil))) + (file-exists-p file) )) (defun markdown-follow-wiki-link-at-point-ikiwiki (option) @@ -2213,34 +2240,34 @@ b) files in the current working directory c) files in a subdirectory of the name of the current page. When calling the current function, the user is prompted as to in which of the three locations he wishes to create/visit the file. -For the top-level option, the variable `markdown-ikiwiki-toplevel' +For the top-level option, the variable `ikiwiki-toplevel' needs to be set. Default is (b)." (interactive (list (read-char - (let ( (a (if markdown-ikiwiki-toplevel "(a) top-level " nil)) - (b "(b) current dir ") - (c "(c) subdir of current page ") - (file (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link)))) - (if (and a (markdown-linked-file-exists-p file "toplevel")) - (put-text-property 0 (length a) 'face 'markdown-link-face a) - (put-text-property 0 (length a) 'face 'markdown-missing-link-face a) ) - (if (markdown-linked-file-exists-p file "cwd") - (put-text-property 0 (length b) 'face 'markdown-link-face b) - (put-text-property 0 (length b) 'face 'markdown-missing-link-face b) ) - (if (markdown-linked-file-exists-p file "subdir") - (put-text-property 0 (length c) 'face 'markdown-link-face c) - (put-text-property 0 (length c) 'face 'markdown-missing-link-face c) ) - (concat a (if a "\t|\t") b "\t|\t" c ))))) + (let ( (a (if ikiwiki-toplevel "(a) top-level " nil)) + (b "(b) current dir ") + (c "(c) subdir of current page ") + (file (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link)))) + (if (and a (markdown-linked-file-exists-p file "toplevel")) + (put-text-property 0 (length a) 'face 'markdown-link-face a) + (put-text-property 0 (length a) 'face 'markdown-missing-link-face a) ) + (if (markdown-linked-file-exists-p file "cwd") + (put-text-property 0 (length b) 'face 'markdown-link-face b) + (put-text-property 0 (length b) 'face 'markdown-missing-link-face b) ) + (if (markdown-linked-file-exists-p file "subdir") + (put-text-property 0 (length c) 'face 'markdown-link-face c) + (put-text-property 0 (length c) 'face 'markdown-missing-link-face c) ) + (concat a (if a "\t|\t") b "\t|\t" c ))))) (let* ((opt (char-to-string option)) - (filename (if (and markdown-ikiwiki-toplevel (string= opt "a")) - (concat (file-name-as-directory markdown-ikiwiki-toplevel) - (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link))) - (if (string= opt "c") - (concat (file-name-as-directory (file-name-sans-extension (buffer-name))) - (markdown-convert-wiki-link-to-filename - (markdown-wiki-link-link)) ) - (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link)))))) - (message "filename is %s" filename) - (markdown-follow-wiki-link-file filename))) + (filename (if (and ikiwiki-toplevel (string= opt "a")) + (concat (file-name-as-directory ikiwiki-toplevel) + (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link))) + (if (string= opt "c") + (concat (file-name-as-directory (file-name-sans-extension (buffer-name))) + (markdown-convert-wiki-link-to-filename + (markdown-wiki-link-link)) ) + (markdown-convert-wiki-link-to-filename (markdown-wiki-link-link)))))) + (message "filename is %s" filename) + (markdown-follow-wiki-link-file filename))) (defun markdown-next-wiki-link () From f902e3622e912def1b24bd7298d59ec5e735a10d Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Wed, 14 Dec 2011 12:37:22 +0100 Subject: [PATCH 14/22] some more structure --- markdown-mode.el | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index 2704f2ae..cec0a48c 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -555,7 +555,7 @@ This will not take effect until Emacs is restarted." :group 'ikiwiki :type 'string) -(defcustom ikiwiki-browse-extensions (".mdwn") +(defcustom ikiwiki-browse-extensions '(".mdwn") "Extension used for ikiwiki files when browsing the wiki." :group 'ikiwiki :type 'list) @@ -2114,7 +2114,15 @@ with the extension removed and replaced with .html." files having an extension in `ikiwiki-browse-extensions' are displayed in the buffer." (interactive (list ikiwiki-toplevel)) - ) + (let ( (browserbuf (get-buffer-create "*IkiwikiBrowser*")) + (files (directory-files ikiwiki-toplevel nil ".*")) + ) + (save-excursion + (set-buffer browserbuf) + (insert (mapconcat 'identity files "\n")) + (setq buffer-read-only t) + ) + (switch-to-buffer browserbuf))) ;; examples From f35950c1d70cf06bc79de99eda3c7f786be78b26 Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Sun, 18 Dec 2011 20:47:43 +0100 Subject: [PATCH 15/22] ikiwiki-preview: render an ikiwiki file with ikiwiki instead of markdown --- markdown-mode.el | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/markdown-mode.el b/markdown-mode.el index cec0a48c..1f9285b1 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -555,6 +555,16 @@ This will not take effect until Emacs is restarted." :group 'ikiwiki :type 'string) +(defcustom ikiwiki-executable "ikiwiki" + "Path to ikiwiki-executable." + :group 'ikiwiki + :type 'string) + +(defcustom ikiwiki-setup-file nil + "Path to setup file for your ikiwiki (required for previewing)." + :group 'ikiwiki + :type 'string) + (defcustom ikiwiki-browse-extensions '(".mdwn") "Extension used for ikiwiki files when browsing the wiki." :group 'ikiwiki @@ -1742,6 +1752,11 @@ it in the usual way." ["Version" markdown-show-version] )) +(easy-menu-define ikiwiki-mode-menu markdown-mode-map + "Menu for Ikiwiki mode" + '("Ikiwiki" + ["Render" ikiwiki-preview])) + ;;; References ================================================================ @@ -2108,6 +2123,19 @@ with the extension removed and replaced with .html." (interactive) (browse-url (markdown-export))) +(defun ikiwiki-preview () + "Render the current buffer with ikiwiki in a special buffer and browse with webbrowser." + (interactive) + + (let ((output-buffer-name "*IkiwikiRendered*")) + (if ikiwiki-setup-file + (progn + (shell-command (concat ikiwiki-executable " --setup " + ikiwiki-setup-file " --render " + (shell-quote-argument buffer-file-name)) + output-buffer-name) + (browse-url-of-buffer output-buffer-name)) + (message "Error: need ikiwiki-setup-file")))) (defun ikiwiki-browse-wiki (path) "Browse the structure of `ikiwiki-toplevel' directory. All @@ -2489,6 +2517,8 @@ This is an exact copy of `line-number-at-pos' for use in emacs21." "Major mode for editing Ikiwiki Markdown files." (message "Loading ikiwiki-mode") + (easy-menu-add ikiwiki-mode-menu markdown-mode-map) + ;; Font lock. (setq markdown-mode-font-lock-keywords (append markdown-mode-font-lock-keywords-ikiwiki From a2fd4d6a86f55000a44be421019ff268d8c7b2ef Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Fri, 10 Feb 2012 22:31:32 +0100 Subject: [PATCH 16/22] working on ikiwiki-browser --- markdown-mode.el | 46 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index 1f9285b1..e5c772bf 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -565,7 +565,7 @@ This will not take effect until Emacs is restarted." :group 'ikiwiki :type 'string) -(defcustom ikiwiki-browse-extensions '(".mdwn") +(defcustom ikiwiki-browse-extensions '("mdwn" "markdown") "Extension used for ikiwiki files when browsing the wiki." :group 'ikiwiki :type 'list) @@ -2124,7 +2124,7 @@ with the extension removed and replaced with .html." (browse-url (markdown-export))) (defun ikiwiki-preview () - "Render the current buffer with ikiwiki in a special buffer and browse with webbrowser." + "Render the current buffer with ikiwiki in a special buffer and browse with web browser." (interactive) (let ((output-buffer-name "*IkiwikiRendered*")) @@ -2137,18 +2137,48 @@ with the extension removed and replaced with .html." (browse-url-of-buffer output-buffer-name)) (message "Error: need ikiwiki-setup-file")))) -(defun ikiwiki-browse-wiki (path) +(defun kill-current-buffer() + "Kills the current buffer." + (interactive) + (kill-buffer nil)) + +(defun ikiwiki-browse-wiki-at-point () + "" + (interactive) + (let ((where (thing-at-point 'line))) + (message "Where: %s" where) + (kill-buffer "*IkiwikiBrowser*") + ;(delete-region 0 (buffer-size)) + (ikiwiki-browse-wiki (concat (file-name-as-directory ikiwiki-toplevel) where)) + ) +) + +(defun ikiwiki-browse-wiki (&optional browsepath) "Browse the structure of `ikiwiki-toplevel' directory. All files having an extension in `ikiwiki-browse-extensions' are displayed in the buffer." - (interactive (list ikiwiki-toplevel)) - (let ( (browserbuf (get-buffer-create "*IkiwikiBrowser*")) - (files (directory-files ikiwiki-toplevel nil ".*")) - ) + (interactive) + (let* ( (path (if browsepath browsepath ikiwiki-toplevel)) + (browserbuf (get-buffer-create "*IkiwikiBrowser*")) + (fileregexp (concat ".+\\.\\(" (mapconcat 'identity ikiwiki-browse-extensions "\\|") "\\\)$")) + (files (directory-files path nil fileregexp t)) + ) + (message "Browsing at path: %s" path) (save-excursion (set-buffer browserbuf) - (insert (mapconcat 'identity files "\n")) + (insert (concat fileregexp "\n")) + (dolist (curf files) + (let ( (start (point)) + (f (file-name-sans-extension curf))) + (insert (concat f "\n")) + (if (file-exists-p (concat (file-name-as-directory path) f)) + (put-text-property start (point) 'face 'markdown-bold-face) + (put-text-property start (point) 'face 'markdown-link-face) + ) + )) (setq buffer-read-only t) + (local-set-key "q" 'kill-current-buffer) + (local-set-key "\C-m" 'ikiwiki-browse-wiki-at-point) ) (switch-to-buffer browserbuf))) From 399c4b4e16da1fe9690e692549828a54dab71ba5 Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Tue, 21 Feb 2012 19:49:33 +0100 Subject: [PATCH 17/22] new browser for ikiwiki --- markdown-mode.el | 56 +++++++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index e5c772bf..a515145e 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -1755,9 +1755,9 @@ it in the usual way." (easy-menu-define ikiwiki-mode-menu markdown-mode-map "Menu for Ikiwiki mode" '("Ikiwiki" - ["Render" ikiwiki-preview])) - - + ["Render" ikiwiki-preview] + ["Browse Ikiwiki" ikiwiki-browse-wiki]) + ) ;;; References ================================================================ @@ -2142,15 +2142,26 @@ with the extension removed and replaced with .html." (interactive) (kill-buffer nil)) -(defun ikiwiki-browse-wiki-at-point () - "" - (interactive) - (let ((where (thing-at-point 'line))) - (message "Where: %s" where) - (kill-buffer "*IkiwikiBrowser*") - ;(delete-region 0 (buffer-size)) - (ikiwiki-browse-wiki (concat (file-name-as-directory ikiwiki-toplevel) where)) - ) + +(defun ikiwiki-browser-walk-tree-insert-pages ( path indent ) + "Assuming you are in the browser-buffer." + (message "called with path: %s and indent= %i" path indent) + (let* ( (fileregexp + (concat ".+\\.\\(" (mapconcat 'identity ikiwiki-browse-extensions "\\|") "\\\)$")) + (files (directory-files path nil fileregexp))) + (dolist (curf files) + (let* ( (start (point)) + (f (file-name-sans-extension curf)) + (fpath (concat (file-name-as-directory path) f)) + ) + (insert (make-string indent 32)) ; space + (insert (concat f "\n")) + (if (file-exists-p fpath) + (list + (put-text-property start (point) 'face 'markdown-bold-face) + (ikiwiki-browser-walk-tree-insert-pages fpath (+ indent 3)) ) + (put-text-property start (point) 'face 'markdown-link-face) ) + ))) ) (defun ikiwiki-browse-wiki (&optional browsepath) @@ -2160,33 +2171,16 @@ displayed in the buffer." (interactive) (let* ( (path (if browsepath browsepath ikiwiki-toplevel)) (browserbuf (get-buffer-create "*IkiwikiBrowser*")) - (fileregexp (concat ".+\\.\\(" (mapconcat 'identity ikiwiki-browse-extensions "\\|") "\\\)$")) - (files (directory-files path nil fileregexp t)) ) - (message "Browsing at path: %s" path) (save-excursion (set-buffer browserbuf) - (insert (concat fileregexp "\n")) - (dolist (curf files) - (let ( (start (point)) - (f (file-name-sans-extension curf))) - (insert (concat f "\n")) - (if (file-exists-p (concat (file-name-as-directory path) f)) - (put-text-property start (point) 'face 'markdown-bold-face) - (put-text-property start (point) 'face 'markdown-link-face) - ) - )) + (ikiwiki-browser-walk-tree-insert-pages path 0) (setq buffer-read-only t) (local-set-key "q" 'kill-current-buffer) - (local-set-key "\C-m" 'ikiwiki-browse-wiki-at-point) + ;(local-set-key "\C-m" 'ikiwiki-browse-wiki-at-point) ) (switch-to-buffer browserbuf))) - -;; examples -;(directory-files "." t (concat ".+\\(" (mapconcat 'identity '("mdwn" "text" "markdown") "\\|") "\\)$")) -;(directory-files "." t ".+\\(mdwn\\|text\\|markdown\\)$") - ;;; WikiLink Following/Markup ================================================= (require 'thingatpt) From 05d7a8fa9e473599e573b5ee72362ef4dbe2d579 Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Tue, 21 Feb 2012 20:09:26 +0100 Subject: [PATCH 18/22] untracked files on ikiwiki-browser: 399c4b4 new browser for ikiwiki --- .ditz-config | 6 + TAGS | 192 +++++++++++++++++ ikiwiki-mode.el | 168 +++++++++++++++ nocheiner.markdown | 0 stats/activity.html | 48 +++++ stats/arrow-down.gif | Bin 0 -> 73 bytes stats/arrow-none.gif | Bin 0 -> 71 bytes stats/arrow-up.gif | Bin 0 -> 73 bytes stats/authors.html | 40 ++++ stats/commits_by_author.dat | 208 ++++++++++++++++++ stats/commits_by_author.plot | 14 ++ stats/commits_by_author.png | Bin 0 -> 8648 bytes stats/commits_by_year.dat | 5 + stats/commits_by_year.plot | 10 + stats/commits_by_year.png | Bin 0 -> 2662 bytes stats/commits_by_year_month.dat | 28 +++ stats/commits_by_year_month.plot | 13 ++ stats/commits_by_year_month.png | Bin 0 -> 2940 bytes stats/day_of_week.dat | 7 + stats/day_of_week.plot | 10 + stats/day_of_week.png | Bin 0 -> 3186 bytes stats/domains.dat | 9 + stats/domains.plot | 10 + stats/domains.png | Bin 0 -> 5771 bytes stats/files.html | 30 +++ stats/files_by_date.dat | 63 ++++++ stats/files_by_date.plot | 14 ++ stats/files_by_date.png | Bin 0 -> 2730 bytes stats/gitstats.cache | Bin 0 -> 6363 bytes stats/gitstats.css | 145 +++++++++++++ stats/hour_of_day.dat | 24 +++ stats/hour_of_day.plot | 10 + stats/hour_of_day.png | Bin 0 -> 2959 bytes stats/index.html | 23 ++ stats/lines.html | 27 +++ stats/lines_of_code.dat | 218 +++++++++++++++++++ stats/lines_of_code.plot | 13 ++ stats/lines_of_code.png | Bin 0 -> 3103 bytes stats/lines_of_code_by_author.dat | 208 ++++++++++++++++++ stats/lines_of_code_by_author.plot | 14 ++ stats/lines_of_code_by_author.png | Bin 0 -> 8884 bytes stats/month_of_year.dat | 12 ++ stats/month_of_year.plot | 10 + stats/month_of_year.png | Bin 0 -> 3000 bytes stats/sortable.js | 324 +++++++++++++++++++++++++++++ stats/tags.html | 22 ++ test.el | 4 + test.el~ | 1 + test.mdwn | 24 +++ test.mdwn~ | 17 ++ 50 files changed, 1971 insertions(+) create mode 100644 .ditz-config create mode 100644 TAGS create mode 100644 ikiwiki-mode.el create mode 100644 nocheiner.markdown create mode 100644 stats/activity.html create mode 100644 stats/arrow-down.gif create mode 100644 stats/arrow-none.gif create mode 100644 stats/arrow-up.gif create mode 100644 stats/authors.html create mode 100644 stats/commits_by_author.dat create mode 100644 stats/commits_by_author.plot create mode 100644 stats/commits_by_author.png create mode 100644 stats/commits_by_year.dat create mode 100644 stats/commits_by_year.plot create mode 100644 stats/commits_by_year.png create mode 100644 stats/commits_by_year_month.dat create mode 100644 stats/commits_by_year_month.plot create mode 100644 stats/commits_by_year_month.png create mode 100644 stats/day_of_week.dat create mode 100644 stats/day_of_week.plot create mode 100644 stats/day_of_week.png create mode 100644 stats/domains.dat create mode 100644 stats/domains.plot create mode 100644 stats/domains.png create mode 100644 stats/files.html create mode 100644 stats/files_by_date.dat create mode 100644 stats/files_by_date.plot create mode 100644 stats/files_by_date.png create mode 100644 stats/gitstats.cache create mode 100644 stats/gitstats.css create mode 100644 stats/hour_of_day.dat create mode 100644 stats/hour_of_day.plot create mode 100644 stats/hour_of_day.png create mode 100644 stats/index.html create mode 100644 stats/lines.html create mode 100644 stats/lines_of_code.dat create mode 100644 stats/lines_of_code.plot create mode 100644 stats/lines_of_code.png create mode 100644 stats/lines_of_code_by_author.dat create mode 100644 stats/lines_of_code_by_author.plot create mode 100644 stats/lines_of_code_by_author.png create mode 100644 stats/month_of_year.dat create mode 100644 stats/month_of_year.plot create mode 100644 stats/month_of_year.png create mode 100644 stats/sortable.js create mode 100644 stats/tags.html create mode 100644 test.el create mode 100644 test.el~ create mode 100644 test.mdwn create mode 100644 test.mdwn~ diff --git a/.ditz-config b/.ditz-config new file mode 100644 index 00000000..92fb091e --- /dev/null +++ b/.ditz-config @@ -0,0 +1,6 @@ +--- !ditz.rubyforge.org,2008-03-06/config +name: Matthias Ihrke +email: ihrke@cotopaxi +issue_dir: .ditz +use_editor_if_possible: false +paginate: never diff --git a/TAGS b/TAGS new file mode 100644 index 00000000..5a71ecaa --- /dev/null +++ b/TAGS @@ -0,0 +1,192 @@ + +markdown-mode.el,8496 +(defconst markdown-mode-version 435,20062 +(defconst markdown-output-buffer-name 438,20138 +(defvar markdown-mode-hook 443,20337 +(defgroup markdown 446,20412 +(defcustom markdown-command 452,20596 +(defcustom markdown-command-needs-filename 457,20701 +(defcustom markdown-hr-string 465,21025 +(defcustom markdown-bold-underscore 470,21143 +(defcustom markdown-italic-underscore 475,21280 +(defcustom markdown-indent-function 480,21413 +(defcustom markdown-indent-on-enter 485,21541 +(defcustom markdown-follow-wiki-link-on-enter 490,21679 +(defcustom markdown-wiki-link-alias-first 495,21835 +(defcustom markdown-uri-types501,22050 +(defcustom markdown-enable-math 509,22384 +(defcustom markdown-css-path 515,22564 +(defcustom markdown-xhtml-header-content 520,22685 +(defcustom markdown-xhtml-standalone-regexp525,22827 +(defcustom markdown-link-space-sub-char531,23026 +(defcustom markdown-footnote-location 537,23186 +(defvar markdown-italic-face 548,23586 +(defvar markdown-bold-face 551,23677 +(defvar markdown-header-face 554,23762 +(defvar markdown-header-face-1 557,23859 +(defvar markdown-header-face-2 560,23958 +(defvar markdown-header-face-3 563,24057 +(defvar markdown-header-face-4 566,24156 +(defvar markdown-header-face-5 569,24255 +(defvar markdown-header-face-6 572,24354 +(defvar markdown-inline-code-face 575,24453 +(defvar markdown-list-face 578,24554 +(defvar markdown-blockquote-face 581,24642 +(defvar markdown-pre-face 584,24740 +(defvar markdown-link-face 587,24831 +(defvar markdown-missing-link-face 590,24912 +(defvar markdown-ikiwiki-directive-face 593,25046 +(defvar markdown-reference-face 596,25166 +(defvar markdown-footnote-face 599,25261 +(defvar markdown-url-face 602,25365 +(defvar markdown-link-title-face 605,25443 +(defvar markdown-comment-face 608,25552 +(defvar markdown-math-face 611,25647 +(defgroup markdown-faces 614,25740 +(defface markdown-italic-face619,25838 +(defface markdown-bold-face624,25984 +(defface markdown-header-face629,26125 +(defface markdown-header-face-1634,26271 +(defface markdown-header-face-2639,26401 +(defface markdown-header-face-3644,26531 +(defface markdown-header-face-4649,26661 +(defface markdown-header-face-5654,26791 +(defface markdown-header-face-6659,26921 +(defface markdown-inline-code-face664,27051 +(defface markdown-list-face669,27183 +(defface markdown-blockquote-face674,27313 +(defface markdown-pre-face679,27447 +(defface markdown-link-face684,27577 +(defface markdown-missing-link-face689,27695 +(defface markdown-ikiwiki-directive-face694,27829 +(defface markdown-reference-face699,27971 +(defface markdown-footnote-face704,28101 +(defface markdown-url-face709,28234 +(defface markdown-link-title-face714,28349 +(defface markdown-comment-face719,28489 +(defface markdown-math-face724,28618 +(defconst markdown-regex-link-inline729,28747 +(defconst markdown-regex-link-reference733,28900 +(defconst markdown-regex-reference-definition737,29045 +(defconst markdown-regex-footnote741,29224 +(defconst markdown-regex-header745,29335 +(defconst markdown-regex-header-1-atx749,29460 +(defconst markdown-regex-header-2-atx753,29603 +(defconst markdown-regex-header-3-atx757,29747 +(defconst markdown-regex-header-4-atx761,29892 +(defconst markdown-regex-header-5-atx765,30038 +(defconst markdown-regex-header-6-atx769,30185 +(defconst markdown-regex-header-1-setext773,30333 +(defconst markdown-regex-header-2-setext777,30472 +(defconst markdown-regex-hr781,30611 +(defconst markdown-regex-code785,30766 +(defconst markdown-regex-pre789,30946 +(defconst markdown-regex-list793,31065 +(defconst markdown-regex-bold797,31187 +(defconst markdown-regex-italic801,31337 +(defconst markdown-regex-blockquote805,31506 +(defconst markdown-regex-line-break809,31608 +(defconst markdown-regex-wiki-link813,31703 +(defconst markdown-regex-ikiwiki-directive821,32033 +(defconst markdown-regex-uri826,32197 +(defconst markdown-regex-angle-uri832,32372 +(defconst markdown-regex-email839,32587 +(defconst markdown-regex-latex-expression843,32738 +(defconst markdown-regex-latex-display847,32939 +(defconst markdown-regex-list-indent851,33082 +(defvar markdown-mode-font-lock-keywords-basic855,33239 +(defconst markdown-mode-font-lock-keywords-latex891,34965 +(defconst markdown-mode-font-lock-keywords-ikiwiki903,35447 +(defvar markdown-mode-font-lock-keywords910,35675 +(defvar markdown-footnote-counter 918,35915 +(defconst markdown-footnote-chars922,36043 +(defun markdown-replace-regexp-in-string 931,36315 +(defun markdown-cur-line-blank-p 941,36646 +(defun markdown-prev-line-blank-p 947,36839 +(defun markdown-next-line-blank-p 956,37141 +(defun markdown-prev-line-indent-p 965,37433 +(defun markdown-cur-line-indent 972,37666 +(defun markdown-prev-line-indent 979,37900 +(defun markdown-next-line-indent 985,38087 +(defun markdown-cur-non-list-indent 991,38269 +(defun markdown-prev-non-list-indent 998,38527 +(defun markdown--next-block 1004,38716 +(defun markdown--end-of-level 1012,38970 +(defun markdown-match-comments 1028,39524 +(defun markdown-match-pre-blocks 1039,39890 +(defun markdown-match-fenced-code-blocks 1113,42590 +(defun markdown-font-lock-extend-region 1126,43062 +(defvar markdown-mode-syntax-table1146,43859 +(defun markdown-wrap-or-insert 1156,44169 +(defun markdown-insert-hr 1168,44553 +(defun markdown-insert-bold 1182,44959 +(defun markdown-insert-italic 1191,45257 +(defun markdown-insert-code 1200,45560 +(defun markdown-insert-link 1208,45794 +(defun markdown-insert-reference-link-dwim 1217,46041 +(defun markdown-insert-reference-link-region 1229,46624 +(defun markdown-insert-reference-link 1236,47021 +(defun markdown-insert-wiki-link 1259,47743 +(defun markdown-insert-image 1267,47986 +(defun markdown-insert-header-1 1276,48253 +(defun markdown-insert-header-2 1283,48474 +(defun markdown-insert-header-3 1290,48696 +(defun markdown-insert-header-4 1297,48917 +(defun markdown-insert-header-5 1304,49139 +(defun markdown-insert-header-6 1311,49360 +(defun markdown-insert-header 1318,49581 +(defun markdown-insert-title 1334,50254 +(defun markdown-insert-section 1352,50831 +(defun markdown-insert-blockquote 1370,51413 +(defun markdown-block-region 1379,51775 +(defun markdown-blockquote-region 1412,52969 +(defun markdown-insert-pre 1418,53169 +(defun markdown-pre-region 1427,53519 +(defun markdown-footnote-counter-inc 1435,53817 +(defun markdown-footnote-new 1447,54338 +(defun markdown-footnote-text-find-new-location 1456,54641 +(defun markdown-footnote-goto-text 1481,55624 +(defun markdown-footnote-return 1503,56485 +(defun markdown-indent-find-next-position 1526,57340 +(defun markdown-indent-line 1533,57610 +(defun markdown-calc-indents 1550,58367 +(defun markdown-do-normal-return 1597,59956 +(defun markdown-enter-key 1603,60133 +(defvar markdown-mode-map1618,60589 +(defconst markdown-refcheck-buffer1725,65053 +(defun markdown-has-reference-definition 1731,65282 +(defun markdown-get-undefined-refs 1743,65766 +(defun markdown-add-missing-ref-definition 1770,67011 +(defun markdown-check-refs 1811,68674 +(defvar markdown-cycle-global-status 1870,71065 +(defvar markdown-cycle-subtree-status 1871,71105 +(defun markdown-end-of-subtree 1874,71192 +(defun markdown-cycle 1895,71926 +(defun markdown-shifttab 1969,74636 +(defun markdown-outline-level 1975,74774 +(defun markdown 1984,75052 +(defun markdown-output-standalone-p 2021,76533 +(defun markdown-add-xhtml-header-and-footer 2030,76903 +(defun markdown-preview 2052,77778 +(defun markdown-export-file-name 2058,77995 +(defun markdown-export 2065,78309 +(defun markdown-export-and-view 2080,78900 +(defun markdown-wiki-link-p 2089,79164 +(defun markdown-wiki-link-link 2104,79809 +(defun markdown-convert-wiki-link-to-filename 2112,80110 +(defun markdown-follow-wiki-link 2127,80839 +(defun markdown-follow-wiki-link-at-point 2135,81115 +(defun markdown-next-wiki-link 2144,81400 +(defun markdown-previous-wiki-link 2156,81796 +(defun markdown-highlight-wiki-link 2162,81966 +(defun markdown-unfontify-region-wiki-links 2166,82144 +(defun markdown-fontify-region-wiki-links 2172,82454 +(defun markdown-extend-changed-region 2189,83158 +(defun markdown-check-change-for-wiki-link 2207,83773 +(defun markdown-fontify-buffer-wiki-links 2238,85053 +(defun markdown-line-number-at-pos 2245,85307 +(defun markdown-nobreak-p 2257,85735 +(defun markdown-show-version 2266,86009 +(define-derived-mode markdown-mode 2272,86183 +(define-derived-mode gfm-mode 2332,88524 +(define-derived-mode ikiwiki-mode 2345,89003 diff --git a/ikiwiki-mode.el b/ikiwiki-mode.el new file mode 100644 index 00000000..e82b49d4 --- /dev/null +++ b/ikiwiki-mode.el @@ -0,0 +1,168 @@ +;;; ikiwiki-mode.el --- Emacs mode for Ikiwiki + +;; Copyright (C) 2012 Matthias Ihrke + +;; Author: Matthias Ihrke +;; Maintainer: Matthias Ihrke +;; Created: +;; Version: 0.1 +;; Keywords: Markdown, ikiwiki +;; URL: + +;; 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, 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, write to the Free Software +;; Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +(require 'markdown-mode) + +;;; Constants ================================================================= + +(defconst ikiwiki-mode-version "0.1" + "Ikiwiki mode version number.") + +;;; Customizable variables ==================================================== + +(defgroup ikiwiki nil + "Major mode for editing ikiwiki files in Markdown format." + :prefix "ikiwiki-" + :group 'wp + :link '(url-link "http://ihrke.github.com/markdown-mode/")) + +(defcustom ikiwiki-toplevel nil + "Path to main ikiwiki-directory." + :group 'ikiwiki + :type 'string) + +(defcustom ikiwiki-executable "ikiwiki" + "Path to ikiwiki-executable." + :group 'ikiwiki + :type 'string) + +(defcustom ikiwiki-setup-file nil + "Path to setup file for your ikiwiki (required for previewing)." + :group 'ikiwiki + :type 'string) + +(defcustom ikiwiki-browse-extensions '("mdwn" "markdown") + "Extension used for ikiwiki files when browsing the wiki." + :group 'ikiwiki + :type 'list) + +;;; Font lock ================================================================= + +(defvar markdown-ikiwiki-directive-face 'markdown-ikiwiki-directive-face + "Face name to use for ikiwiki-directives.") + +(defface markdown-ikiwiki-directive-face + '((t (:inherit font-lock-warning-face :weight normal))) + "Face for ikiwiki-directives." + :group 'markdown-faces) + +(defconst markdown-regex-wiki-link-ikiwiki + "\\[\\[\\([^!][^]|]+\\)\\(|\\([^]]+\\)\\)?\\]\\]" + "Regular expression for matching wiki links. +Similar to `markdown-regex-wiki-link' except, that +links beginning with '!' are not matched (because +these are ikiwiki-directives.") + +(defconst markdown-regex-ikiwiki-directive + "\\[\\[![^]]+?\\]\\]" + "Regular expression for matching ikiwiki directives of the form +[[!command param1='test']].") + +(defconst markdown-mode-font-lock-keywords-ikiwiki + (list + ;; directive [[!command ]] + (cons markdown-regex-ikiwiki-directive + 'markdown-ikiwiki-directive-face)) + "Syntax highlighting for Ikiwiki-specific statements.") + +;;; Menu ================================================================== + +(easy-menu-define ikiwiki-mode-menu markdown-mode-map + "Menu for Ikiwiki mode" + '("Ikiwiki" + ["Render" ikiwiki-preview])) + +;;; Commands ================================================================== + +(defun ikiwiki-preview () + "Render the current buffer with ikiwiki in a special buffer and browse with web browser." + (interactive) + + (let ((output-buffer-name "*IkiwikiRendered*")) + (if ikiwiki-setup-file + (progn + (shell-command (concat ikiwiki-executable " --setup " + ikiwiki-setup-file " --render " + (shell-quote-argument buffer-file-name)) + output-buffer-name) + (browse-url-of-buffer output-buffer-name)) + (message "Error: need ikiwiki-setup-file")))) + +(defun kill-current-buffer() + "Kills the current buffer." + (interactive) + (kill-buffer nil)) + +;;; Wiki-Browser ================================================================== + +(defun ikiwiki-browse-wiki-at-point () + "" + (interactive) + (let ((where (thing-at-point 'line))) + (message "Where: %s" where) + (kill-buffer "*IkiwikiBrowser*") + ;(delete-region 0 (buffer-size)) + (ikiwiki-browse-wiki (concat (file-name-as-directory ikiwiki-toplevel) where)) + ) +) + +(defun ikiwiki-browse-wiki (&optional browsepath) + "Browse the structure of `ikiwiki-toplevel' directory. All +files having an extension in `ikiwiki-browse-extensions' are +displayed in the buffer." + (interactive) + (let* ( (path (if browsepath browsepath ikiwiki-toplevel)) + (browserbuf (get-buffer-create "*IkiwikiBrowser*")) + (fileregexp (concat ".+\\.\\(" (mapconcat 'identity ikiwiki-browse-extensions "\\|") "\\\)$")) + (files (directory-files path nil fileregexp t)) + ) + (message "Browsing at path: %s" path) + (save-excursion + (set-buffer browserbuf) + (insert (concat fileregexp "\n")) + (dolist (curf files) + (let ( (start (point)) + (f (file-name-sans-extension curf))) + (insert (concat f "\n")) + (if (file-exists-p (concat (file-name-as-directory path) f)) + (put-text-property start (point) 'face 'markdown-bold-face) + (put-text-property start (point) 'face 'markdown-link-face) + ) + )) + (setq buffer-read-only t) + (local-set-key "q" 'kill-current-buffer) + (local-set-key "\C-m" 'ikiwiki-browse-wiki-at-point) + ) + (switch-to-buffer browserbuf))) + + +;; examples +;(directory-files "." t (concat ".+\\(" (mapconcat 'identity '("mdwn" "text" "markdown") "\\|") "\\)$")) +;(directory-files "." t ".+\\(mdwn\\|text\\|markdown\\)$") + + diff --git a/nocheiner.markdown b/nocheiner.markdown new file mode 100644 index 00000000..e69de29b diff --git a/stats/activity.html b/stats/activity.html new file mode 100644 index 00000000..3291bf7f --- /dev/null +++ b/stats/activity.html @@ -0,0 +1,48 @@ + + + + + GitStats - markdown-mode + + + + + +

Activity

+ + +

Weekly activity

+ +

Last 32 weeks

0
0
0
2
7
1
0
0
0
0
0
0
25
44
1
3
0
0
8
0
10
0
0
1
0
0
0
5
2
0
12
0
3231302928272625242322212019181716151413121110987654321
+

Hour of Day

+ + + +
Hour01234567891011121314151617181920212223
Commits910919101914222035043101871222171611
%4.024.464.028.484.468.486.250.890.890.890.001.342.230.001.791.344.468.043.125.369.827.597.144.91
Hour of Day +

Day of Week

+ +
DayTotal (%)
Mon18 (8.04%)
Tue51 (22.77%)
Wed40 (17.86%)
Thu27 (12.05%)
Fri30 (13.39%)
Sat36 (16.07%)
Sun22 (9.82%)
Day of Week +

Hour of Week

+ +
Weekday01234567891011121314151617181920212223
Mon2121221322
Tue3186482114652
Wed42332112143123143
Thu111111331124421
Fri12438322131
Sat23223114214461
Sun111335413
+

Month of Year

+ +
MonthCommits (%)
11 (0.45 %)
216 (7.14 %)
34 (1.79 %)
49 (4.02 %)
58 (3.57 %)
648 (21.43 %)
74 (1.79 %)
876 (33.93 %)
922 (9.82 %)
1012 (5.36 %)
1111 (4.91 %)
1213 (5.80 %)
Month of Year +

Commits by year/month

+ +
MonthCommitsLines addedLines removed
2011-1212255107
2011-11721020
2011-10121
2011-091817273
2011-0873811437
2011-06824054
2011-05200
2010-11164
2010-04110
2009-11150
2009-10610361
2009-094172
2009-07253
2009-0473219
2009-0347031
2009-021618090
2009-011121
2008-112322
2008-104299110
2008-08300
2008-07211
2008-0638833394
2008-054215181
2008-04133
2007-121516
2007-101342146
2007-06225668
2007-05223614
Commits by year/month +

Commits by Year

+ +
YearCommits (% of all)Lines addedLines removed
2011121 (54.02%)1690692
20102 (0.89%)74
200941 (18.30%)424207
200854 (24.11%)1383691
20076 (2.68%)839244
Commits by Year +

Commits by Timezone

+ +
TimezoneCommits
-08001
-06002
-050032
-0400169
+00001
+010013
+02003
+05303
\ No newline at end of file diff --git a/stats/arrow-down.gif b/stats/arrow-down.gif new file mode 100644 index 0000000000000000000000000000000000000000..997f02f6b53ee1f68236c86178f5e06273b7432e GIT binary patch literal 73 zcmZ?wbhEHb6kyGG6G4(pDc_F49pBV3_t*qXJC?=)1P_h?k<^T Z_nGG6G4(pDc_F49pBV3_t*qXJC?;)1P_p?k<^T X_nGG6G4(pDc_F49pBV3_t*qXJC?=)1P_p?k<^T Z_n + + + + GitStats - markdown-mode + + + + + +

Authors

+ + +

List of Authors

+ +
AuthorCommits (%)+ lines- linesFirst commitLast commitAgeActive days# by commits
Jason Blevins192 (85.71%)361116692007-05-252011-11-221641 days, 4:01:24451
Matthias Ihrke12 (5.36%)2551072011-12-062011-12-081 day, 21:05:2632
intrigeri4 (1.79%)104682008-10-222009-02-22123 days, 14:50:5933
Eric Merritt3 (1.34%)179152011-05-302011-06-1515 days, 6:47:0934
Ankit Solanki3 (1.34%)1232009-02-102009-03-1330 days, 20:50:4835
Peter Williams2 (0.89%)1512009-09-302009-09-300:14:4316
Christopher J. Madsen2 (0.89%)22182011-09-292011-09-303:16:1227
Tim Visher1 (0.45%)102010-04-122010-04-120:00:0018
Scott Pfister1 (0.45%)1432011-08-242011-08-240:00:0019
Kevin Porter1 (0.45%)412011-11-212011-11-210:00:00110
Joost Kremers1 (0.45%)15022011-11-202011-11-200:00:00111
George Ogata1 (0.45%)642010-11-172010-11-170:00:00112
Edward O'Connor1 (0.45%)502009-11-172009-11-170:00:00113
+

Cumulated Added Lines of Code per Author

+ +Lines of code per Author +

Commits per Author

+ +Commits per Author +

Author of Month

+ +
MonthAuthorCommits (%)Next top 5Number of authors
2011-12Matthias Ihrke12 (100.00% of 12)1
2011-11Jason Blevins5 (71.43% of 7)Kevin Porter, Joost Kremers3
2011-10Jason Blevins1 (100.00% of 1)1
2011-09Jason Blevins16 (88.89% of 18)Christopher J. Madsen2
2011-08Jason Blevins72 (98.63% of 73)Scott Pfister2
2011-06Jason Blevins7 (87.50% of 8)Eric Merritt2
2011-05Eric Merritt2 (100.00% of 2)1
2010-11George Ogata1 (100.00% of 1)1
2010-04Tim Visher1 (100.00% of 1)1
2009-11Edward O'Connor1 (100.00% of 1)1
2009-10Jason Blevins6 (100.00% of 6)1
2009-09Peter Williams2 (50.00% of 4)Jason Blevins2
2009-07Jason Blevins2 (100.00% of 2)1
2009-04Jason Blevins7 (100.00% of 7)1
2009-03Jason Blevins2 (50.00% of 4)Ankit Solanki2
2009-02Jason Blevins14 (87.50% of 16)intrigeri, Ankit Solanki3
2009-01Jason Blevins1 (100.00% of 1)1
2008-11Jason Blevins2 (100.00% of 2)1
2008-10intrigeri3 (75.00% of 4)Jason Blevins2
2008-08Jason Blevins3 (100.00% of 3)1
2008-07Jason Blevins2 (100.00% of 2)1
2008-06Jason Blevins38 (100.00% of 38)1
2008-05Jason Blevins4 (100.00% of 4)1
2008-04Jason Blevins1 (100.00% of 1)1
2007-12Jason Blevins1 (100.00% of 1)1
2007-10Jason Blevins1 (100.00% of 1)1
2007-06Jason Blevins2 (100.00% of 2)1
2007-05Jason Blevins2 (100.00% of 2)1
+

Author of Year

+ +
YearAuthorCommits (%)Next top 5Number of authors
2011Jason Blevins101 (83.47% of 121)Matthias Ihrke, Eric Merritt, Christopher J. Madsen, Scott Pfister, Kevin Porter7
2010Tim Visher1 (50.00% of 2)George Ogata2
2009Jason Blevins34 (82.93% of 41)Ankit Solanki, Peter Williams, intrigeri, Edward O'Connor5
2008Jason Blevins51 (94.44% of 54)intrigeri2
2007Jason Blevins6 (100.00% of 6)1
+

Commits by Domains

+ +
DomainsTotal (%)
sdf.org101 (45.09%)
sdf.lonestar.org91 (40.62%)
nld.ds.mpg.de12 (5.36%)
gmail.com8 (3.57%)
boum.org4 (1.79%)
simulacra.in3 (1.34%)
youthful-indiscretion.(none)2 (0.89%)
cjmweb.net2 (0.89%)
fastmail.fm1 (0.45%)
Commits by Domains \ No newline at end of file diff --git a/stats/commits_by_author.dat b/stats/commits_by_author.dat new file mode 100644 index 00000000..1535c84e --- /dev/null +++ b/stats/commits_by_author.dat @@ -0,0 +1,208 @@ +1180122360 1 0 0 0 0 0 0 0 0 0 0 0 0 +1180122420 2 0 0 0 0 0 0 0 0 0 0 0 0 +1181028540 3 0 0 0 0 0 0 0 0 0 0 0 0 +1183158000 4 0 0 0 0 0 0 0 0 0 0 0 0 +1192135380 5 0 0 0 0 0 0 0 0 0 0 0 0 +1198699260 6 0 0 0 0 0 0 0 0 0 0 0 0 +1207013262 7 0 0 0 0 0 0 0 0 0 0 0 0 +1211576736 8 0 0 0 0 0 0 0 0 0 0 0 0 +1211594173 9 0 0 0 0 0 0 0 0 0 0 0 0 +1212248789 10 0 0 0 0 0 0 0 0 0 0 0 0 +1212257562 11 0 0 0 0 0 0 0 0 0 0 0 0 +1212452181 12 0 0 0 0 0 0 0 0 0 0 0 0 +1212456767 13 0 0 0 0 0 0 0 0 0 0 0 0 +1212456800 14 0 0 0 0 0 0 0 0 0 0 0 0 +1212457193 15 0 0 0 0 0 0 0 0 0 0 0 0 +1212461763 16 0 0 0 0 0 0 0 0 0 0 0 0 +1212461789 17 0 0 0 0 0 0 0 0 0 0 0 0 +1212516988 18 0 0 0 0 0 0 0 0 0 0 0 0 +1212518315 19 0 0 0 0 0 0 0 0 0 0 0 0 +1212519673 20 0 0 0 0 0 0 0 0 0 0 0 0 +1212520343 21 0 0 0 0 0 0 0 0 0 0 0 0 +1212530451 22 0 0 0 0 0 0 0 0 0 0 0 0 +1212550782 23 0 0 0 0 0 0 0 0 0 0 0 0 +1212551715 24 0 0 0 0 0 0 0 0 0 0 0 0 +1212551930 25 0 0 0 0 0 0 0 0 0 0 0 0 +1212552039 26 0 0 0 0 0 0 0 0 0 0 0 0 +1212590631 27 0 0 0 0 0 0 0 0 0 0 0 0 +1212591536 28 0 0 0 0 0 0 0 0 0 0 0 0 +1212592782 29 0 0 0 0 0 0 0 0 0 0 0 0 +1212592957 30 0 0 0 0 0 0 0 0 0 0 0 0 +1212593846 31 0 0 0 0 0 0 0 0 0 0 0 0 +1212597801 33 0 0 0 0 0 0 0 0 0 0 0 0 +1212600366 34 0 0 0 0 0 0 0 0 0 0 0 0 +1212601007 35 0 0 0 0 0 0 0 0 0 0 0 0 +1212602460 36 0 0 0 0 0 0 0 0 0 0 0 0 +1212602467 37 0 0 0 0 0 0 0 0 0 0 0 0 +1212605402 38 0 0 0 0 0 0 0 0 0 0 0 0 +1212612976 39 0 0 0 0 0 0 0 0 0 0 0 0 +1212614208 41 0 0 0 0 0 0 0 0 0 0 0 0 +1212721782 42 0 0 0 0 0 0 0 0 0 0 0 0 +1212722044 43 0 0 0 0 0 0 0 0 0 0 0 0 +1212723573 44 0 0 0 0 0 0 0 0 0 0 0 0 +1212723833 45 0 0 0 0 0 0 0 0 0 0 0 0 +1212723935 46 0 0 0 0 0 0 0 0 0 0 0 0 +1212724320 47 0 0 0 0 0 0 0 0 0 0 0 0 +1212770631 48 0 0 0 0 0 0 0 0 0 0 0 0 +1213371947 49 0 0 0 0 0 0 0 0 0 0 0 0 +1214944939 50 0 0 0 0 0 0 0 0 0 0 0 0 +1215541283 51 0 0 0 0 0 0 0 0 0 0 0 0 +1217985346 52 0 0 0 0 0 0 0 0 0 0 0 0 +1217986012 53 0 0 0 0 0 0 0 0 0 0 0 0 +1217986108 54 0 0 0 0 0 0 0 0 0 0 0 0 +1224629421 54 0 1 0 0 0 0 0 0 0 0 0 0 +1224630245 54 0 2 0 0 0 0 0 0 0 0 0 0 +1224877043 54 0 3 0 0 0 0 0 0 0 0 0 0 +1224965434 55 0 3 0 0 0 0 0 0 0 0 0 0 +1227283410 56 0 3 0 0 0 0 0 0 0 0 0 0 +1231217420 57 0 3 0 0 0 0 0 0 0 0 0 0 +1234254695 57 0 3 0 1 0 0 0 0 0 0 0 0 +1234886823 58 0 3 0 1 0 0 0 0 0 0 0 0 +1235313680 58 0 4 0 1 0 0 0 0 0 0 0 0 +1235780967 59 0 4 0 1 0 0 0 0 0 0 0 0 +1235785310 60 0 4 0 1 0 0 0 0 0 0 0 0 +1235785946 61 0 4 0 1 0 0 0 0 0 0 0 0 +1235786028 62 0 4 0 1 0 0 0 0 0 0 0 0 +1235787786 63 0 4 0 1 0 0 0 0 0 0 0 0 +1235791378 64 0 4 0 1 0 0 0 0 0 0 0 0 +1235793595 65 0 4 0 1 0 0 0 0 0 0 0 0 +1235793794 66 0 4 0 1 0 0 0 0 0 0 0 0 +1235794001 67 0 4 0 1 0 0 0 0 0 0 0 0 +1235844535 69 0 4 0 1 0 0 0 0 0 0 0 0 +1235847976 70 0 4 0 1 0 0 0 0 0 0 0 0 +1235892059 72 0 4 0 1 0 0 0 0 0 0 0 0 +1235939029 73 0 4 0 1 0 0 0 0 0 0 0 0 +1236856322 73 0 4 0 2 0 0 0 0 0 0 0 0 +1236921743 73 0 4 0 3 0 0 0 0 0 0 0 0 +1239290482 74 0 4 0 3 0 0 0 0 0 0 0 0 +1239290698 75 0 4 0 3 0 0 0 0 0 0 0 0 +1239298880 76 0 4 0 3 0 0 0 0 0 0 0 0 +1239299543 77 0 4 0 3 0 0 0 0 0 0 0 0 +1239300331 78 0 4 0 3 0 0 0 0 0 0 0 0 +1239300727 79 0 4 0 3 0 0 0 0 0 0 0 0 +1239300871 80 0 4 0 3 0 0 0 0 0 0 0 0 +1248188957 81 0 4 0 3 0 0 0 0 0 0 0 0 +1248189801 82 0 4 0 3 0 0 0 0 0 0 0 0 +1254342561 82 0 4 0 3 1 0 0 0 0 0 0 0 +1254343444 82 0 4 0 3 2 0 0 0 0 0 0 0 +1254346692 83 0 4 0 3 2 0 0 0 0 0 0 0 +1254346972 84 0 4 0 3 2 0 0 0 0 0 0 0 +1254348263 85 0 4 0 3 2 0 0 0 0 0 0 0 +1254358206 86 0 4 0 3 2 0 0 0 0 0 0 0 +1254364946 87 0 4 0 3 2 0 0 0 0 0 0 0 +1254371142 88 0 4 0 3 2 0 0 0 0 0 0 0 +1271039403 90 0 4 0 3 2 0 1 0 0 0 0 0 +1306791939 90 0 4 1 3 2 0 1 0 0 0 0 0 +1306797559 90 0 4 2 3 2 0 1 0 0 0 1 0 +1307412216 91 0 4 2 3 2 0 1 0 0 0 1 0 +1307412794 92 0 4 2 3 2 0 1 0 0 0 1 0 +1307418239 93 0 4 2 3 2 0 1 0 0 0 1 0 +1307419267 94 0 4 2 3 2 0 1 0 0 0 1 0 +1307419300 95 0 4 2 3 2 0 1 0 0 0 1 0 +1307419978 96 0 4 2 3 2 0 1 0 0 0 1 0 +1307457471 97 0 4 2 3 2 0 1 0 0 0 1 0 +1308112368 97 0 4 3 3 2 0 1 0 0 0 1 0 +1312642289 98 0 4 3 3 2 0 1 0 0 0 1 0 +1312645919 99 0 4 3 3 2 0 1 0 0 0 1 0 +1312645982 100 0 4 3 3 2 0 1 0 0 0 1 0 +1312646171 101 0 4 3 3 2 0 1 0 0 0 1 0 +1312646665 102 0 4 3 3 2 0 1 0 0 0 1 0 +1312647991 104 0 4 3 3 2 0 1 0 0 0 1 0 +1312653929 105 0 4 3 3 2 0 1 0 0 0 1 0 +1312654552 106 0 4 3 3 2 0 1 0 0 0 1 1 +1312657403 107 0 4 3 3 2 0 1 0 0 0 1 1 +1312657888 108 0 4 3 3 2 0 1 0 0 0 1 1 +1312658170 109 0 4 3 3 2 0 1 0 0 0 1 1 +1312661168 110 0 4 3 3 2 0 1 0 0 0 1 1 +1312662135 111 0 4 3 3 2 0 1 0 0 0 1 1 +1312663075 112 0 4 3 3 2 0 1 0 0 0 1 1 +1312664002 113 0 4 3 3 2 0 1 0 0 0 1 1 +1312664099 114 0 4 3 3 2 0 1 0 0 0 1 1 +1312666119 115 0 4 3 3 2 0 1 0 0 0 1 1 +1312732292 116 0 4 3 3 2 0 1 0 0 0 1 1 +1312732338 117 0 4 3 3 2 0 1 0 0 0 1 1 +1312734492 118 0 4 3 3 2 0 1 0 0 0 1 1 +1312734977 120 0 4 3 3 2 0 1 0 0 0 1 1 +1312751679 121 0 4 3 3 2 0 1 0 0 0 1 1 +1312751719 122 0 4 3 3 2 0 1 0 0 0 1 1 +1312751841 123 0 4 3 3 2 0 1 0 0 0 1 1 +1312757605 124 0 4 3 3 2 0 1 0 0 0 1 1 +1312766857 125 0 4 3 3 2 0 1 0 0 0 1 1 +1312807833 127 0 4 3 3 2 0 1 0 0 0 1 1 +1312808263 128 0 4 3 3 2 0 1 0 0 0 1 1 +1312826746 129 0 4 3 3 2 0 1 0 0 0 1 1 +1312830725 131 0 4 3 3 2 0 1 0 0 0 1 1 +1312831836 132 0 4 3 3 2 0 1 0 0 0 1 1 +1312834654 133 0 4 3 3 2 0 1 0 0 0 1 1 +1312834709 134 0 4 3 3 2 0 1 0 0 0 1 1 +1312844962 135 0 4 3 3 2 0 1 0 0 0 1 1 +1312851847 136 0 4 3 3 2 0 1 0 0 0 1 1 +1312852327 137 0 4 3 3 2 0 1 0 0 0 1 1 +1312862785 138 0 4 3 3 2 0 1 0 0 0 1 1 +1312913164 139 0 4 3 3 2 0 1 0 0 0 1 1 +1312913626 140 0 4 3 3 2 0 1 0 0 0 1 1 +1312914088 141 0 4 3 3 2 0 1 0 0 0 1 1 +1312918089 142 0 4 3 3 2 0 1 0 0 0 1 1 +1312919367 143 0 4 3 3 2 0 1 0 0 0 1 1 +1312919382 144 0 4 3 3 2 0 1 0 0 0 1 1 +1312920150 145 0 4 3 3 2 0 1 0 0 0 1 1 +1312929706 146 0 4 3 3 2 0 1 0 0 0 1 1 +1312931651 147 0 4 3 3 2 0 1 0 0 0 1 1 +1313026029 148 0 4 3 3 2 0 1 0 0 0 1 1 +1313034526 149 0 4 3 3 2 0 1 0 0 0 1 1 +1313067588 150 0 4 3 3 2 0 1 0 0 0 1 1 +1313067766 151 0 4 3 3 2 0 1 0 0 0 1 1 +1313083476 152 0 4 3 3 2 0 1 0 0 0 1 1 +1313084482 153 0 4 3 3 2 0 1 0 0 0 1 1 +1313101751 154 0 4 3 3 2 0 1 0 0 0 1 1 +1313106763 155 0 4 3 3 2 0 1 0 0 0 1 1 +1313111815 156 0 4 3 3 2 0 1 0 0 0 1 1 +1313119524 157 0 4 3 3 2 0 1 0 0 0 1 1 +1313123113 158 0 4 3 3 2 0 1 0 0 0 1 1 +1313125042 159 0 4 3 3 2 0 1 0 0 0 1 1 +1313158964 161 0 4 3 3 2 0 1 0 0 0 1 1 +1313273110 162 0 4 3 3 2 0 1 0 0 0 1 1 +1313340981 163 0 4 3 3 2 0 1 0 0 0 1 1 +1313341319 164 0 4 3 3 2 0 1 0 0 0 1 1 +1313343051 165 0 4 3 3 2 0 1 0 0 0 1 1 +1313344822 167 0 4 3 3 2 0 1 0 0 0 1 1 +1313461663 168 0 4 3 3 2 0 1 0 0 0 1 1 +1314023795 169 0 4 3 3 2 0 1 0 0 0 1 1 +1314023923 170 0 4 3 3 2 0 1 0 0 0 1 1 +1314137805 170 0 4 3 3 2 0 1 1 0 0 1 1 +1315878602 171 0 4 3 3 2 0 1 1 0 0 1 1 +1315879047 172 0 4 3 3 2 0 1 1 0 0 1 1 +1315879327 173 0 4 3 3 2 0 1 1 0 0 1 1 +1315886220 174 0 4 3 3 2 0 1 1 0 0 1 1 +1315886355 175 0 4 3 3 2 0 1 1 0 0 1 1 +1315886409 176 0 4 3 3 2 0 1 1 0 0 1 1 +1315888306 177 0 4 3 3 2 0 1 1 0 0 1 1 +1315888344 178 0 4 3 3 2 0 1 1 0 0 1 1 +1317327124 178 0 4 3 3 2 1 1 1 0 0 1 1 +1317331830 179 0 4 3 3 2 1 1 1 0 0 1 1 +1317338896 179 0 4 3 3 2 2 1 1 0 0 1 1 +1317342088 180 0 4 3 3 2 2 1 1 0 0 1 1 +1317342438 181 0 4 3 3 2 2 1 1 0 0 1 1 +1317342551 182 0 4 3 3 2 2 1 1 0 0 1 1 +1317343135 183 0 4 3 3 2 2 1 1 0 0 1 1 +1317344669 184 0 4 3 3 2 2 1 1 0 0 1 1 +1317347589 185 0 4 3 3 2 2 1 1 0 0 1 1 +1317353819 186 0 4 3 3 2 2 1 1 0 0 1 1 +1319137177 187 0 4 3 3 2 2 1 1 0 0 1 1 +1321814501 188 0 4 3 3 2 2 1 1 0 0 1 1 +1321814752 189 0 4 3 3 2 2 1 1 0 0 1 1 +1321815857 189 0 4 3 3 2 2 1 1 0 1 1 1 +1321818081 191 0 4 3 3 2 2 1 1 0 1 1 1 +1321922844 192 0 4 3 3 2 2 1 1 1 1 1 1 +1323181582 192 1 4 3 3 2 2 1 1 1 1 1 1 +1323190499 192 2 4 3 3 2 2 1 1 1 1 1 1 +1323258630 192 3 4 3 3 2 2 1 1 1 1 1 1 +1323259092 192 4 4 3 3 2 2 1 1 1 1 1 1 +1323264265 192 5 4 3 3 2 2 1 1 1 1 1 1 +1323272331 192 6 4 3 3 2 2 1 1 1 1 1 1 +1323272873 192 7 4 3 3 2 2 1 1 1 1 1 1 +1323339342 192 8 4 3 3 2 2 1 1 1 1 1 1 +1323339777 192 9 4 3 3 2 2 1 1 1 1 1 1 +1323341084 192 10 4 3 3 2 2 1 1 1 1 1 1 +1323342243 192 11 4 3 3 2 2 1 1 1 1 1 1 +1323343908 192 12 4 3 3 2 2 1 1 1 1 1 1 diff --git a/stats/commits_by_author.plot b/stats/commits_by_author.plot new file mode 100644 index 00000000..10c90d39 --- /dev/null +++ b/stats/commits_by_author.plot @@ -0,0 +1,14 @@ +set terminal png transparent size 640,240 +set size 1.0,1.0 + +set terminal png transparent size 640,480 +set output 'commits_by_author.png' +set key left top +set xdata time +set timefmt "%s" +set format x "%Y-%m-%d" +set grid y +set ylabel "Commits" +set xtics rotate +set bmargin 6 +plot 'commits_by_author.dat' using 1:2 title "Jason Blevins" w lines, 'commits_by_author.dat' using 1:3 title "Matthias Ihrke" w lines, 'commits_by_author.dat' using 1:4 title "intrigeri" w lines, 'commits_by_author.dat' using 1:5 title "Eric Merritt" w lines, 'commits_by_author.dat' using 1:6 title "Ankit Solanki" w lines, 'commits_by_author.dat' using 1:7 title "Peter Williams" w lines, 'commits_by_author.dat' using 1:8 title "Christopher J. Madsen" w lines, 'commits_by_author.dat' using 1:9 title "Tim Visher" w lines, 'commits_by_author.dat' using 1:10 title "Scott Pfister" w lines, 'commits_by_author.dat' using 1:11 title "Kevin Porter" w lines, 'commits_by_author.dat' using 1:12 title "Joost Kremers" w lines, 'commits_by_author.dat' using 1:13 title "George Ogata" w lines, 'commits_by_author.dat' using 1:14 title "Edward O'Connor" w lines diff --git a/stats/commits_by_author.png b/stats/commits_by_author.png new file mode 100644 index 0000000000000000000000000000000000000000..9de3cbeb0d900f25e9a6055a6986e18d68a8efe5 GIT binary patch literal 8648 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%0DHbbE&u`pJ z4H*%b&D<*=-=U;ZcV38Nj*-t!3uR3G!b^|dNlYfb$ha7xuyvxFpSw?qH~79DU^X#n z?!mrKY@*YtrntX*CmlHeCaV_tbFc*a1ER5aLAjeq8pt!QH-MiNFDcy43-}r{ zC&l(*p*uY-sx5OE3z!o|fuN#i2xhmij z0U^clKbLwhAhEMKJU;A&eN}*|AiS8bi(+HpZJ9;Mk4Dmi(U>AWrx0Zdq|334uMrqC zRvfDj9@?0#yYltxHT)b$JQpv5o*(}+0wWpGgn<_D)x?rA!p8p zAi))}!PYioq^0cYRFBbY7U+ozYw9{}7haD6F z9rxNRp^-W1$K)g9<7})=Zzr0!>|U0}&UW?q&G4Spc8$dnRw|70ig5XCww6mvr-u8P z1iSio*{os>fCb&OcBn4!#fkpPMNpdcwF)U3L4H{W@}I|aVAH^IQD-W7^U3JZILGLvkvCgZ!aRcv4Zr`ktK1`{3=%66;@8jmC53>emkD~_5!o!rC_p5tq z?EM}J3+Gkk5(@kytS*w^V?PZ$9rF=3{sH`tlCAfk=3asMtoEju>u)a|im^*Zo6P-eS*uO+b%!d0~lgRbp4^d#aNYzV!z$ktXG`(!cnSuR?z)>`TEOgO=@o3~k3*@mqL5 z6yE&gzPeqO;3D@QZc&rwEn3L@Wi9iMEc3WvY|rW zbIx$UoVgqOFYtdIcJkJ@Se;t*@R9)lo^kwXt*fJiT_B-n>6Iu-`8dWtXgxzps(u@aPe4qn;z7$7bEC?WXc#j4n9W zME6kCbJ9a(K`|OpI0i ztTyWo@~vDTJ7S5w>C#`jW73Toyg2U*WDcaa!X>g;`DPJs+JgQD!QActF`^o#5^-XA z)Gs%(%QpgZ=M?!K#X}x@M0OMa{VPzAjVnKpeSnfq+WRW!vIkyKwTFEM@Y1zUZiOIgvlSsYGG%dD9Zhu4cW zsIL5TptXAi%lqmz#qH0Mi16#o8LR)J79MPMyiuY{q!u~9=_+8I2Wtl)le)_Fbnu!i9AO0 literal 0 HcmV?d00001 diff --git a/stats/commits_by_year.dat b/stats/commits_by_year.dat new file mode 100644 index 00000000..292c1bd3 --- /dev/null +++ b/stats/commits_by_year.dat @@ -0,0 +1,5 @@ +2007 6 +2008 54 +2009 41 +2010 2 +2011 121 diff --git a/stats/commits_by_year.plot b/stats/commits_by_year.plot new file mode 100644 index 00000000..6f1bd231 --- /dev/null +++ b/stats/commits_by_year.plot @@ -0,0 +1,10 @@ +set terminal png transparent size 640,240 +set size 1.0,1.0 + +set output 'commits_by_year.png' +unset key +set xtics 1 rotate +set grid y +set ylabel "Commits" +set yrange [0:] +plot 'commits_by_year.dat' using 1:2:(0.5) w boxes fs solid diff --git a/stats/commits_by_year.png b/stats/commits_by_year.png new file mode 100644 index 0000000000000000000000000000000000000000..48b4d2f8144b65ef574f1814b7d45fe5de03700b GIT binary patch literal 2662 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 literal 0 HcmV?d00001 diff --git a/stats/domains.dat b/stats/domains.dat new file mode 100644 index 00000000..0d249447 --- /dev/null +++ b/stats/domains.dat @@ -0,0 +1,9 @@ +sdf.org 1 101 +sdf.lonestar.org 2 91 +nld.ds.mpg.de 3 12 +gmail.com 4 8 +boum.org 5 4 +simulacra.in 6 3 +youthful-indiscretion.(none) 7 2 +cjmweb.net 8 2 +fastmail.fm 9 1 diff --git a/stats/domains.plot b/stats/domains.plot new file mode 100644 index 00000000..4e0e45a0 --- /dev/null +++ b/stats/domains.plot @@ -0,0 +1,10 @@ +set terminal png transparent size 640,240 +set size 1.0,1.0 + +set output 'domains.png' +unset key +unset xtics +set yrange [0:] +set grid y +set ylabel "Commits" +plot 'domains.dat' using 2:3:(0.5) with boxes fs solid, '' using 2:3:1 with labels rotate by 45 offset 0,1 diff --git a/stats/domains.png b/stats/domains.png new file mode 100644 index 0000000000000000000000000000000000000000..d707d373c22e6ff96f9a36731fd277acc18aa849 GIT binary patch literal 5771 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 n?jy-v7JghP*$~)K8U$PWsb4a> + + + + GitStats - markdown-mode + + + + + +

Files

+
+
+
Total files
4
Total lines
2505
Average file size
62625.00 bytes
+ +

File count by date

+ +Files by Date +

Extensions

+ +
ExtensionFiles (%)Lines (%)Lines/file
1 (25.00%)1 (0.04%)1
el1 (25.00%)2472 (98.68%)2472
sh1 (25.00%)32 (1.28%)32
\ No newline at end of file diff --git a/stats/files_by_date.dat b/stats/files_by_date.dat new file mode 100644 index 00000000..b61e7b03 --- /dev/null +++ b/stats/files_by_date.dat @@ -0,0 +1,63 @@ +2007-05-25 1 +2007-06-05 1 +2007-06-30 1 +2007-10-11 1 +2007-12-26 1 +2008-04-01 1 +2008-05-23 1 +2008-05-24 1 +2008-05-31 1 +2008-06-03 1 +2008-06-04 1 +2008-06-06 1 +2008-06-13 1 +2008-07-01 1 +2008-07-08 1 +2008-08-06 1 +2008-10-22 1 +2008-10-24 1 +2008-10-25 1 +2008-11-01 3 +2008-11-21 1 +2009-01-06 1 +2009-02-10 1 +2009-02-17 1 +2009-02-22 1 +2009-02-28 1 +2009-03-01 1 +2009-03-12 1 +2009-03-13 1 +2009-04-09 1 +2009-07-21 1 +2009-09-30 1 +2009-10-01 1 +2009-10-05 2 +2009-11-17 3 +2010-04-12 2 +2010-11-17 2 +2011-05-30 2 +2011-05-31 2 +2011-06-07 2 +2011-06-15 2 +2011-08-06 2 +2011-08-06 3 +2011-08-07 3 +2011-08-08 3 +2011-08-09 3 +2011-08-10 3 +2011-08-11 3 +2011-08-12 3 +2011-08-14 3 +2011-08-16 3 +2011-08-22 3 +2011-08-24 3 +2011-09-13 3 +2011-09-29 3 +2011-09-30 3 +2011-10-20 3 +2011-11-20 3 +2011-11-21 3 +2011-11-22 3 +2011-12-06 3 +2011-12-07 3 +2011-12-08 3 diff --git a/stats/files_by_date.plot b/stats/files_by_date.plot new file mode 100644 index 00000000..dbd1e31d --- /dev/null +++ b/stats/files_by_date.plot @@ -0,0 +1,14 @@ +set terminal png transparent size 640,240 +set size 1.0,1.0 + +set output 'files_by_date.png' +unset key +set xdata time +set timefmt "%Y-%m-%d" +set format x "%Y-%m-%d" +set grid y +set ylabel "Files" +set xtics rotate +set ytics autofreq +set bmargin 6 +plot 'files_by_date.dat' using 1:2 w steps diff --git a/stats/files_by_date.png b/stats/files_by_date.png new file mode 100644 index 0000000000000000000000000000000000000000..2f5b338fd42ff0a625a89f48c92c0ecb4853c756 GIT binary patch literal 2730 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 Cb?zzv literal 0 HcmV?d00001 diff --git a/stats/gitstats.cache b/stats/gitstats.cache new file mode 100644 index 0000000000000000000000000000000000000000..da053881cb3c3b2ed22dd0fbd23e2c080bf36fd4 GIT binary patch literal 6363 zcmV<17$oO-oK2cpjx{-QrQdTSrKbkXNE*o{=(!dka0CPhYN4z5kN%AJr)Os+P>~Ur z*Et+JgVFzO{ZIJopa1x;|NQU$umAYZ|Nf8hU;lgjtBpH|M_3PY5(8BtrT({Q?!L< zXN|&d)oNZxny4&oK1TjbEw8R@AzwFU8o|_BWICC>3Pt-aEUX?qK1Tn{t(9Ck94Tck z>0{|Wr*bH%&)H_2i>=_fz8r~v=BC1->FLF)%ye{}({0G!bMI1HK6U1>&5uCRpD{q7 zOt!PiE=9wXURNC_&R%N?JB-3nv^ITA{%08n%{^bJvoTGtxX55jFdm@{TliW}N37J%*Cg86mW@W1LpUVAkN1 z`Q5oa7%V;IWL+cWtwDhxc!=O)WPrX`Wqsh|KBxVeTbONdLbB&7t2b*+J12X9*g0Dh zhpZ)B=xX?LK1tiDUC!nlhf1Gohfu4fA_!wRd!9SDhl3nSNI^o*dicu05_E(X&#asj8z;)o&DlUd94u*jM%!RJ zM+0um3P|KuXNj?}oG_E!_0(4jLsBZIYI7!GLlOs64N^;cCH}uP)3fiHJ{;I-@J0cV zBXEj!_cS8d8=MbE+xIXn@S&4sc;_Q=P**kONv$Tfkpi8AV>(R%J?PCdr{ZHC4o+ON zgRotK!D6{{95v4}YCDl44_O0fz0c7IyHrRy@R`xZIdh-B8&lhBbVyqBbl!=N z57tqR;-pn#YHepP=pNyMKCKBgpCFQ~_c`fdXG@^$Yf0=yi_)MVjnRq$*cHd+%UB(w z@$o@{@|gJS#~)B6r(P+ype$T-52abD0M^HRd@z=4((Ww0&d^#^in(j2l1?sl$dRql z>nD~sx6~t~29?%2;#zYIHV+`p*c+MyJ0@!T?!m*sN|ood+{)gY=}^cZVRMvOOX>U# zjT*yo5Zj;iY!yqTRpryDPO5F8UK`SCsesa6YM-*M{5>2X38p>BX3xy(N;23!uz9SX z2m$q6&r)Acdb%*{8G9;K0F#8nx9_|AaRv_eKvyg%-1A8f2V+)L+JI*0Ugt-uw4T%} zmnr~B%eTnalm6C)0LM2zJCqMfVtFm(5>IC^x~^Y&{ENSirfq;@=msyk^+_>`3}PY!S_w=@q2%#~6|%%Nd= zT!}FW86J_dm=sK~+`@SM0$9l{yAJ*=sw0IIs$rb-ZZ6PZl;~m6S4ONzhn>SFY9dTCnF6 zk)s17K?3El!A*4q2@oR`27xzrbe-*cZ4U=y$pOb45;6!Fwz!!?x0zISGhFAynK-WP z`GaJBqGPdNJfgcEOR<#zL=wzZ^uyyvAM^3SaZit&$!rne0Z@>kjM<|jstJ7s<a z*6ibJcWd~9QI}wj(EZ*kg|laI&kxH9fb^QPj}J=Dgq$`g9gqWxQBpj3KL;-YPhl+d zTs^gi15I%-qcnkJUEqboM++i0osRf-vbxc)5sr+zD&7tct z3gVQd$uU|UA0&KL=Nkd%=osaqfU+lq4|O=?l>m5l@-r>*`S^&Ko5d>bhoD5%;A|^n z6&5(aC^26LaZWcrDg>k$ZV^^SQyv8s8p;zSU8N{L<8 z!g=igz)x}?BJs%Gw}*q2*%ujJWO$b<&c2wlN)jlrFn{T6+q(Pqa1b+wun}hz%3$eG zdVv-WC^~r`YA)bTuKv`Ag9)%8jWsH=h1S^4%+ZYxnT8YtFC0qSu~Q!o;K~(SC#?uJ zt}VDLbx;a1mR)7V4K5dZ?s@Qf*PHWPIm&9KmEUAgbZ3@Y4Ct?cv~rsDght zOp%c;$X9S^F&uPkk_`?g;M{Ch)2CTXoLo+>woE!uFg&r_oD*>c+Fzb!#QC5;p9rzc z)lke{(5eEbVb>O0?Cy|^3MAOIepCI!0Y^_@+0d;=$^dIBU&8sI-umY_<#X?dWuPb1Yg}7`!tZh?GS`aGJ@e_ zUS1%fdvK3r5w<#_0hyg2!iI4C;)j)ij(dvsa6nGZNGO(z#UoX%6Jy%I9@PL-%qp>$ z)*T1!=|V!Rb+Y*B0i-~Yv)QgNZEQJD#+4hH z$qSoDbRhz{B>R}B3-D_Kza(W4Qf5i;d_YANmFJ&~yMSOXU$=(?uQKv(FKD)5i@alI zOt6AZgmwwO43F+L*B&2m9K$F{o8B-HT->ouX>zh*!|^Rr{qt%tLm%M$u<^0EQmhMs zWBoX{a56FzpabGKfVz#O@EF1E!yu3$aszEoo{;)s!mx7g3p+PR>*IDr!eJb2&e>%gL6G)eI_wEb&yJx-whhfy%d2&K{&aRfpn-&E|@CTRliI_v_SuJI1aUrHsM*3N0xEEvO;1Kf-K;8$^xTRm=A`90~; zf~T`W{3CE6i+r(XW5a6KfoZ^8@Iysa?x4pD94nAGc~Re3EO#+DM0UnVq6@NheQ9&w zK`%Ho$ogpNZre$J&2z_`HDVyq^Fc`A;gHQ8^boODT@9x3C3ny+_z~iM&JCUwA$R1q z;o;jQ{34_jDNu1NIF{BusZi_W>P;NlM4ir&*{|g%4-xGYa!bM>$4<1fM!At$*TgKq zsnjbRSgy|$(T{}cjC?VqimNAjQPsF|G`+#-S-Yiw%_hOL<9t-EaC-Pg7;<7HsA+4-d%yAhyvYf`3`zoQDKxb2r}Y! zW8fFOofNzWoZZzJ8jaz(Ytk1Y4kb2lBZY5VoUFvv;d2mSmHb7fZS48H&CIXMh>)%X zUqe=rfIJIcgku4Q94p1|*8#-m-=K$xqlb`|3Q`M?RFv;TfzW#@2?~#B4%JnEE$XKi zP_1xmnvIjX#2r*@(7O%96~awKC0fM z8uK$800WX!6pVKVeH{h>){FNdfo?fqmStD(6=WgS`*j9(?$7j|mE`0GK7Bb7)Ic0AGF<@|k7@y8K9pnvtIOGakB0uVnJ(b-=G1EM%Wce@E^v^`LxgV6okhcjN(}=Q$iE@` zZ^uc#)}!F_%vssoPM&c#X<6Z|jLi5I0kwWo{|$PoVU=_A8yxFyf>`ot;--xGx%sKc zr#EQtpr;z13^^%x(l{{^$vUlU>xQZ27>fUAp~UW>uL}*MCTOt&*;NUGtR$62vH|Rr zbBdwGc2l#YzuOH5=Nj-*Qzsb*T8@hQGMtX0qUOi*Md|&MO`y>lxZ;ojQD~sk~6Q|urm1VE%*Eof&Rb;RdypU!X#ZX z#Lp8^RJ^#Nb*&b?^^_k+pxx{!m4j_zz}Wl@a#HEK{7#6iSkCl!&_jgco~b>Qf@ezg zraracU0~c8qyd{09Om8foW2MYi67)T!-Ew>SrBTRQedqR>mJ*?o%=WFsYdj>q71&Q z1Q#YnFxWfXlsEAk8(@81li?o&F@%dsu%TNVaE!-BW9=`S#p}ot>*4*}!x)*23M#xQ32_iGsDs!`q1H2ny zA4eo{Q7ZV>=>#3v@IZc2tSz7aJWKsD9LKZS2bF%)Pz*sp{6)F_eQ`}e`ITD>pomxt#SCwEcy9VN?=s##XNf22$8?MYk8%9EDFq|C&OMel1@YjVln?salBMQ zoXKQCp2PthBmi1TOJ|?FvDqu zfz=>CRFbzPPo5}`dq*~@O#8i<@OO983ft!Qt&?bq566CrpQ<xVeHUK**LXSabx&+X?{Og5XRwmVE4LM>T{N83l0=MLHvh-b4miggn=pe z@J@`t4Q9JR@@rC}_V|aBv2Ezn_A4RMaMjiD58^Z`9#^g<__~y=cgGXmq9HRR$O%8M zgoQpW2XAY(?&I#DPc@1gY~mnf0(IkzRtb3*avkSDWB`w7(6w$~pOS+QO*RG!Xr|ox zD5;w)fHwIxLtitj{O6n=A~3JLar7bk)#7U2u07^m|Fry~1jj(+{W;6}-CzZOttt40 zB{VM?+0g3O<=AEf4lfH|u?0S;eTWE%5j&MOZf!ehZhXjsDQ0f&?)@58ep1suAK~4| zY$GpB6yiS#OYWn{DvhT??%R9U_i(>v<=TU-pvrXmnjWH$EK z)@mZ`;t2^ka#$gi>-AcqzygVe|#BW>t67s-_@M!K^!X0FPU=)BU zI7PyUTSUP*&=@P*Uu`2iz(?vAFTd$Mj&Q3#NHu9Acafy-@=MsNVIsbGgAx4|virW& z|JSqBJu-m><6!JzAo=U)fePnef2FBV`X}B&4-t5QxV`B>p701nusog*fh$ql4Nrk) z?oF6}Jxih1JJs4SXq;wYk}ySyNKX}P-HA*Tin)UxBB(L4cf4(dm>O2z?}Gg8GQSSc zCLIQ)(C?tnN04XGAx*GS7zm#dy*vw@t8;M;(#YI*%m02O68}uNFbwhVYdU0N;$qMY z;vPpxe4YI#YWnpoITC-rC%8Rlr_?f}i~yiEoZZ1WyMOD9biBb~OsD_1^`#emzU?qBd~J!B7~% z-_n&CT?HyemUzQdIj-NJ`fa&i%)nL{HMc9?lnKLc?vPGws33Ex-m4Im*N@18ATR3) zS|n;Mzufc1DZZ`Z$3Y_?zr>ADO+nX$tvGNJ-RPB4kO>hpX2o3a&z}B##okBUX zJ7rW)<@LuA`gi(78;-y409OS_8g@-HuM!E+jU4`qL%%hB9D)7D&>e4{QLvCJThSK` zTijQXSlqje-{C%I*$-M`pQ dM7H3hkB=wNo(WWbua?FiBL4Ni{vYtS5DisdIZXfn literal 0 HcmV?d00001 diff --git a/stats/gitstats.css b/stats/gitstats.css new file mode 100644 index 00000000..d807cb05 --- /dev/null +++ b/stats/gitstats.css @@ -0,0 +1,145 @@ +/** + * GitStats - default style + */ +body { + color: black; + background-color: #dfd; +} + +dt { + font-weight: bold; + float: left; + margin-right: 1em; +} + +dt:after { + content: ': '; +} + +dd { + display: block; + clear: left; +} + +table { + border: 1px solid black; + border-collapse: collapse; + font-size: 80%; + margin-bottom: 1em; +} + +table.noborders { + border: none; +} + +table.noborders td { + border: none; +} + +.vtable { + float: right; + clear: both; +} + +table.tags td { + vertical-align: top; +} + +td { + background-color: white; +} + +th { + background-color: #ddf; +} + +th a { + text-decoration: none; +} + +tr:hover { + background-color: #ddf; +} + +td { + border: 1px solid black; + padding: 0.2em; + padding-left: 0.3em; + padding-right: 0.2em; +} + +/* Navigation bar; tabbed style */ +.nav { + border-bottom: 1px solid black; + padding: 0.3em; +} + +.nav ul { + list-style-type: none; + display: inline; + margin: 0; + padding: 0; +} + +.nav li { + display: inline; +} + +.nav li a { + padding: 0.3em; + text-decoration: none; + color: black; + border: 1px solid black; + margin: 0.5em; + background-color: #ddf; +} + +.nav li a:hover { + background-color: #ddd; + border-bottom: 1px solid #ddf; +} + +img { + border: 1px solid black; + padding: 0.5em; + background-color: white; +} + +th img { + border: 0px; + padding: 0px; + background-color: #ddf; +} + +h1 a, h2 a { + color: black; + text-decoration: none; +} + +h1:hover a:after, +h2:hover a:after { + content: '¶'; + color: #555; +} + +h1 { + font-size: x-large; +} + +h2 { + background-color: #564; + border: 1px solid black; + padding-left: 0.5em; + padding-right: 0.5em; + color: white; + font-size: large; + clear: both; +} + +h2 a { + color: white; +} + +.moreauthors { + font-size: 80%; +} diff --git a/stats/hour_of_day.dat b/stats/hour_of_day.dat new file mode 100644 index 00000000..f477dab9 --- /dev/null +++ b/stats/hour_of_day.dat @@ -0,0 +1,24 @@ +1 9 +2 10 +3 9 +4 19 +5 10 +6 19 +7 14 +8 2 +9 2 +10 2 +11 0 +12 3 +13 5 +14 0 +15 4 +16 3 +17 10 +18 18 +19 7 +20 12 +21 22 +22 17 +23 16 +24 11 diff --git a/stats/hour_of_day.plot b/stats/hour_of_day.plot new file mode 100644 index 00000000..37309fdb --- /dev/null +++ b/stats/hour_of_day.plot @@ -0,0 +1,10 @@ +set terminal png transparent size 640,240 +set size 1.0,1.0 + +set output 'hour_of_day.png' +unset key +set xrange [0.5:24.5] +set xtics 4 +set grid y +set ylabel "Commits" +plot 'hour_of_day.dat' using 1:2:(0.5) w boxes fs solid diff --git a/stats/hour_of_day.png b/stats/hour_of_day.png new file mode 100644 index 0000000000000000000000000000000000000000..d262d8a8f312a9f7bcd03456fcab579ae25260f3 GIT binary patch literal 2959 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 literal 0 HcmV?d00001 diff --git a/stats/index.html b/stats/index.html new file mode 100644 index 00000000..b2c4f5db --- /dev/null +++ b/stats/index.html @@ -0,0 +1,23 @@ + + + + + GitStats - markdown-mode + + + + + +

GitStats - markdown-mode

+ +
Project name
markdown-mode
Generated
2011-12-15 12:14:54 (in 4 seconds)
Generator
GitStats (version 750ddfe), git version 1.7.8, gnuplot 4.4 patchlevel 2
Report Period
2007-05-25 21:46:00 to 2011-12-08 12:31:48
Age
1658 days, 62 active days (3.74%)
Total Files
4
Total Lines of Code
2505 (4343 added, 1838 removed)
Total Commits
224 (average 3.6 commits per active day, 0.1 per all days)
Authors
13 (average 17.2 commits per author)
+ \ No newline at end of file diff --git a/stats/lines.html b/stats/lines.html new file mode 100644 index 00000000..0a64c9b1 --- /dev/null +++ b/stats/lines.html @@ -0,0 +1,27 @@ + + + + + GitStats - markdown-mode + + + + + +

Lines

+ +
+
Total lines
2505
+ +

Lines of Code

+ + \ No newline at end of file diff --git a/stats/lines_of_code.dat b/stats/lines_of_code.dat new file mode 100644 index 00000000..2299841f --- /dev/null +++ b/stats/lines_of_code.dat @@ -0,0 +1,218 @@ +1180122360 140 +1180122420 222 +1181028540 399 +1183158000 410 +1192135380 606 +1198699260 595 +1207013262 595 +1211576736 472 +1211594173 588 +1212248789 589 +1212257562 629 +1212452181 631 +1212456767 650 +1212456800 650 +1212457193 650 +1212461763 670 +1212461789 686 +1212516988 687 +1212518315 687 +1212519673 711 +1212520343 711 +1212530451 696 +1212550782 699 +1212551715 709 +1212551930 720 +1212552039 720 +1212556328 961 +1212590631 720 +1212591536 720 +1212592782 862 +1212592957 846 +1212593846 872 +1212597801 886 +1212600366 1004 +1212601007 1014 +1212602460 1015 +1212602467 1019 +1212605402 1019 +1212612976 1028 +1212613012 1028 +1212614208 1028 +1212721782 1031 +1212722044 1031 +1212723573 1042 +1212723833 1042 +1212723935 1042 +1212724320 1042 +1212770631 1068 +1213371947 1068 +1214944939 1068 +1224629421 1103 +1224630245 1104 +1224877043 1256 +1224965434 1257 +1225571121 1694 +1227283410 1257 +1231217420 1268 +1234254695 1268 +1234886823 1269 +1235313680 1269 +1235780967 1287 +1235785310 1288 +1235785946 1291 +1235786028 1291 +1235787786 1299 +1235791378 1307 +1235793595 1334 +1235793794 1336 +1235794001 1336 +1235794257 1358 +1235800867 1358 +1235844535 1336 +1235847976 1358 +1235892059 1358 +1235939029 1388 +1236856322 1397 +1236921743 1397 +1239290482 1397 +1239290698 1397 +1239298880 1408 +1239299543 1409 +1239300331 1410 +1239300727 1410 +1239300871 1410 +1248188957 1410 +1248189801 1412 +1254342561 1412 +1254343444 1426 +1254346692 1427 +1254346972 1427 +1254348263 1463 +1254358206 1457 +1254364946 1467 +1254371142 1469 +1254697018 1469 +1254697229 1470 +1258436046 1701 +1271039403 1470 +1289979775 1472 +1307412216 1473 +1307412794 1538 +1307418239 1559 +1307419267 1559 +1307419300 1559 +1307419978 1559 +1307457471 1558 +1308112368 1658 +1312642289 1658 +1312645919 1661 +1312645982 1659 +1312646171 1662 +1312646665 1664 +1312647991 1664 +1312653929 1696 +1312654552 1696 +1312657403 1702 +1312657888 1706 +1312658170 1708 +1312661168 1708 +1312662135 1719 +1312663075 1732 +1312664002 1730 +1312664099 1733 +1312666119 1736 +1312730239 1820 +1312732292 1776 +1312732338 1777 +1312734492 1777 +1312734977 1785 +1312751679 1820 +1312751719 1825 +1312751841 1829 +1312757605 1828 +1312766857 1837 +1312767300 1841 +1312807833 1839 +1312808263 1955 +1312826746 1971 +1312830502 2000 +1312830725 1974 +1312831836 2000 +1312834654 2005 +1312834709 2005 +1312844962 2005 +1312851847 2002 +1312852327 2002 +1312862785 1996 +1312913164 1997 +1312913626 1999 +1312914088 2002 +1312918089 2005 +1312919367 2020 +1312919382 2025 +1312920150 2030 +1312929706 2032 +1312931651 2032 +1313026029 2040 +1313034526 2037 +1313067588 2038 +1313067766 2046 +1313083476 2043 +1313084482 2041 +1313101751 2041 +1313106763 2032 +1313111815 2039 +1313119524 2040 +1313123113 2041 +1313125042 2043 +1313158538 2048 +1313158964 2043 +1313273110 2047 +1313340981 2053 +1313341319 2054 +1313341967 2054 +1313343051 2054 +1313344822 2052 +1313461663 2054 +1314023795 2054 +1314023923 2056 +1314137805 2067 +1315878602 2068 +1315879047 2069 +1315879327 2073 +1315886220 2073 +1315886355 2073 +1315886409 2084 +1315888306 2083 +1315888344 2085 +1317327124 2089 +1317331830 2091 +1317338896 2091 +1317342088 2092 +1317342438 2094 +1317342551 2094 +1317343135 2105 +1317344669 2119 +1317347589 2120 +1317353819 2166 +1319137177 2167 +1321814501 2188 +1321814752 2199 +1321815857 2347 +1321818067 2354 +1321818081 2346 +1321913699 2357 +1321922844 2354 +1323181582 2369 +1323190499 2397 +1323258630 2415 +1323259092 2415 +1323264265 2423 +1323272331 2477 +1323272873 2476 +1323339342 2501 +1323339777 2503 +1323341084 2494 +1323342243 2494 +1323343908 2505 diff --git a/stats/lines_of_code.plot b/stats/lines_of_code.plot new file mode 100644 index 00000000..eb0c9f94 --- /dev/null +++ b/stats/lines_of_code.plot @@ -0,0 +1,13 @@ +set terminal png transparent size 640,240 +set size 1.0,1.0 + +set output 'lines_of_code.png' +unset key +set xdata time +set timefmt "%s" +set format x "%Y-%m-%d" +set grid y +set ylabel "Lines" +set xtics rotate +set bmargin 6 +plot 'lines_of_code.dat' using 1:2 w lines diff --git a/stats/lines_of_code.png b/stats/lines_of_code.png new file mode 100644 index 0000000000000000000000000000000000000000..b44020e9ea01cd90a5b01f0343a0e5db647e6360 GIT binary patch literal 3103 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 literal 0 HcmV?d00001 diff --git a/stats/lines_of_code_by_author.dat b/stats/lines_of_code_by_author.dat new file mode 100644 index 00000000..89bfb512 --- /dev/null +++ b/stats/lines_of_code_by_author.dat @@ -0,0 +1,208 @@ +1180122360 140 0 0 0 0 0 0 0 0 0 0 0 0 +1180122420 236 0 0 0 0 0 0 0 0 0 0 0 0 +1181028540 475 0 0 0 0 0 0 0 0 0 0 0 0 +1183158000 492 0 0 0 0 0 0 0 0 0 0 0 0 +1192135380 834 0 0 0 0 0 0 0 0 0 0 0 0 +1198699260 839 0 0 0 0 0 0 0 0 0 0 0 0 +1207013262 842 0 0 0 0 0 0 0 0 0 0 0 0 +1211576736 859 0 0 0 0 0 0 0 0 0 0 0 0 +1211594173 1013 0 0 0 0 0 0 0 0 0 0 0 0 +1212248789 1015 0 0 0 0 0 0 0 0 0 0 0 0 +1212257562 1057 0 0 0 0 0 0 0 0 0 0 0 0 +1212452181 1065 0 0 0 0 0 0 0 0 0 0 0 0 +1212456767 1111 0 0 0 0 0 0 0 0 0 0 0 0 +1212456800 1120 0 0 0 0 0 0 0 0 0 0 0 0 +1212457193 1122 0 0 0 0 0 0 0 0 0 0 0 0 +1212461763 1142 0 0 0 0 0 0 0 0 0 0 0 0 +1212461789 1169 0 0 0 0 0 0 0 0 0 0 0 0 +1212516988 1172 0 0 0 0 0 0 0 0 0 0 0 0 +1212518315 1173 0 0 0 0 0 0 0 0 0 0 0 0 +1212519673 1273 0 0 0 0 0 0 0 0 0 0 0 0 +1212520343 1283 0 0 0 0 0 0 0 0 0 0 0 0 +1212530451 1355 0 0 0 0 0 0 0 0 0 0 0 0 +1212550782 1368 0 0 0 0 0 0 0 0 0 0 0 0 +1212551715 1379 0 0 0 0 0 0 0 0 0 0 0 0 +1212551930 1392 0 0 0 0 0 0 0 0 0 0 0 0 +1212552039 1393 0 0 0 0 0 0 0 0 0 0 0 0 +1212590631 1394 0 0 0 0 0 0 0 0 0 0 0 0 +1212591536 1395 0 0 0 0 0 0 0 0 0 0 0 0 +1212592782 1537 0 0 0 0 0 0 0 0 0 0 0 0 +1212592957 1537 0 0 0 0 0 0 0 0 0 0 0 0 +1212593846 1597 0 0 0 0 0 0 0 0 0 0 0 0 +1212597801 1691 0 0 0 0 0 0 0 0 0 0 0 0 +1212600366 1741 0 0 0 0 0 0 0 0 0 0 0 0 +1212601007 1751 0 0 0 0 0 0 0 0 0 0 0 0 +1212602460 1752 0 0 0 0 0 0 0 0 0 0 0 0 +1212602467 1756 0 0 0 0 0 0 0 0 0 0 0 0 +1212605402 1757 0 0 0 0 0 0 0 0 0 0 0 0 +1212612976 1772 0 0 0 0 0 0 0 0 0 0 0 0 +1212614208 1778 0 0 0 0 0 0 0 0 0 0 0 0 +1212721782 1781 0 0 0 0 0 0 0 0 0 0 0 0 +1212722044 1782 0 0 0 0 0 0 0 0 0 0 0 0 +1212723573 1853 0 0 0 0 0 0 0 0 0 0 0 0 +1212723833 1854 0 0 0 0 0 0 0 0 0 0 0 0 +1212723935 1856 0 0 0 0 0 0 0 0 0 0 0 0 +1212724320 1859 0 0 0 0 0 0 0 0 0 0 0 0 +1212770631 1889 0 0 0 0 0 0 0 0 0 0 0 0 +1213371947 1890 0 0 0 0 0 0 0 0 0 0 0 0 +1214944939 1891 0 0 0 0 0 0 0 0 0 0 0 0 +1215541283 1972 0 0 0 0 0 0 0 0 0 0 0 0 +1217985346 2076 0 0 0 0 0 0 0 0 0 0 0 0 +1217986012 2083 0 0 0 0 0 0 0 0 0 0 0 0 +1217986108 2121 0 0 0 0 0 0 0 0 0 0 0 0 +1224629421 2121 0 46 0 0 0 0 0 0 0 0 0 0 +1224630245 2121 0 103 0 0 0 0 0 0 0 0 0 0 +1224877043 2121 0 103 0 0 0 0 0 0 0 0 0 0 +1224965434 2122 0 103 0 0 0 0 0 0 0 0 0 0 +1227283410 2124 0 103 0 0 0 0 0 0 0 0 0 0 +1231217420 2136 0 103 0 0 0 0 0 0 0 0 0 0 +1234254695 2136 0 103 0 1 0 0 0 0 0 0 0 0 +1234886823 2137 0 103 0 1 0 0 0 0 0 0 0 0 +1235313680 2137 0 104 0 1 0 0 0 0 0 0 0 0 +1235780967 2160 0 104 0 1 0 0 0 0 0 0 0 0 +1235785310 2161 0 104 0 1 0 0 0 0 0 0 0 0 +1235785946 2165 0 104 0 1 0 0 0 0 0 0 0 0 +1235786028 2168 0 104 0 1 0 0 0 0 0 0 0 0 +1235787786 2178 0 104 0 1 0 0 0 0 0 0 0 0 +1235791378 2187 0 104 0 1 0 0 0 0 0 0 0 0 +1235793595 2217 0 104 0 1 0 0 0 0 0 0 0 0 +1235793794 2271 0 104 0 1 0 0 0 0 0 0 0 0 +1235794001 2272 0 104 0 1 0 0 0 0 0 0 0 0 +1235844535 2299 0 104 0 1 0 0 0 0 0 0 0 0 +1235847976 2303 0 104 0 1 0 0 0 0 0 0 0 0 +1235892059 2343 0 104 0 1 0 0 0 0 0 0 0 0 +1235939029 2373 0 104 0 1 0 0 0 0 0 0 0 0 +1236856322 2373 0 104 0 11 0 0 0 0 0 0 0 0 +1236921743 2373 0 104 0 12 0 0 0 0 0 0 0 0 +1239290482 2374 0 104 0 12 0 0 0 0 0 0 0 0 +1239290698 2375 0 104 0 12 0 0 0 0 0 0 0 0 +1239298880 2387 0 104 0 12 0 0 0 0 0 0 0 0 +1239299543 2390 0 104 0 12 0 0 0 0 0 0 0 0 +1239300331 2400 0 104 0 12 0 0 0 0 0 0 0 0 +1239300727 2404 0 104 0 12 0 0 0 0 0 0 0 0 +1239300871 2405 0 104 0 12 0 0 0 0 0 0 0 0 +1248188957 2406 0 104 0 12 0 0 0 0 0 0 0 0 +1248189801 2410 0 104 0 12 0 0 0 0 0 0 0 0 +1254342561 2410 0 104 0 12 1 0 0 0 0 0 0 0 +1254343444 2410 0 104 0 12 15 0 0 0 0 0 0 0 +1254346692 2411 0 104 0 12 15 0 0 0 0 0 0 0 +1254346972 2412 0 104 0 12 15 0 0 0 0 0 0 0 +1254348263 2450 0 104 0 12 15 0 0 0 0 0 0 0 +1254358206 2453 0 104 0 12 15 0 0 0 0 0 0 0 +1254364946 2505 0 104 0 12 15 0 0 0 0 0 0 0 +1254371142 2510 0 104 0 12 15 0 0 0 0 0 0 0 +1271039403 2515 0 104 0 12 15 0 1 0 0 0 0 0 +1306791939 2515 0 104 2 12 15 0 1 0 0 0 0 0 +1306797559 2515 0 104 76 12 15 0 1 0 0 0 6 0 +1307412216 2516 0 104 76 12 15 0 1 0 0 0 6 0 +1307412794 2516 0 104 76 12 15 0 1 0 0 0 6 0 +1307418239 2538 0 104 76 12 15 0 1 0 0 0 6 0 +1307419267 2541 0 104 76 12 15 0 1 0 0 0 6 0 +1307419300 2542 0 104 76 12 15 0 1 0 0 0 6 0 +1307419978 2543 0 104 76 12 15 0 1 0 0 0 6 0 +1307457471 2576 0 104 76 12 15 0 1 0 0 0 6 0 +1308112368 2576 0 104 179 12 15 0 1 0 0 0 6 0 +1312642289 2577 0 104 179 12 15 0 1 0 0 0 6 0 +1312645919 2600 0 104 179 12 15 0 1 0 0 0 6 0 +1312645982 2602 0 104 179 12 15 0 1 0 0 0 6 0 +1312646171 2610 0 104 179 12 15 0 1 0 0 0 6 0 +1312646665 2614 0 104 179 12 15 0 1 0 0 0 6 0 +1312647991 2645 0 104 179 12 15 0 1 0 0 0 6 0 +1312653929 2673 0 104 179 12 15 0 1 0 0 0 6 0 +1312654552 2674 0 104 179 12 15 0 1 0 0 0 6 5 +1312657403 2676 0 104 179 12 15 0 1 0 0 0 6 5 +1312657888 2685 0 104 179 12 15 0 1 0 0 0 6 5 +1312658170 2687 0 104 179 12 15 0 1 0 0 0 6 5 +1312661168 2690 0 104 179 12 15 0 1 0 0 0 6 5 +1312662135 2702 0 104 179 12 15 0 1 0 0 0 6 5 +1312663075 2716 0 104 179 12 15 0 1 0 0 0 6 5 +1312664002 2722 0 104 179 12 15 0 1 0 0 0 6 5 +1312664099 2729 0 104 179 12 15 0 1 0 0 0 6 5 +1312666119 2739 0 104 179 12 15 0 1 0 0 0 6 5 +1312732292 2786 0 104 179 12 15 0 1 0 0 0 6 5 +1312732338 2788 0 104 179 12 15 0 1 0 0 0 6 5 +1312734492 2789 0 104 179 12 15 0 1 0 0 0 6 5 +1312734977 2853 0 104 179 12 15 0 1 0 0 0 6 5 +1312751679 2854 0 104 179 12 15 0 1 0 0 0 6 5 +1312751719 2862 0 104 179 12 15 0 1 0 0 0 6 5 +1312751841 2869 0 104 179 12 15 0 1 0 0 0 6 5 +1312757605 2869 0 104 179 12 15 0 1 0 0 0 6 5 +1312766857 2920 0 104 179 12 15 0 1 0 0 0 6 5 +1312807833 2928 0 104 179 12 15 0 1 0 0 0 6 5 +1312808263 3046 0 104 179 12 15 0 1 0 0 0 6 5 +1312826746 3062 0 104 179 12 15 0 1 0 0 0 6 5 +1312830725 3094 0 104 179 12 15 0 1 0 0 0 6 5 +1312831836 3095 0 104 179 12 15 0 1 0 0 0 6 5 +1312834654 3120 0 104 179 12 15 0 1 0 0 0 6 5 +1312834709 3122 0 104 179 12 15 0 1 0 0 0 6 5 +1312844962 3127 0 104 179 12 15 0 1 0 0 0 6 5 +1312851847 3130 0 104 179 12 15 0 1 0 0 0 6 5 +1312852327 3131 0 104 179 12 15 0 1 0 0 0 6 5 +1312862785 3183 0 104 179 12 15 0 1 0 0 0 6 5 +1312913164 3185 0 104 179 12 15 0 1 0 0 0 6 5 +1312913626 3189 0 104 179 12 15 0 1 0 0 0 6 5 +1312914088 3192 0 104 179 12 15 0 1 0 0 0 6 5 +1312918089 3200 0 104 179 12 15 0 1 0 0 0 6 5 +1312919367 3216 0 104 179 12 15 0 1 0 0 0 6 5 +1312919382 3221 0 104 179 12 15 0 1 0 0 0 6 5 +1312920150 3237 0 104 179 12 15 0 1 0 0 0 6 5 +1312929706 3241 0 104 179 12 15 0 1 0 0 0 6 5 +1312931651 3243 0 104 179 12 15 0 1 0 0 0 6 5 +1313026029 3251 0 104 179 12 15 0 1 0 0 0 6 5 +1313034526 3252 0 104 179 12 15 0 1 0 0 0 6 5 +1313067588 3254 0 104 179 12 15 0 1 0 0 0 6 5 +1313067766 3272 0 104 179 12 15 0 1 0 0 0 6 5 +1313083476 3313 0 104 179 12 15 0 1 0 0 0 6 5 +1313084482 3313 0 104 179 12 15 0 1 0 0 0 6 5 +1313101751 3314 0 104 179 12 15 0 1 0 0 0 6 5 +1313106763 3316 0 104 179 12 15 0 1 0 0 0 6 5 +1313111815 3329 0 104 179 12 15 0 1 0 0 0 6 5 +1313119524 3331 0 104 179 12 15 0 1 0 0 0 6 5 +1313123113 3345 0 104 179 12 15 0 1 0 0 0 6 5 +1313125042 3352 0 104 179 12 15 0 1 0 0 0 6 5 +1313158964 3362 0 104 179 12 15 0 1 0 0 0 6 5 +1313273110 3362 0 104 179 12 15 0 1 0 0 0 6 5 +1313340981 3379 0 104 179 12 15 0 1 0 0 0 6 5 +1313341319 3382 0 104 179 12 15 0 1 0 0 0 6 5 +1313343051 3385 0 104 179 12 15 0 1 0 0 0 6 5 +1313344822 3394 0 104 179 12 15 0 1 0 0 0 6 5 +1313461663 3395 0 104 179 12 15 0 1 0 0 0 6 5 +1314023795 3398 0 104 179 12 15 0 1 0 0 0 6 5 +1314023923 3403 0 104 179 12 15 0 1 0 0 0 6 5 +1314137805 3403 0 104 179 12 15 0 1 14 0 0 6 5 +1315878602 3415 0 104 179 12 15 0 1 14 0 0 6 5 +1315879047 3417 0 104 179 12 15 0 1 14 0 0 6 5 +1315879327 3421 0 104 179 12 15 0 1 14 0 0 6 5 +1315886220 3422 0 104 179 12 15 0 1 14 0 0 6 5 +1315886355 3442 0 104 179 12 15 0 1 14 0 0 6 5 +1315886409 3459 0 104 179 12 15 0 1 14 0 0 6 5 +1315888306 3462 0 104 179 12 15 0 1 14 0 0 6 5 +1315888344 3465 0 104 179 12 15 0 1 14 0 0 6 5 +1317327124 3465 0 104 179 12 15 6 1 14 0 0 6 5 +1317331830 3467 0 104 179 12 15 6 1 14 0 0 6 5 +1317338896 3467 0 104 179 12 15 22 1 14 0 0 6 5 +1317342088 3470 0 104 179 12 15 22 1 14 0 0 6 5 +1317342438 3473 0 104 179 12 15 22 1 14 0 0 6 5 +1317342551 3474 0 104 179 12 15 22 1 14 0 0 6 5 +1317343135 3486 0 104 179 12 15 22 1 14 0 0 6 5 +1317344669 3500 0 104 179 12 15 22 1 14 0 0 6 5 +1317347589 3503 0 104 179 12 15 22 1 14 0 0 6 5 +1317353819 3553 0 104 179 12 15 22 1 14 0 0 6 5 +1319137177 3555 0 104 179 12 15 22 1 14 0 0 6 5 +1321814501 3580 0 104 179 12 15 22 1 14 0 0 6 5 +1321814752 3593 0 104 179 12 15 22 1 14 0 0 6 5 +1321815857 3593 0 104 179 12 15 22 1 14 0 150 6 5 +1321818081 3610 0 104 179 12 15 22 1 14 0 150 6 5 +1321922844 3611 0 104 179 12 15 22 1 14 4 150 6 5 +1323181582 3611 19 104 179 12 15 22 1 14 4 150 6 5 +1323190499 3611 50 104 179 12 15 22 1 14 4 150 6 5 +1323258630 3611 69 104 179 12 15 22 1 14 4 150 6 5 +1323259092 3611 72 104 179 12 15 22 1 14 4 150 6 5 +1323264265 3611 96 104 179 12 15 22 1 14 4 150 6 5 +1323272331 3611 164 104 179 12 15 22 1 14 4 150 6 5 +1323272873 3611 169 104 179 12 15 22 1 14 4 150 6 5 +1323339342 3611 214 104 179 12 15 22 1 14 4 150 6 5 +1323339777 3611 228 104 179 12 15 22 1 14 4 150 6 5 +1323341084 3611 233 104 179 12 15 22 1 14 4 150 6 5 +1323342243 3611 234 104 179 12 15 22 1 14 4 150 6 5 +1323343908 3611 255 104 179 12 15 22 1 14 4 150 6 5 diff --git a/stats/lines_of_code_by_author.plot b/stats/lines_of_code_by_author.plot new file mode 100644 index 00000000..cbecc6d6 --- /dev/null +++ b/stats/lines_of_code_by_author.plot @@ -0,0 +1,14 @@ +set terminal png transparent size 640,240 +set size 1.0,1.0 + +set terminal png transparent size 640,480 +set output 'lines_of_code_by_author.png' +set key left top +set xdata time +set timefmt "%s" +set format x "%Y-%m-%d" +set grid y +set ylabel "Lines" +set xtics rotate +set bmargin 6 +plot 'lines_of_code_by_author.dat' using 1:2 title "Jason Blevins" w lines, 'lines_of_code_by_author.dat' using 1:3 title "Matthias Ihrke" w lines, 'lines_of_code_by_author.dat' using 1:4 title "intrigeri" w lines, 'lines_of_code_by_author.dat' using 1:5 title "Eric Merritt" w lines, 'lines_of_code_by_author.dat' using 1:6 title "Ankit Solanki" w lines, 'lines_of_code_by_author.dat' using 1:7 title "Peter Williams" w lines, 'lines_of_code_by_author.dat' using 1:8 title "Christopher J. Madsen" w lines, 'lines_of_code_by_author.dat' using 1:9 title "Tim Visher" w lines, 'lines_of_code_by_author.dat' using 1:10 title "Scott Pfister" w lines, 'lines_of_code_by_author.dat' using 1:11 title "Kevin Porter" w lines, 'lines_of_code_by_author.dat' using 1:12 title "Joost Kremers" w lines, 'lines_of_code_by_author.dat' using 1:13 title "George Ogata" w lines, 'lines_of_code_by_author.dat' using 1:14 title "Edward O'Connor" w lines diff --git a/stats/lines_of_code_by_author.png b/stats/lines_of_code_by_author.png new file mode 100644 index 0000000000000000000000000000000000000000..37e4a88feeb7f3620c1b579c73332c5bd2d8260c GIT binary patch literal 8884 zcmbt)cUY6%vhSM!(xeFp(ggvLrl>SULX%Dq1QbG%Dn$qg2uKNCkZuVWs!{}`C^ghT z6r^|QO?nL?A%H+`z;B;(_IdXG<32aZldM^5<~K8|W!9`WN?%W%j)sE<0025o4OIgG z03!eZG($y3ssS^I{U8yl`a1X3h(uxr0Pq5UA^=PSKo9^ll0J=%ii(OE85z91yq1=h z)6>%p4Goz@K7S&l3sc%eY|5WKoAH3VMRn( zVNQw=76c3F0~k3=Cg?*ZGbdjI1Dhe6#2g?K!H36BR7cR(S2=Gj#;m;cJ3x34)qpJo zf*7PvWO)U2_Yncon;6->1^`_EfVgl04gfC!fGF|Og#RT!KnwzGNfbaF21+(JiIq*8 zlOZ!i;+D}?(a2)LX2O<~6v@Gbg@w+}P7DT9R#ujhk`fdYWN&Y;tE+qc`gINt4pN6e zW_pQ4Am_@JAmSj&8wlb=$5kr?20;W65F&<8$#M4kcK`zcfXz(|Ngt{HXy^2nOi<4@@Dsk zF-lttR%{|S2BJ5?hFa%KfEAR{VNF=1J<#fonoVe!BJ_t z2KG6ul{9>^)@vHLD(NOP-X+p;1vF;u{R)HmFpK{B=zX&7vwbW1mx~YUcVpQn%_`*k zZd$a~9#-b4WV%zJt;s&kT)fSZuFZAnL-5_p>I3GEkqqIcaI(=RCirVhs6m`3`ORj} zZ+CCUFgBk6UYz$WOMCmuRe&MXTL0abGc=EeO~pqHi@42AA~8*#J=G-D&KCLe2S=yU&f=NZGJE6S2}7yQSt1k7rI#FVzctKoj7*StKn_fQP z!hWVUTGU>K`s}GQQqjH-x)WEG^>#<|Lo?PW%boi|Y?IA?kIwt;`^f`mz@8{_4j#Im zOL6CgTYr{5-iuJ@l9e+?s9?2azh1Q8>1T~36|293Xs|gXr~ku`XzRt!BV0A_ix*-W zpDG^)cepN6A{7kH5M!5bdKE&96?z!0=&RRL#=xm7jIz7xdJpN-J#_JQ!x>lGBT z`6`)}unQ&)-X{*kbwc(*P?cNSRJzV zDUV==YcL-*^D^eSFGXG1UBPgJF|*hrCHu^p&qb4CQ^cy6LP>fP>^WhheX5{rzZ56b zbIOw+D3`41`yKL0G)Vk^;8YCp_N(PS-5>*lZwyt1`bK|8Z`;URT#T0ZIayUmQP>{j zIrjCjUL7$z$&Pmr1TG(9Xjhf=H#xoqx?A_hyW$0~((Z=2-gFMvbe^i$7|LTXTf2=P zO4B|VlQmK!aTqdz3Z5sNiI5B@+-D_czfY2F2yFIWulI^6;GYVp%})l5Bx7)6MC&g! zrRK$5x9kkvCMcj0hX~{so&|XEp6@(GeX**%aJe!uvr#10Qz!P7M!#;!$H)WuVqnoBbZejLN4Hf=E)Cjl$60&WhgxV@1RnjA5@@ABJ@l(OR%3r>MlJ$)d z+ubT@jZ0}r;?dLbM-QENKno&!QIl7#iQMGu1_lTZs{$i?or)X% ze1`+K-s5;0Ux&u@Y#xcgNqE1a~L*{?aL2YQQ*aJx$F#YwQwsdL@D=`eveWgFkNm z_fkJ;iOO~hgK7kj^j6S;C{{WSv1yzZ--h&*+x@_bdf5Hihn^Y$x2N zhz}i_JoU6fym!c}gF6~#&b7M#01qw(KoNrsA2Y@W@Ay-}$&dj}f^mf@jk};rRHf1# z*LtdQ0yr71p3DOiY>EISD5L;_$h^YH_mPI2ssIeK2&IxLPy;I@S!duFIw{C~=pI>J z1GN~gyLIeO4nmiDA#kjN8$8Me8;tQbSjRnixdE+z9eQ9>CR6?OvyzW?`lLlJQ0Du~ zL}a(>__+->&(OEqf$0JWWDzEeshFI~**D7>nLfa!(ebKd#9_NggztRS>FvPjn@9$h@Za2N%AwiV~XVG8747b@8>vLq;*hF5K#{ilKNI-@TwH-7G!=RyM#l6R?aGBpZmI(5`vA1HM5S^bxfkN zJ)LNAtkQ7w#5z@&)B$17*mQ71Yc;&RMHA}>I4`!W(#@ktvVZR=11MtZzWL`*i1;=J zs;Pgdx{nN92{d4*j1W7g?FaVDOY<+zxXtom9=INI+O|z+d~;;ZP8ELYGAGJA-7b(X z3X!L1wWpj_G#VCb#{Sll56nF3g+7_VMgmdqz&8xN(AN+n2FJ49*Iej(tZ{S~7+Q|r zFa-S4S>*wV2)BzP9RbF}IJX7bj{$U-%ajGv zLeM%xf`&Bt*eYEF6k9FC+R%u-drSA=lC2cv(URTzJQ_Vc-EId@jubuEmM^u~%&*z> zVSZoN=@bI>vQNW*#RXIa7Gpo%?mV&`c3zw!267Opw*6(fK)4aQ5B!F|B}T~iwr^_< z`(^Iud2UzP{RdhY2`hsm}se@7c56V8H0$#u$9ylTpGGv7P^wHp4{;y59r@RG|C z^#Z+CyV(Qfbd?#BcODR8A&3=xN#1#XPNvvMeXUQqI6e#=<4npy0IGZZg{jAzu5@%K z4WkChG(5Cf2wmkmd38-e>4((9RDXB)4Ao*e+}m2rZebnpao&)VNCL_K`ahO}m>kF~ElUM0lsB(NQt&A^zB+Ojs$kw8U|j*gugYAQQ$a1k!Y)Lcrb2TFXLIjV4vEx;wKJqZjYzB zx(nMGKmgDmxTFbZ+>y{)eXw8F^GB`^et^q!5A_k-Sxt@#U0CK|py!9%s|ikAKr()+ z_+!iL@=XtBYn}Zpz)rbn^Ou7a72_ZUnA|8BP%`3!=(AEW-v1ZbppSUf-p<+q@q>@^ znwXXF={Rh&i+{IkHU9aBe56oSsh^8zjBs1kWX){L9#TS>U7^wU#t-P2$KFhu?_rQl z$r@)s)#xMSXIDm45HDwx9+HdAWrdXhs9pT2YAARpWzlD)r zYowC=5HJzJOO{nFYuI= zim3E*h@OvmJhI2_tu}TZIsSQ;5`3wzM}GQU#SAobVnz&>R@jx2z0VMu2(Z55erGb@ zlZ2C-G`IJA@}6yqP{SknLF7m+CJ@cd8F(4;glZ@DZ0s+$wp+}Gc~x>|-v(xcAbzWN zlU@4u^H#Sh9$z1DX0D&8bZ=hst4r;6%I7`wxFt>M^NxGaDD41O@jXxfS8Nfv-SDSS zPckXy%m%>+#b@xNUB-)Vi(|2h6s=dT>-iidB8Sr78av}gwq(FAku9CK=N@itoOzPQ zi3(yoR5WztH#vGEHx7SDF1z1TA7@StDt1-=`9?(eu$!sWT(`5-20Kj!M}OehNh+JE z70AqgT873dN~?rE6^H~(4h)~5f(nYC$mpnUXjk}EEZ@vDf8H9=$jXO)zj1T%G6#{P zcMv@~;SLIfeb|kGDdLkH3yK{BkX15Ix87yMsd%YYrHwFUx;Jxv2v{ctr}Z{i%jpME zLrdKuxXlpVG*p-QWz6`~dVuUG-w+;^U(=jbT>->0PqA+dA0dvpTs^@!X_fcY^Vtl+SsR20+N8`vJ1PAIH!$ zhtnwYSBh2xq@d%)9JPL2D>{|HAz1XohpgzxvS@33V*TAA2t_*VsB=LPYoxZElD^Zn z(U8D5g&PZFlz*)|bjAqz80j}3wj`tdEl0Fj$J;8Phn81T0`2LlPc{3q%*e{@q}CjF zmJvlkn3XW_=oqr z)tW-6%fHtaQ<7bD({%LlqDhGq>-MDD(k2mdKL_atb`vX`-6v?Nw!}r~ByqnVNB7tK zB{jh=A5}zK=b{*AkV&32t|CkHU6{&+ZKF~PCverG^2*U)6>pdz2aiOiydjQBf_Ip zR2GBxD(=D%+lRe%7X1DrNuvxll*l8jAbl*sGqSU$f@|2Kk+?nAD%mI*oiq}pVY`Yq z`Q`Ne>B9bYefixNj5)-;@M`CM_kXHfs$t-_AW8kS$<5Pt3p9Wtn3VMQ%1 zETKb><@0({_}pd8Al=gvPwSZbjp)>Z9i>B#UYe^K9SqQ8dQI-Wa)ROxncsE6Z%JR= zwRkp(>}`><89U{vv+YGrtrV zek|FXWV-rb5O;Lq5-!2E)$}+!yc_)o^hQAN?YrA%N!!j@jo0=aREH6gk|hntN5_M* zU4DHH&m8w>+omr%KGQk6Y|REY8`RPK+;+jE>$T@KW!>W|@qybC)%*3ow^!G&RnJ)B zsjupg91TppT^oAtF8ZmFOTH>s-o2Hgl}cp-Sxw!6d|yLb)$~^i_S}U?VMV>SlUWW0 z=+D5gm8=YJ6n7ssvF%Bxj;3bbOh&4Rh;S<2B%ty`(sjYMxMi}!(G(|Ff99Xqhd~74 z3W0;`uDRLc&#;#>8$V@xs|K}@Od`ZRrr1Fuv*VUk)FCp4{Y8;K&oWwB7;qe88NWk8 zpg<8#Iz?XT{H53r087t}PEs%(f5~-5aMb>>^d>mG zV{`Ugq|%BbIz!R_%&t!UXGsh_%$orzdsf-|x!(3U{pTx_u(MB8iVH@Q*L8y4%qLyW}LcpZIaf#&%(aPsl)6&$mp&8A^%51*&Bjt!=|_+0*5F=9i4Z z1DpCCzvdk!l#U3+vC9#Dm!o&T^1DB2-k8zL)cH>xpj?%O0@T;)c2+}2WedJP#GR?w zFfUz#;l(eIrs?d-x#jAMyP~~EU8IwA!1m>G{7Cr4txevod7{9ZwIH{fr~AO!_kA>; zCcfK=VWZvON<}ffwI>?7*JDd$DP*=U|M+8ZkjwU}G`?Yj22P(o9VSc^XSCw-xW-Vn zlw(oPB z-*5gb0aJfN^&8|5s3hom1nJ5CF9pk6aizyHU{CX~nWg;6t%xyqf5uEI@i$2vAaE}Qxf~9Wn{}i zrkIkYf^$m$7X553)!UqDN0IMdB_?UNUIoL@Ys0R87UoHugxJbiR2NA5FXrBz0=t!p z_K2GEnTCw$HHE5r*y@VcPGg_+p+K8mW6aoT1V?4yQ~#I*2JLtiaGW}U4;~MEKiovT zJHDlUJC4Pmc9yPUj#23xmQ9=jy@@X{4j%i>RlPA;cyt#jgQDFNcq3MuNq=ftT$+GY zS+|#)@lBe+^d-y_oW+Jrx>>0@<$LIOKXsLf#i$BZVlw7XuwvC8tTvlLW##LqbK` zUf-Ia;#_@s)7df3fntyO+HH@fqKd;Jk+~SoSE<)fUD1EXj+hxy&UmQH-PRmK7~q@k zX|9^3TtIf1RlU7UU7psqI=;sXy!Xa(ItX`-L|csflJ5X-6}xG>At?26xgplp6cTTk`^_aiz(y^GZHu=3Z@M*t&iS8YR9 zzNdCwY!?+n*a@uA(+|8?XjX_D(-cphUb?fj|NP2BZzXOgnYt`*t`Bl38u{)%b9nNv zDem#+&GST|uSGfS1kwqP5;5~d(y8^DFN0OPv+Ox55{LO@__25+XG>9zw0wtD9z%TD&g4lX_eUJ`jz5me_0RQKW0_ydEL{S z+rp*>4CikcF=W(4pqej{mQJdf^KK2@kkI<6-s-Q9d}Pi^@wOMayA+i~oj{K{p`X%qy?&<$EJ0C{*KNa?*++A}0#)`bfA#OK^ zCxs6g;2rKslFT!+P6YC0Iot|1a5*m@SH0dk-elK0sfsvGkd#a93R^~gC4~DI0So$L z6I6bX`-(#HIzOa{Qap$5H@z287K4!=92N*iefM3S=~5Z)w?NrX>>f0|J& zyZr8OcaxJBC$`ySRdhBgGu-*L$-;F&7|w@FPx~E0uduDtNca~5lUYSZq-}-Y!#O1= z%Ic;yey`+fEj9JgA7_wj0|kx5^AF`f{mWV96H3=lFakuVw`WiDSB|AWe2| z_iJe_RI^-zSMH9OE?Q<$TF%Mgx+v>+7GDtyV)kUcrb*KW-w`^}5 zBL*2s`++Zq#q*o_Y*meFamzO)NfmMw>>aT^GTO&9%Oxx%0>wQqWJt;Z<$M>xj35wO zCf|8l9Z8!D1i@rcO)ho@Ww_;6P+TKfvdZM&s!d9VxISkNnX{DZrDFzx#nkmcQmh2_#eqyyd(V!UBGjuSIfqk$Pb?Z=(lx1 z%DPpviQur~O)N77)zRb&N*cz4TIL>RzMW^HJi?G=oW*TjMDKK$Pco3zSo=#1q#RT= zcke`?^%XfuAc2yaBp}ekL=w>E5g-Yq-&P|D=$@RRdH6|m@og0n{lqtn1n_5@oCF}V z2s#1KF$RsP2Fv{>BS8w402>AkXY+ff>qP`G{&MfL8c~LK5u;z`Rf3)gmjIMX!_U#V zt0Bj(P-Bqy#$cR*M~b~x$nhrh*fsfchagE0Xr9dq_V+4TZC$1j4N14g)#WD)8^gJ@6?xV{oh!9<79!;W*ZT@v1}M zf|>_^RFq#b@>Pf307+LVfWf(^_*SgP;IA2)&cutBj~P5pj&ql`O*Vk)1aAfyo{AmH zNCld@Fkbj9p#U6{rx6a|bewptbU~Y!q9OoXXBv6+DzzXs|90bN8rmW~ei7?s$t?2b)sV7O{%#M7^8IE$Ry!BhMujKgA=X3voqFuSbG2wL7N4=z% z9js9j?kK26x~-CKQ}&C9V4h9aAWO9P7fN%O)a?2E996;i{fi`PB_a!tP^a!k31+O3 zT|M>Lg-7e>0Ttihu4t7)-y!charxU~ljlE|sV`#zG|%SW9!w2ETWm?iu3dZd8BIO= zyrbuoH=C1mOWeRy+>`mY>GL)C(dSci#+ilF@fM@n+CCk!^PC_sfMH8I);UVa+gf_G zjA~%U{<7#{R=eNhgxq@kGlgI6;DxxF9@a=*xj!Rc@fS;=V)@2ZhNBw{>ffHf*N}m3 zh>caE6ic30Y9!v1ijM)WQ}*c!i=q>D99E&X!xbe$Ho{%z_aAHLv1Rq)(I38~M6>*& z_L*n4sy%ck?6jJjA@bWmN!pj!da~2Q^gL*DShL7t{Kw$(2QDstiTrx`%qdL$16-Zk zP*;PV&%2u|R7q$}R>NOHk2|L*o!u?z^ zX;CFX4M2w{R;=o7YYB}Wo5(obt9avOvhBe~H^>3tO4HDB*G&mB!xGHoS!x(BVwM9L znlHU61SyUOJYqYV?sGn4<{OU8OldK)O$c!m^tBr6h0R@&(r7AAx(!ztx)xjbosVLG zqIHql<;R^)lePuQftLZr?g~O; z(kr9M-p}BtBd@97R*pqFpR6O@Xp8^1SponRnvLfb-0`N_R0CSc5k@i!<56Pf!rOkV zf42d5&7QaEIcusGCH#M94oP!=nP=MfHKV^0--Hy*{N5Hb`_@OZJTj#oC>_am(C+E? z;x92t{5!=^J1#2^YxL&vSN=X4VErmxTtRy{s?Oq{9ZI9;e?8Sux<$l8-R0qZeOo8X OT2oC=wOH9I?X|OU1ppL;U;%Cea{swfV;KNI1LuAFZDAO0X=$;ru()yK27y5E@$nfN8ftEC zX2L45Fr|yb;=){JU6%kBbg>Izm;=KQ%;CUH2F#?vObQH9AP9hHFht|5Ly9ycja-0x zkbbr^Wso_T1N8C}`0#Cj38~D_zpYOZdB6@5jAwkzjrj`w2-^Yz2!i9CVd+ai_j4FP zPWXKHCjjUI07zb*0RZU$0PCe6P)k<>;CSE|G6Uc~po-6j>$v>EgkcyKxC`#~k7x6< z1qKF)oUyU7&dyE_hf`Bilb@d-A0HnO5a8h8U}$KlprC-rrwsSNFmPL2J09jCYADdU z4>AqnKrjGNV2+9AKRr2Q{ojuM zLf?p!N~1aipJk^$Y_}~VaWPS3mMV8&oZl;x5I)kl#1604$*6KYj$`4Yz;AQqaB$r4 zF;P0M@S7QXAH2(t9BiK#Fe=TkhYQUQDw--x*H62!2ld}% zuavV>%gOt7B*=U6u2Zi74Pt%(DnP&%DSeBr1wg|LpDWe%_z)B-V6y35gL(G~?kQpp zU+yw&(X&}jO{-a-=&I)b<`srJ0ipuzHiX8~jD7Qy`~zT~_|wm!Z>n+CkTSWAp_uSG zr5a(+JzWU@yxN~?0)RCcS;eM1|B}Ev1 z0E4`$5?XBw6$BW3K*}~D%OYA=`guXnk12=j?jeE6H)?gQAnJyBC`XI6Z#m7ggLeB1 zWN^e)3w4*U-73TF;w>eSEh^esrS(%TVZAcjn%|~)O{S(9CMY`}{fBmUs+&k@kNDa} zS=C@0ZwQhPSgsr(E46zuj(`)dNBc;EP~qz~6m_?59a@{lSu~nQp{PqZZvZnXluWhF zDW{XUO32JOP48CY$l}dcwZEoVQZjGmWv}4v#w3w;HnuMwt<$acm2fU5Z8`SoyXnbM ztE4lyNNTVgnn(1;1Zk?i!^@n9)MP7$&wBo7w&;(zA$ww;xwYqgdR*nF%G|x`&bXhU z5N?Ka0Ge0YBAm5)taJW@OBk-yB~E5nN>HVyxV;tPS7*63j$`yeO$C+Kze|TdCJ~G1 zHg-!*JF`vO@%=mMFSsJCG^-)2-9!{&9C~-QWuJj9&M%*8IXn+EZ>$CjPs6fW% zr#Li^RiEWv{p%@9ide$M49XvO5AJRirceb9$wQ($3y;L`ZHLF;cV$aqYKXOMRL=Dq zD}z^nQKuEEZC>eVTAM$@6glfS-kLl>#+5qXwBDB79p(E%xt9}1K}!>#7dZ`(ix-#* zCvDW397Rpl!5QEAopjt5k`#!U68T|~-f^berd@Sdhm$$3cWrgJMw5P9Uu1>IxI!#&G;{+n>(T<4Td6Qux$*Mf3 z-vn2x`iU_V`w>2+F9Sy9O;2P;)?<@I8!lzrYt)IYv-h!I7fe`{1E|1Bv*E*(7z&8y z^-Mr)u?Oe2GZE{f9ZOYuJ@D2YQs3A2ME-DS^1hRtSe;fi9jQ14Yq8Kh?^KuDWgje$ z=Ba3RBS|HjriE(}kq-(jUAm^T95->^$l-$l3N>DKx9u0(nu5!W%_1OXUxZ-S9fml{ zM783=ChOX)QiRUxQ4MjILUtvT&<l>LOxP(3Pj&CcizgK$$X1vQxa})T; zVZD-iHVE@xjf@k%r`$rDzi=`01iI62?*6bT{GPZ8oMp&!k$C>o&|+vKqyettSr?pU z5uty7Akp&|cIFi7)cZb}s>b77huEv)Dol^_Q>aG4{A@^MXxrzJUJ?l2+u8O>uiPGQ|mZ$UxUWX^_DsLJGa zFu3)grxM5HP7(s!>^+tK{A(9n{MH+ibgMhr(Q)T|;3#z$TQ0JG2;x*nem)L8*ynWzlfobW>Nvu1?_+dVI zoB!i;(T^%5-5R(Rp?9w(%vjY4zuqHy_jXsT0$W>lgK1h z-_Nw{C%dv*_AC9XLPcXfaNTrG?U2s{NAGtL-mVe4d-(e5<%@hcraJ`Wl&F(OdKvNq+ED%%Y07LPg1NS7WkQas)2UateoiS)0mdi ztFej4=`Af!e%7TohG^k?cHXmmUvT8ATi0Rto}jHx0ps%b_Fs71zA^8RukEE|iJ_|t zFB>;;ThE+XO}cWNo}4t~I_bbRw(TuX@C`W`TXxM(-SKfBEvNbE-is@e!#Zx&P0BB< zEYAdKO)H~GfsG;0uQks(oXEVX$DJAZDuqh*`b8j)XU kG8D01IP9No^C!5sOwdM0_a!E0Ot0Ja+B(`)TG0~z1#nG8U;qFB literal 0 HcmV?d00001 diff --git a/stats/sortable.js b/stats/sortable.js new file mode 100644 index 00000000..89477324 --- /dev/null +++ b/stats/sortable.js @@ -0,0 +1,324 @@ +/* +Table sorting script by Joost de Valk, check it out at http://www.joostdevalk.nl/code/sortable-table/. +Based on a script from http://www.kryogenix.org/code/browser/sorttable/. +Distributed under the MIT license: http://www.kryogenix.org/code/browser/licence.html . + +Copyright (c) 1997-2007 Stuart Langridge, Joost de Valk. + +Version 1.5.7 +*/ + +/* You can change these values */ +var image_path = ""; +var image_up = "arrow-up.gif"; +var image_down = "arrow-down.gif"; +var image_none = "arrow-none.gif"; +var europeandate = true; +var alternate_row_colors = true; + +/* Don't change anything below this unless you know what you're doing */ +addEvent(window, "load", sortables_init); + +var SORT_COLUMN_INDEX; +var thead = false; + +function sortables_init() { + // Find all tables with class sortable and make them sortable + if (!document.getElementsByTagName) return; + tbls = document.getElementsByTagName("table"); + for (ti=0;ti 0) { + if (t.tHead && t.tHead.rows.length > 0) { + var firstRow = t.tHead.rows[t.tHead.rows.length-1]; + thead = true; + } else { + var firstRow = t.rows[0]; + } + } + if (!firstRow) return; + + // We have a first row: assume it's the header, and make its contents clickable links + for (var i=0;i'+txt+'  ↓'; + } + } + if (alternate_row_colors) { + alternate(t); + } +} + +function ts_getInnerText(el) { + if (typeof el == "string") return el; + if (typeof el == "undefined") { return el }; + if (el.innerText) return el.innerText; //Not needed but it is faster + var str = ""; + + var cs = el.childNodes; + var l = cs.length; + for (var i = 0; i < l; i++) { + switch (cs[i].nodeType) { + case 1: //ELEMENT_NODE + str += ts_getInnerText(cs[i]); + break; + case 3: //TEXT_NODE + str += cs[i].nodeValue; + break; + } + } + return str; +} + +function ts_resortTable(lnk, clid) { + var span; + for (var ci=0;ci'; + newRows.reverse(); + span.setAttribute('sortdir','up'); + } else { + ARROW = '  ↑'; + span.setAttribute('sortdir','down'); + } + // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones + // don't do sortbottom rows + for (i=0; i'; + } + } + } + span.innerHTML = ARROW; + alternate(t); +} + +function getParent(el, pTagName) { + if (el == null) { + return null; + } else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) { + return el; + } else { + return getParent(el.parentNode, pTagName); + } +} + +function sort_date(date) { + // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX + dt = "00000000"; + if (date.length == 11) { + mtstr = date.substr(3,3); + mtstr = mtstr.toLowerCase(); + switch(mtstr) { + case "jan": var mt = "01"; break; + case "feb": var mt = "02"; break; + case "mar": var mt = "03"; break; + case "apr": var mt = "04"; break; + case "may": var mt = "05"; break; + case "jun": var mt = "06"; break; + case "jul": var mt = "07"; break; + case "aug": var mt = "08"; break; + case "sep": var mt = "09"; break; + case "oct": var mt = "10"; break; + case "nov": var mt = "11"; break; + case "dec": var mt = "12"; break; + // default: var mt = "00"; + } + dt = date.substr(7,4)+mt+date.substr(0,2); + return dt; + } else if (date.length == 10) { + if (europeandate == false) { + dt = date.substr(6,4)+date.substr(0,2)+date.substr(3,2); + return dt; + } else { + dt = date.substr(6,4)+date.substr(3,2)+date.substr(0,2); + return dt; + } + } else if (date.length == 8) { + yr = date.substr(6,2); + if (parseInt(yr) < 50) { + yr = '20'+yr; + } else { + yr = '19'+yr; + } + if (europeandate == true) { + dt = yr+date.substr(3,2)+date.substr(0,2); + return dt; + } else { + dt = yr+date.substr(0,2)+date.substr(3,2); + return dt; + } + } + return dt; +} + +function ts_sort_date(a,b) { + dt1 = sort_date(ts_getInnerText(a.cells[SORT_COLUMN_INDEX])); + dt2 = sort_date(ts_getInnerText(b.cells[SORT_COLUMN_INDEX])); + + if (dt1==dt2) { + return 0; + } + if (dt1 + + + + GitStats - markdown-mode + + + + + +

Tags

+ +
Total tags
9
Average commits per tag
24.89
NameDateCommitsAuthors
v1.8.12011-08-148Jason Blevins (8)
v1.82011-08-121Jason Blevins (71), Eric Merritt (3), Tim Visher (1), George Ogata (1), Edward O'Connor (1)
v1.72009-10-014Jason Blevins (47), intrigeri (4), Ankit Solanki (3), Peter Williams (2)
v1.62008-06-0436Jason Blevins (36)
v1.52007-10-111Jason Blevins (1)
v1.42007-06-301Jason Blevins (1)
v1.32007-06-051Jason Blevins (1)
v1.22007-05-251Jason Blevins (1)
v1.12007-05-251Jason Blevins (1)
\ No newline at end of file diff --git a/test.el b/test.el new file mode 100644 index 00000000..3ebe74b0 --- /dev/null +++ b/test.el @@ -0,0 +1,4 @@ +(dired "/home/ihrke/work/researchwiki/*.mdwn") + +(setq ikiwiki-toplevel "/home/ihrke/work/researchwiki/") +(ikiwiki-browse-wiki) \ No newline at end of file diff --git a/test.el~ b/test.el~ new file mode 100644 index 00000000..03c687d2 --- /dev/null +++ b/test.el~ @@ -0,0 +1 @@ +(dired "/home/ihrke/work/researchwiki/*.mdwn") \ No newline at end of file diff --git a/test.mdwn b/test.mdwn new file mode 100644 index 00000000..472b4830 --- /dev/null +++ b/test.mdwn @@ -0,0 +1,24 @@ +## hallo ## + +[[hallo]] + +## [[hallo]] ## + +## [[test]] ## + +## [[test]] ## + +## [[test]] ## + +[[!map pages=*]] + + +(setq ikiwiki-setup-file "/home/ihrke/work/admin/conf/iki/researchwiki.setup") +(setq ikiwiki-toplevel "/home/ihrke/work/researchwiki/") +(setq ikiwiki-browse-extensions '("mdwn" "markdown")) +(setq ikiwiki-setup-file nil) + + +[[!bibtex key="test"]] + (mapconcat 'identity ikiwiki-browse-extensions "|") +(directory-files "." t (concat ".+\\(" (mapconcat 'identity '("mdwn" "text" "markdown") "\\|") "\\)$")) diff --git a/test.mdwn~ b/test.mdwn~ new file mode 100644 index 00000000..0dbfd5c3 --- /dev/null +++ b/test.mdwn~ @@ -0,0 +1,17 @@ + +## hallo ## + +[[hallo]] + +## [[hallo]] ## + +## [[test]] ## + + +## [[test]] ## + + +## [[test]] ## + + + From fed5375c4d792ccce507cefd2e63500163f23a1d Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Tue, 21 Feb 2012 20:09:26 +0100 Subject: [PATCH 19/22] index on ikiwiki-browser: 399c4b4 new browser for ikiwiki From c320086e6bf310bdb1663518eea40e6fc75d1425 Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Tue, 21 Feb 2012 20:33:20 +0100 Subject: [PATCH 20/22] browser-buffer name defcustom --- markdown-mode.el | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index 0532be4a..f75f52d5 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -570,6 +570,12 @@ This will not take effect until Emacs is restarted." :group 'ikiwiki :type 'list) +(defcustom ikiwiki-browser-buffer-name "*IkiwikiBrowser*" + "Name for the ikiwiki-browser buffer." + :group 'ikiwiki + :type 'string) + + ;;; Font lock ================================================================= (require 'font-lock) @@ -946,7 +952,7 @@ these are ikiwiki-directives.") (defvar markdown-mode-font-lock-keywords (append (if markdown-enable-math - markdown-mode-font-lock-keywords-latex)h + markdown-mode-font-lock-keywords-latex) markdown-mode-font-lock-keywords-basic) "Default highlighting expressions for Markdown mode.") @@ -2168,13 +2174,13 @@ pages in a directory tree for browsing." (defun ikiwiki-browser-open-page-at-point () "In the ikiwiki-browser, open the page under the cursor, if any." (interactive) - (let ( (page (replace-regexp-in-string - "[ \t]*" - "" - (thing-at-point 'line)) )) - (message "pagename=%s" page) - ) - ) + (if (string= (current-buffer) ikiwiki-browser-buffer-name) + (let ( (page (replace-regexp-in-string + "[ \t]*" + "" + (thing-at-point 'line)) )) + (message "pagename=%s" page) + ) )) (defun ikiwiki-browse-wiki (&optional browsepath) "Browse the structure of `ikiwiki-toplevel' directory. All @@ -2182,7 +2188,7 @@ files having an extension in `ikiwiki-browse-extensions' are displayed in the buffer." (interactive) (let* ( (path (if browsepath browsepath ikiwiki-toplevel)) - (browserbuf (get-buffer-create "*IkiwikiBrowser*")) + (browserbuf (get-buffer-create ikiwiki-browser-buffer-name )) ) (save-excursion (set-buffer browserbuf) From 3a4cd66e6ce54f7a94b90d673288882579b76527 Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Wed, 22 Feb 2012 13:22:14 +0100 Subject: [PATCH 21/22] ikiwiki browser opens file at enter --- markdown-mode.el | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/markdown-mode.el b/markdown-mode.el index f75f52d5..05bde4bd 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -2151,22 +2151,26 @@ with the extension removed and replaced with .html." (defun ikiwiki-browser-walk-tree-insert-pages ( path indent ) "Assuming you are in the browser-buffer, walk path and insert -pages in a directory tree for browsing." - (message "called with path: %s and indent= %i" path indent) +pages in a directory tree for browsing. + +Storing the full path of each file in the help-echo text-property. +" (let* ( (fileregexp (concat ".+\\.\\(" (mapconcat 'identity ikiwiki-browse-extensions "\\|") "\\\)$")) (files (directory-files path nil fileregexp))) (dolist (curf files) (let* ( (start (point)) (f (file-name-sans-extension curf)) - (fpath (concat (file-name-as-directory path) f)) + (fpath (concat (file-name-as-directory path) curf)) + (dpath (concat (file-name-as-directory path) f)) ) (insert (make-string indent 32)) ; space (insert (concat f "\n")) - (if (file-exists-p fpath) + (put-text-property start (point) 'help-echo fpath) + (if (file-exists-p dpath) (list (put-text-property start (point) 'face 'markdown-bold-face) - (ikiwiki-browser-walk-tree-insert-pages fpath (+ indent 3)) ) + (ikiwiki-browser-walk-tree-insert-pages dpath (+ indent 3)) ) (put-text-property start (point) 'face 'markdown-link-face) ) ))) ) @@ -2174,12 +2178,13 @@ pages in a directory tree for browsing." (defun ikiwiki-browser-open-page-at-point () "In the ikiwiki-browser, open the page under the cursor, if any." (interactive) - (if (string= (current-buffer) ikiwiki-browser-buffer-name) + (if (string= (buffer-name) ikiwiki-browser-buffer-name) (let ( (page (replace-regexp-in-string "[ \t]*" "" - (thing-at-point 'line)) )) - (message "pagename=%s" page) + (thing-at-point 'line)) ) + (hecho (get-text-property (point) 'help-echo))) + (find-file hecho) ) )) (defun ikiwiki-browse-wiki (&optional browsepath) From 1dcf0bf548d97c06baed030b3f411c94fbaac9a5 Mon Sep 17 00:00:00 2001 From: Matthias Ihrke Date: Wed, 22 Feb 2012 13:30:53 +0100 Subject: [PATCH 22/22] readme --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..17383156 --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +Emacs markdown-mode with ikiwiki functionality +=============================================== + +This fork implements [ikiwiki]-specific behaviour in markdown-mode. + +[ikiwiki]:http://ikiwiki.info + +It uses a minor-mode and specific functions. + +## Features ## + +* an emacs-browser for the ikiwiki +* correct handling of ikiwiki-directives +* previewing in web-browser + +## Usage + +* set the variables for your ikiwiki instance, e.g. + + (setq ikiwiki-setup-file "/home/ihrke/work/admin/conf/iki.setup") + (setq ikiwiki-toplevel "/home/ihrke/work/iki/") + (setq ikiwiki-browse-extensions '("mdwn" "markdown")) + +* run ikiwiki-mode when editing a markdown-file + +## Author + +Matthias Ihrke