summaryrefslogtreecommitdiff
path: root/qbank.el
diff options
context:
space:
mode:
Diffstat (limited to 'qbank.el')
-rw-r--r--qbank.el128
1 files changed, 0 insertions, 128 deletions
diff --git a/qbank.el b/qbank.el
deleted file mode 100644
index 0778503..0000000
--- a/qbank.el
+++ /dev/null
@@ -1,128 +0,0 @@
-;;; qbank.el --- Learning tool for GNU Emacs -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2023 Thanos Apollo
-
-;; Author: Thanos Apollo <[email protected]>
-;; Keywords: extensions
-;; URL: https://git.thanosapollo.org/qbank
-;; Version: 0.0.1
-
-;; Package-Requires: ((emacs "27.2") (compat "29.1.4.2"))
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Work in progress
-
-;;; Code:
-
-;; TODO: Create cloze question type & make it easily extensible for
-;; other types
-
-
-(require 'emacsql)
-(require 'cl-lib)
-(require 'animate)
-
-(cl-defun qbank--select (table values &optional (restrictions '1=1))
- "Select VALUES from TABLE, optionally with RESTRICTIONS."
- (emacsql-with-connection (db (emacsql-sqlite "test2.db"))
- (emacsql db `[:select ,values :from ,table :where ,restrictions])))
-
-(cl-defun qbank--create-table (table-name &optional values)
- "Create TABLE-NAME for VALUES."
- (emacsql-with-connection (db (emacsql-sqlite "test2.db"))
- (emacsql db `[:create-table ,table-name ,values])))
-
-(cl-defun qbank--insert-into (table-name values)
- "Insert VALUES to TABLE-NAME."
- (emacsql-with-connection (db (emacsql-sqlite "test2.db"))
- (emacsql db `[:insert :into ,table-name :values ,values])))
-
-(defun qbank--get-question (id)
- "Get question row for question ID."
- (caar (qbank--select 'qbank1 'question `(= question_id ,id))))
-
-(defun qbank--get-correct-answer (id)
- "Get correct answer for question ID."
- (caar (qbank--select 'qbank1 'answer `(= question_id ,id))))
-
-(defun qbank--get-mcanswers (id)
- "Get multiple choices for question ID."
- (caar (qbank--select 'qbank1 'mchoices `(= question_id ,id))))
-
-(defun qbank--display-question (id)
- "Display question for question ID."
- (let ((question (qbank--get-question id)))
- ;; Animate.el is used only for testing purposes.
- (animate-string question 5)))
-
-(defun qbank--mcanswers-choice (id)
- "Display multiple choice answers for question ID."
- (let ((mcanswers (qbank--get-mcanswers id)))
- (completing-read "Answer: " mcanswers)))
-
-(defun qbank--input-mcanswers ()
- "Prompt user for multiple choice answers."
- (let ((mcqs nil))
- (while (not (equal (car mcqs) "q"))
- (add-to-list 'mcqs (read-string "Choices (q for quit): ")))
- (when (equal (car mcqs) "q")
- (pop mcqs))
- (reverse mcqs)))
-
-(cl-defun qbank-create-mcq-question (&key question choices correct-answer)
- "Create a QUESTION with a list of multiple CHOICES and one CORRECT-ANSWER.
-
-This function can be used interactively, or if you prefer you may also
-use it like this:
- (qbank-create-mcq-question
- :question \"Which one is the greatest editor?\"
- :choices (list \"Emacs\" \"Vim\" \"VSCode\" \"Ed\")
- :correct-answer 1)"
- (interactive
- (list :question (read-string "Question: ")
- :choices (qbank-input-questions)
- :correct-answer (string-to-number (read-string "Which is the correct answer?"))))
- (qbank--insert-into 'qbank1 `([nil ,question ,choices ,correct-answer])))
-
-(defun qbank-create-question (type)
- "Create question as TYPE."
- (interactive (list (completing-read "Type: " '(MCQ Cloze Basic))))
- (pcase type
- ("MCQ" (call-interactively 'qbank-create-mcq-question))
- ("Cloze" (message "Not ready yet."))
- ("Basic" (message "Not ready yet."))
- (_ (message "No such type."))))
-
-;; Fix: review for seperate question types.
-(defun qbank-review (id)
- "Start review for question ID."
- (let ((canswer (qbank--get-correct-answer id))
- (choices (qbank--get-mcanswers id))
- (user-choice (qbank--mcanswers-choice id)))
- (if (equal (nth (- canswer 1) choices) user-choice)
- (message "Correct!")
- (message "False"))))
-
-(defun qbank-test-buffer ()
- "Create testing buffer."
- (interactive)
- (with-current-buffer
- (switch-to-buffer (get-buffer-create "*qbank*"))
- (qbank--display-question 13)
- (qbank-review 13)))
-
-;;; qbank.el ends here