From: Andreas Gerler Date: Tue, 22 Jan 2019 15:48:10 +0000 (+0100) Subject: Update org-chef. X-Git-Url: http://git.bundesbrandschatzamt.de/?a=commitdiff_plain;h=cbf2b3563b8944a0e0b688d3e9f0d9efbe742104;p=emacsconfig.git Update org-chef. Signed-off-by: Andreas Gerler --- diff --git a/elpa/org-chef-20181105.2035/org-chef-all-recipes.el b/elpa/org-chef-20181105.2035/org-chef-all-recipes.el deleted file mode 100644 index 2556af84..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-all-recipes.el +++ /dev/null @@ -1,104 +0,0 @@ -;;; org-chef-all-recipes.el --- org-chef allrecipes fetching. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from allrecipes.com. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun org-chef-all-recipes-extract-name (dom) - "Get the name of a recipe from an allrecipes DOM." - (dom-text (car (dom-by-class dom "^recipe-summary__h1$")))) - - -(defun org-chef-all-recipes-extract-ingredients (dom) - "Get the ingredients for a recipe from an allrecipes DOM." - (mapcar #'(lambda (n) (string-trim (dom-text n))) (dom-elements dom 'itemprop "^recipeIngredient$"))) - - -(defun org-chef-all-recipes-extract-servings (dom) - "Get the number of servings for a recipe from an allrecipes DOM." - (dom-attr (car (dom-by-id dom "metaRecipeServings")) 'content)) - - -(defun org-chef-all-recipes-extract-prep-time (dom) - "Get the amount of prep-time for a recipe from an allrecipes DOM." - (dom-texts (car (dom-elements dom 'itemprop "^prepTime$")))) - - -(defun org-chef-all-recipes-extract-cook-time (dom) - "Get the amount of cook-time for a recipe from an allrecipes DOM." - (dom-texts (car (dom-elements dom 'itemprop "^cookTime$")))) - - -(defun org-chef-all-recipes-extract-ready-in (dom) - "Get the total amount of time for a recipe from an allrecipes DOM." - (dom-texts (car (dom-elements dom 'itemprop "^totalTime$")))) - - -(defun org-chef-all-recipes-extract-directions (dom) - "Get the directions for a recipe from an allrecipes DOM." - (org-chef-remove-empty-strings (mapcar #'(lambda (n) (string-trim (dom-text n))) (dom-by-class dom "^recipe-directions__list--item$")))) - - -(defun org-chef-all-recipes-fetch (url) - "Given an allrecipes.com URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url" - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - - `((name . ,(org-chef-all-recipes-extract-name dom)) - (ingredients . ,(org-chef-all-recipes-extract-ingredients dom)) - (servings . ,(org-chef-all-recipes-extract-servings dom)) - (prep-time . ,(org-chef-all-recipes-extract-prep-time dom)) - (cook-time . ,(org-chef-all-recipes-extract-cook-time dom)) - (ready-in . ,(org-chef-all-recipes-extract-ready-in dom)) - (directions . ,(org-chef-all-recipes-extract-directions dom)) - (source-url . ,url))))) - - -(provide 'org-chef-all-recipes) -;;; org-chef-all-recipes.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-autoloads.el b/elpa/org-chef-20181105.2035/org-chef-autoloads.el deleted file mode 100644 index f3a927b2..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-autoloads.el +++ /dev/null @@ -1,138 +0,0 @@ -;;; org-chef-autoloads.el --- automatically extracted autoloads -;; -;;; Code: - -(add-to-list 'load-path (directory-file-name - (or (file-name-directory #$) (car load-path)))) - - -;;;### (autoloads nil "org-chef" "org-chef.el" (0 0 0 0)) -;;; Generated autoloads from org-chef.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef" '("org-chef-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-all-recipes" "org-chef-all-recipes.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from org-chef-all-recipes.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-all-recipes" '("org-chef-all-recipes-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-budget-bytes" "org-chef-budget-bytes.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from org-chef-budget-bytes.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-budget-bytes" '("org-chef-budget-bytes-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-chef-koch" "org-chef-chef-koch.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from org-chef-chef-koch.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-chef-koch" '("org-chef-chef-koch-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-cultures-for-health" "org-chef-cultures-for-health.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from org-chef-cultures-for-health.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-cultures-for-health" '("org-chef-cultures-for-health-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-genius-kitchen" "org-chef-genius-kitchen.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from org-chef-genius-kitchen.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-genius-kitchen" '("org-chef-genius-kitchen-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-marmiton" "org-chef-marmiton.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from org-chef-marmiton.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-marmiton" '("org-chef-marmiton-" "extract-dom-text" "sanitize"))) - -;;;*** - -;;;### (autoloads nil "org-chef-martha-stewart" "org-chef-martha-stewart.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from org-chef-martha-stewart.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-martha-stewart" '("org-chef-martha-stewart-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-nytimes" "org-chef-nytimes.el" (0 -;;;;;; 0 0 0)) -;;; Generated autoloads from org-chef-nytimes.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-nytimes" '("org-chef-nytimes-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-reluctant-gourmet" "org-chef-reluctant-gourmet.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from org-chef-reluctant-gourmet.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-reluctant-gourmet" '("org-chef-reluctant-gourmet-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-serious-eats" "org-chef-serious-eats.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from org-chef-serious-eats.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-serious-eats" '("org-chef-serious-eats-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-simply-recipes" "org-chef-simply-recipes.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from org-chef-simply-recipes.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-simply-recipes" '("org-chef-simply-recipes-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-steamy-kitchen" "org-chef-steamy-kitchen.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from org-chef-steamy-kitchen.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-steamy-kitchen" '("org-chef-steamy-kitchen-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-utils" "org-chef-utils.el" (0 0 0 -;;;;;; 0)) -;;; Generated autoloads from org-chef-utils.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-utils" '("org-chef-"))) - -;;;*** - -;;;### (autoloads nil "org-chef-wordpress" "org-chef-wordpress.el" -;;;;;; (0 0 0 0)) -;;; Generated autoloads from org-chef-wordpress.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-wordpress" '("org-chef-"))) - -;;;*** - -;;;### (autoloads nil nil ("org-chef-pkg.el") (0 0 0 0)) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; coding: utf-8 -;; End: -;;; org-chef-autoloads.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-budget-bytes.el b/elpa/org-chef-20181105.2035/org-chef-budget-bytes.el deleted file mode 100644 index 07f83c7a..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-budget-bytes.el +++ /dev/null @@ -1,121 +0,0 @@ -;;; org-chef-budget-bytes.el --- org-chef budgetbytes fetching. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from budgetbytes.com. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun org-chef-budget-bytes-extract-name (dom) - "Get the name of a recipe from an budgetbytes DOM." - (dom-text (car (dom-by-class dom "^wprm-recipe-name$")))) - - -(defun org-chef-budget-bytes-ingredient-to-string (dom) - (let* ((amount (string-trim (dom-text (car (dom-by-class dom "wprm-recipe-ingredient-amount"))))) - (unit (string-trim (dom-text (car (dom-by-class dom "wprm-recipe-ingredient-unit"))))) - (name (string-trim (dom-text (car (dom-by-class dom "wprm-recipe-ingredient-name")))))) - (format "%s %s %s" amount unit name))) - - -(defun org-chef-budget-bytes-extract-ingredients (dom) - "Get the ingredients for a recipe from an budgetbytes DOM." - (mapcar #'(lambda (n) (org-chef-budget-bytes-ingredient-to-string n)) - (dom-by-class dom "^wprm-recipe-ingredient$"))) - - -(defun org-chef-budget-bytes-extract-servings (dom) - "Get the number of servings for a recipe from an budgetbytes DOM." - (dom-text (car (dom-by-class dom "wprm-recipe-servings$")))) - - -(defun org-chef-budget-bytes-time-to-string (dom) - (let* ((hours (string-trim (dom-text (car (dom-by-class dom "hours$"))))) - (minutes (string-trim (dom-text (car (dom-by-class dom "minutes$"))))) - (hour-string (if (/= (length hours) 0) (format "%s hours " hours) "")) - (minute-string (if (/= (length minutes) 0) (format "%s minutes" minutes) ""))) - (string-trim (concat hour-string minute-string)))) - - -(defun org-chef-budget-bytes-extract-prep-time (dom) - "Get the amount of prep-time for a recipe from an budgetbytes DOM." - (org-chef-budget-bytes-time-to-string (car (dom-by-class dom "wprm-recipe-prep-time-container")))) - - -(defun org-chef-budget-bytes-extract-cook-time (dom) - "Get the amount of cook-time for a recipe from an budgetbytes DOM." - (org-chef-budget-bytes-time-to-string (car (dom-by-class dom "wprm-recipe-cook-time-container")))) - - -(defun org-chef-budget-bytes-extract-ready-in (dom) - "Get the total amount of time for a recipe from an budgetbytes DOM." - (org-chef-budget-bytes-time-to-string (car (dom-by-class dom "wprm-recipe-total-time-container")))) - - -(defun org-chef-budget-bytes-extract-directions (dom) - "Get the directions for a recipe from an budgetbytes DOM." - (mapcar #'(lambda (n) (string-trim (dom-texts n))) - (dom-by-class dom "wprm-recipe-instruction-text"))) - - -(defun org-chef-budget-bytes-fetch (url) - "Given an budgetbytes.com URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url" - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - - `((name . ,(org-chef-budget-bytes-extract-name dom)) - (ingredients . ,(org-chef-budget-bytes-extract-ingredients dom)) - (servings . ,(org-chef-budget-bytes-extract-servings dom)) - (prep-time . ,(org-chef-budget-bytes-extract-prep-time dom)) - (cook-time . ,(org-chef-budget-bytes-extract-cook-time dom)) - (ready-in . ,(org-chef-budget-bytes-extract-ready-in dom)) - (directions . ,(org-chef-budget-bytes-extract-directions dom)) - (source-url . ,url))))) - - -(provide 'org-chef-budget-bytes) -;;; org-chef-budget-bytes.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-chef-koch.el b/elpa/org-chef-20181105.2035/org-chef-chef-koch.el deleted file mode 100644 index 203931c8..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-chef-koch.el +++ /dev/null @@ -1,134 +0,0 @@ -;;; org-chef-chef-koch.el --- Functions for fetching recipes from chefkoch.de. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from chefkoch.de. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun org-chef-chef-koch-extract-name (dom) - "Get the name of a recipe from an chefkoch DOM." - (dom-text (car (dom-by-class dom "page-title")))) - - -(defun org-chef-chef-koch-ingredient-to-string (dom) - (let ((amount (replace-regexp-in-string " " " " (string-trim (dom-texts (car (dom-by-tag dom 'td)))))) - (name (string-trim (dom-texts (cadr (dom-by-tag dom 'td)))))) - (format "%s %s" amount name))) - - -(defun org-chef-chef-koch-extract-ingredients (dom) - "Get the ingredients for a recipe from an chefkoch DOM." - (mapcar #'org-chef-chef-koch-ingredient-to-string (dom-by-tag (dom-by-class dom "^incredients$") 'tr))) - - -(defun org-chef-chef-koch-extract-servings (dom) - "Get the number of servings for a recipe from an chefkoch DOM." - (dom-attr (dom-elements dom 'name "^portionen$") 'value)) - - -(defun org-chef-chef-koch-extract-prep-time (dom) - "Get the amount of prep-time for a recipe from an chefkoch DOM." - (let ((str (replace-regexp-in-string "\n" " " (dom-texts (dom-by-id dom "^preparation-info$"))))) - (string-match "Arbeitszeit:[[:space:]]+ca. \\(?1:[^\.]*\\)\." str) - (match-string 1 str))) - - -(defun org-chef-chef-koch-extract-cook-time (dom) - "Get the amount of cook-time for a recipe from an chefkoch DOM." - (let ((str (replace-regexp-in-string "\n" " " (dom-texts (dom-by-id dom "^preparation-info$"))))) - (string-match "Koch-/Backzeit:[[:space:]]+ca. \\(?1:[^\.]*\\)\." str) - (match-string 1 str))) - - -(defun org-chef-chef-koch-extract-ready-in (dom) - "Get the total amount of time for a recipe from an chefkoch DOM." - "") - - -(defun org-chef-chef-koch-extract-directions (dom) - "Get the directions for a recipe from an chefkoch DOM." - (with-temp-buffer - (insert (string-trim (dom-texts (dom-by-class dom "^instructions")))) - (delete-trailing-whitespace) - (split-string (buffer-string) "\n"))) - - -(defun org-chef-chef-koch-from-dom (dom) - "Given a chefkoch.de DOM, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions" - (let* ((prep-time (org-chef-chef-koch-extract-prep-time dom)) - (cook-time (org-chef-chef-koch-extract-cook-time dom)) - (total-time (org-chef-chef-koch-extract-ready-in dom))) - - `((ingredients . ,(org-chef-chef-koch-extract-ingredients dom)) - (name . ,(org-chef-chef-koch-extract-name dom)) - (servings . ,(org-chef-chef-koch-extract-servings dom)) - (prep-time . ,prep-time) - (cook-time . ,cook-time) - (ready-in . ,total-time) - (directions . ,(org-chef-chef-koch-extract-directions dom))))) - - -(defun org-chef-chef-koch-fetch (url) - "Given a chefkoch.de URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url" - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - (cons `(source-url . ,url) (org-chef-chef-koch-from-dom dom))))) - - -(provide 'org-chef-chef-koch) -;;; org-chef-chef-koch.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-cultures-for-health.el b/elpa/org-chef-20181105.2035/org-chef-cultures-for-health.el deleted file mode 100644 index d43d703a..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-cultures-for-health.el +++ /dev/null @@ -1,98 +0,0 @@ -;;; org-chef-cultures-for-health.el --- Functions for fetching recipes from culturesforhealth.com. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from culturesforhealth.com. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun org-chef-cultures-for-health-extract-name (dom) - "Get the name of a recipe from an culturesforhealth DOM." - (dom-text (car (dom-elements dom 'itemprop "^name$")))) - - -(defun org-chef-cultures-for-health-extract-ingredients (dom) - "Get the ingredients for a recipe from an culturesforhealth DOM." - (mapcar 'dom-texts (dom-elements dom 'itemprop "^ingredients$"))) - - -(defun org-chef-cultures-for-health-extract-directions (dom) - "Get the directions for a recipe from an culturesforhealth DOM." - (mapcar #'dom-texts (org-chef-dom-children (cadr (org-chef-dom-children (car (dom-elements dom 'itemprop "^recipeInstructions$"))))))) - - -(defun org-chef-cultures-for-health-from-dom (dom) - "Given a culturesforhealth.com DOM, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions" - `((ingredients . ,(org-chef-cultures-for-health-extract-ingredients dom)) - (name . ,(org-chef-cultures-for-health-extract-name dom) - ) - (servings . nil) - (prep-time . nil) - (cook-time . nil) - (ready-in . nil) - (directions . ,(org-chef-cultures-for-health-extract-directions dom)))) - - -(defun org-chef-cultures-for-health-fetch (url) - "Given a culturesforhealth.com URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url" - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - (cons `(source-url . ,url) (org-chef-cultures-for-health-from-dom dom))))) - - -(provide 'org-chef-cultures-for-health) -;;; org-chef-cultures-for-health.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-genius-kitchen.el b/elpa/org-chef-20181105.2035/org-chef-genius-kitchen.el deleted file mode 100644 index 2c2de7a1..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-genius-kitchen.el +++ /dev/null @@ -1,97 +0,0 @@ -;;; org-chef-genius-kitchen.el --- Functions for fetching recipes from geniuskitchen.com. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from geniuskitchen.com. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun org-chef-genius-kitchen-extract-name (dom) - "Get the name of a recipe from an geniuskitchen DOM." - (dom-text (caddr - (seq-filter (lambda (x) (not (stringp x))) - (dom-children (car (dom-by-class dom "^recipe-header"))))))) - - -(defun org-chef-genius-kitchen-extract-ingredients (dom) - "Get the ingredients for a recipe from an geniuskitchen DOM." - (mapcar #'dom-texts (dom-elements dom 'data-ingredient ".*"))) - - -(defun org-chef-genius-kitchen-extract-servings (dom) - "Get the number of servings for a recipe from an geniuskitchen DOM." - (dom-text (car (dom-by-class (car (dom-by-class dom "^servings$")) "count")))) - - -(defun org-chef-genius-kitchen-extract-ready-in (dom) - "Get the total amount of time for a recipe from an geniuskitchen DOM." - (string-trim (dom-text (car (dom-by-class dom "time"))))) - - -(defun org-chef-genius-kitchen-extract-directions (dom) - "Get the directions for a recipe from an geniuskitchen DOM." - (let ((directions-list (dom-by-tag (car (dom-by-class dom "directions-inner")) 'li))) - (org-chef-remove-empty-strings - (mapcar #'(lambda (n) (string-trim (dom-text n))) directions-list)))) - - -(defun org-chef-genius-kitchen-fetch (url) - "Given a geniuskitchen.com URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url" - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - `((name . ,(org-chef-genius-kitchen-extract-name dom)) - (ingredients . ,(org-chef-genius-kitchen-extract-ingredients dom)) - (servings . ,(org-chef-genius-kitchen-extract-servings dom)) - (prep-time . nil) - (cook-time . nil) - (ready-in . ,(org-chef-genius-kitchen-extract-ready-in dom)) - (directions . ,(org-chef-genius-kitchen-extract-directions dom)) - (source-url . ,url))))) - - -(provide 'org-chef-genius-kitchen) -;;; org-chef-genius-kitchen.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-marmiton.el b/elpa/org-chef-20181105.2035/org-chef-marmiton.el deleted file mode 100644 index 57dd7e22..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-marmiton.el +++ /dev/null @@ -1,127 +0,0 @@ -;;; org-chef-marmiton.el --- Functions for fetching recipes from marmiton.org. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck/Sébastien Le Maguer - -;; Author: Calvin Beck /Sébastien Le Maguer -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck/Sébastien Le Maguer - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from marmiton.org. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun sanitize (str) - "Sanitize the STR by removing beginning/trailing spaces extracted from a marmiton dom." - (replace-regexp-in-string "^[ \r\n]*\\(.*[^ \r\n]\\)[ \r\n]*$" "\\1" str)) - -(defun extract-dom-text (dom) - "Embedded the operation santize of dom-text from a marmiton DOM." - (sanitize (dom-text dom))) - -(defun org-chef-marmiton-extract-name (dom) - "Get the name of a recipe from a marmiton DOM." - (dom-text (car (dom-elements dom 'class "^main-title $")))) - -(defun org-chef-marmiton-extract-current-ingredient (dom) - "Extract element for the current ingredient from a marmiton DOM." - (concat - (extract-dom-text (dom-elements dom 'class "^recipe-ingredient-qt$")) - " " - (extract-dom-text (dom-elements dom 'class "^ingredient$")))) - -(defun org-chef-marmiton-extract-ingredients (dom) - "Get the ingredients for a recipe from a marmiton DOM." - (mapcar 'org-chef-marmiton-extract-current-ingredient (dom-elements dom 'class "^recipe-ingredients__list__item$"))) - -(defun org-chef-marmiton-extract-directions (dom) - "Get the directions for a recipe from a marmiton DOM." - - (mapcar 'extract-dom-text (dom-elements dom 'class "^recipe-preparation__list__item$"))) - -(defun org-chef-marmiton-extract-prep-time (dom) - "Get the preparation time for a recipe from a marmiton DOM." - (extract-dom-text - (dom-elements (dom-elements dom 'class "recipe-infos__timmings__preparation") - 'class "^recipe-infos__timmings__value$"))) - -(defun org-chef-marmiton-extract-cook-time (dom) - "Extract the cooking time for a recipe from a marmiton DOM." - (extract-dom-text - (dom-elements (dom-elements dom 'class "recipe-infos__timmings__cooking") - 'class "^recipe-infos__timmings__value$"))) - - -(defun org-chef-marmiton-extract-servings (dom) - (dom-text (car (dom-elements dom 'class "^title-2 recipe-infos__quantity__value$")))) - - - -(defun org-chef-marmiton-from-dom (dom) - "Given a marmiton.org DOM, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions" - `((ingredients . ,(org-chef-marmiton-extract-ingredients dom)) - (name . ,(org-chef-marmiton-extract-name dom)) - (servings . ,(org-chef-marmiton-extract-servings dom)) - (prep-time . ,(org-chef-marmiton-extract-prep-time dom)) - (cook-time . ,(org-chef-marmiton-extract-cook-time dom)) - (ready-in . nil) - (directions . ,(org-chef-marmiton-extract-directions dom)))) - - -(defun org-chef-marmiton-fetch (url) - "Given a marmiton.org URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url" - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - (cons `(source-url . ,url) (org-chef-marmiton-from-dom dom))))) - -(provide 'org-chef-marmiton) -;;; org-chef-marmiton.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-martha-stewart.el b/elpa/org-chef-20181105.2035/org-chef-martha-stewart.el deleted file mode 100644 index a2ee19c8..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-martha-stewart.el +++ /dev/null @@ -1,106 +0,0 @@ -;;; org-chef-martha-stewart.el --- org-chef marthastewart fetching. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from marthastewart.com. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun org-chef-martha-stewart-extract-name (dom) - "Get the name of a recipe from an marthastewart DOM." - (string-trim (dom-text (car (dom-by-class dom "^page-title$"))))) - - -(defun org-chef-martha-stewart-extract-ingredients (dom) - "Get the ingredients for a recipe from an marthastewart DOM." - (mapcar #'(lambda (n) (string-trim (dom-text n))) - (dom-by-class dom "^component-text$"))) - - -(defun org-chef-martha-stewart-extract-servings (dom) - "Get the number of servings for a recipe from an marthastewart DOM." - (string-trim (dom-text (car (dom-by-class dom "servings-data$"))))) - - -(defun org-chef-martha-stewart-extract-prep-time (dom) - "Get the amount of prep-time for a recipe from an marthastewart DOM." - (string-trim (dom-text (car (dom-by-class dom "prep-time-data$"))))) - - -(defun org-chef-martha-stewart-extract-cook-time (dom) - "Get the amount of cook-time for a recipe from an marthastewart DOM." - nil) - - -(defun org-chef-martha-stewart-extract-ready-in (dom) - "Get the total amount of time for a recipe from an marthastewart DOM." - (string-trim (dom-text (car (dom-by-class dom "total-time-data$"))))) - - -(defun org-chef-martha-stewart-extract-directions (dom) - "Get the directions for a recipe from an marthastewart DOM." - (mapcar #'(lambda (n) (string-trim (dom-texts (dom-children n)))) - (dom-by-class dom "^directions-item-text$"))) - - -(defun org-chef-martha-stewart-fetch (url) - "Given an marthastewart.com URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url" - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - - `((name . ,(org-chef-martha-stewart-extract-name dom)) - (ingredients . ,(org-chef-martha-stewart-extract-ingredients dom)) - (servings . ,(org-chef-martha-stewart-extract-servings dom)) - (prep-time . ,(org-chef-martha-stewart-extract-prep-time dom)) - (cook-time . ,(org-chef-martha-stewart-extract-cook-time dom)) - (ready-in . ,(org-chef-martha-stewart-extract-ready-in dom)) - (directions . ,(org-chef-martha-stewart-extract-directions dom)) - (source-url . ,url))))) - - -(provide 'org-chef-martha-stewart) -;;; org-chef-martha-stewart.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-nytimes.el b/elpa/org-chef-20181105.2035/org-chef-nytimes.el deleted file mode 100644 index 3712c585..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-nytimes.el +++ /dev/null @@ -1,128 +0,0 @@ -;;; org-chef-nytimes.el --- Functions for fetching recipes from nytimes.com. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck/Asilata Bapat - -;; Author: Calvin Beck /Asilata Bapat -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck/Asilata Bapat - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from nytimes.com. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun org-chef-nytimes-extract-name (dom) - "Get the name of a recipe from an nytimes DOM." - (string-trim (dom-text (car (dom-by-class dom "recipe-title"))))) - - -(defun org-chef-nytimes-ingredient-to-string (dom) - "Extract string representation of a single ingredient from an nytimes DOM." - (replace-regexp-in-string - " \\([,\.]\\)" "\\1" - (string-join (org-chef-remove-empty-strings (mapcar 'string-trim (dom-strings dom))) " "))) - -(defun org-chef-nytimes-extract-ingredients (dom) - "Get the ingredients for a recipe from an nytimes DOM." - (mapcar 'org-chef-nytimes-ingredient-to-string - (dom-elements dom 'itemprop "recipeIngredient"))) - - -(defun org-chef-nytimes-extract-servings (dom) - "Get the number of servings for a recipe from an nytimes DOM." - (replace-regexp-in-string " servings" "" (dom-text (car (dom-elements dom 'itemprop "recipeYield"))))) - - -(defun org-chef-nytimes-extract-prep-time (dom) - "Get the amount of prep-time for a recipe from an nytimes DOM." - "") - - -(defun org-chef-nytimes-extract-cook-time (dom) - "Get the amount of cook-time for a recipe from an nytimes DOM." - "") - - -(defun org-chef-nytimes-extract-ready-in (dom) - "Get the total amount of time for a recipe from an nytimes DOM." - (dom-texts (dom-by-class (cadr (dom-by-tag (dom-by-class dom "recipe-time-yield") 'li)) "recipe-yield-value"))) - - -(defun org-chef-nytimes-extract-directions (dom) - "Get the directions for a recipe from an nytimes DOM." - (mapcar 'dom-texts (dom-by-tag (dom-elements dom 'itemprop "recipeInstructions") 'li))) - - -(defun org-chef-nytimes-from-dom (dom) - "Given an nytimes.com DOM, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions" - (let* ((prep-time (org-chef-nytimes-extract-prep-time dom)) - (cook-time (org-chef-nytimes-extract-cook-time dom)) - (total-time (org-chef-nytimes-extract-ready-in dom))) - - `((ingredients . ,(org-chef-nytimes-extract-ingredients dom)) - (name . ,(org-chef-nytimes-extract-name dom)) - (servings . ,(org-chef-nytimes-extract-servings dom)) - (prep-time . ,prep-time) - (cook-time . ,cook-time) - (ready-in . ,total-time) - (directions . ,(org-chef-nytimes-extract-directions dom))))) - - -(defun org-chef-nytimes-fetch (url) - "Given an nytimes.com URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url" - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - (cons `(source-url . ,url) (org-chef-nytimes-from-dom dom))))) - - -(provide 'org-chef-nytimes) -;;; org-chef-nytimes.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-pkg.el b/elpa/org-chef-20181105.2035/org-chef-pkg.el deleted file mode 100644 index 9340d6fa..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-pkg.el +++ /dev/null @@ -1,13 +0,0 @@ -(define-package "org-chef" "20181105.2035" "Cookbook and recipe management with org-mode." - '((org "0") - (emacs "24")) - :keywords - '("convenience" "abbrev" "outlines" "org" "food" "recipes" "cooking") - :authors - '(("Calvin Beck" . "hobbes@ualberta.ca")) - :maintainer - '("Calvin Beck" . "hobbes@ualberta.ca") - :url "https://github.com/Chobbes/org-chef") -;; Local Variables: -;; no-byte-compile: t -;; End: diff --git a/elpa/org-chef-20181105.2035/org-chef-reluctant-gourmet.el b/elpa/org-chef-20181105.2035/org-chef-reluctant-gourmet.el deleted file mode 100644 index 47e75e9d..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-reluctant-gourmet.el +++ /dev/null @@ -1,122 +0,0 @@ -;;; org-chef-reluctant-gourmet.el --- Functions for fetching recipes from reluctantgourmet.com. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from reluctantgourmet.com. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun org-chef-reluctant-gourmet-extract-name (dom) - "Get the name of a recipe from an reluctantgourmet DOM." - (dom-text (car (dom-by-id dom "zlrecipe-title")))) - - -(defun org-chef-reluctant-gourmet-extract-ingredients (dom) - "Get the ingredients for a recipe from an reluctantgourmet DOM." - (mapcar #'(lambda (n) (string-trim (dom-text n))) (dom-by-class dom "^ingredient$"))) - - -(defun org-chef-reluctant-gourmet-extract-servings (dom) - "Get the number of servings for a recipe from an reluctantgourmet DOM." - (dom-texts (car (dom-elements dom 'itemprop "^recipeYield$")))) - - -(defun org-chef-reluctant-gourmet-extract-prep-time (dom) - "Get the amount of prep-time for a recipe from an reluctantgourmet DOM." - (dom-texts (car (dom-elements dom 'itemprop "^prepTime$")))) - - -(defun org-chef-reluctant-gourmet-extract-cook-time (dom) - "Get the amount of cook-time for a recipe from an reluctantgourmet DOM." - (dom-texts (car (dom-elements dom 'itemprop "^cookTime$")))) - - -(defun org-chef-reluctant-gourmet-extract-ready-in (dom) - "Get the total amount of time for a recipe from an reluctantgourmet DOM." - (dom-texts (car (dom-elements dom 'itemprop "^totalTime$")))) - - -(defun org-chef-reluctant-gourmet-extract-directions (dom) - "Get the directions for a recipe from an reluctantgourmet DOM." - (mapcar #'dom-text (seq-filter (lambda (x) (not (stringp x))) - (dom-elements dom 'itemprop "^recipeInstructions$")))) - - -(defun org-chef-reluctant-gourmet-from-dom (dom) - "Given a reluctantgourmet.com DOM, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions" - (let* ((prep-time (org-chef-reluctant-gourmet-extract-prep-time dom)) - (cook-time (org-chef-reluctant-gourmet-extract-cook-time dom)) - (total-time (org-chef-reluctant-gourmet-extract-ready-in dom))) - - `((ingredients . ,(org-chef-reluctant-gourmet-extract-ingredients dom)) - (name . ,(org-chef-reluctant-gourmet-extract-name dom)) - (servings . ,(org-chef-reluctant-gourmet-extract-servings dom)) - (prep-time . ,prep-time) - (cook-time . ,cook-time) - (ready-in . ,total-time) - (directions . ,(org-chef-reluctant-gourmet-extract-directions dom))))) - - -(defun org-chef-reluctant-gourmet-fetch (url) - "Given a reluctantgourmet.com URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url" - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - (cons `(source-url . ,url) (org-chef-reluctant-gourmet-from-dom dom))))) - - -(provide 'org-chef-reluctant-gourmet) -;;; org-chef-reluctant-gourmet.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-serious-eats.el b/elpa/org-chef-20181105.2035/org-chef-serious-eats.el deleted file mode 100644 index 0ed4300c..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-serious-eats.el +++ /dev/null @@ -1,113 +0,0 @@ -;;; org-chef-serious-eats.el --- org-chef seriouseats fetching. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from seriouseats.com. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun org-chef-serious-eats-extract-name (dom) - "Get the name of a recipe from an seriouseats DOM." - (dom-text (car (dom-elements dom 'itemprop "^name$")))) - - -(defun org-chef-serious-eats-extract-ingredients (dom) - "Get the ingredients for a recipe from an seriouseats DOM." - (mapcar 'dom-texts (dom-elements dom 'itemprop "^recipeIngredient$"))) - - -(defun org-chef-serious-eats-extract-servings (dom) - "Get the number of servings for a recipe from an seriouseats DOM." - (dom-text (car (dom-elements dom 'itemprop "^recipeYield$")))) - - -(defun org-chef-serious-eats-extract-prep-time (dom) - "Get the amount of prep-time for a recipe from an seriouseats DOM." - (dom-text (car (dom-by-class - (cadr - (org-chef-dom-children - (car (dom-by-class dom "^recipe-about$")))) - "info")))) - - -(defun org-chef-serious-eats-extract-cook-time (dom) - "Get the amount of cook-time for a recipe from an seriouseats DOM." - nil) - - -(defun org-chef-serious-eats-extract-ready-in (dom) - "Get the total amount of time for a recipe from an seriouseats DOM." - (dom-text (car (dom-by-class - (caddr - (org-chef-dom-children - (car (dom-by-class dom "^recipe-about$")))) - "info")))) - - -(defun org-chef-serious-eats-extract-directions (dom) - "Get the directions for a recipe from an seriouseats DOM." - (mapcar #'(lambda (n) (string-trim (dom-texts (dom-children n)))) - (dom-by-class dom "^recipe-procedure-text$"))) - - -(defun org-chef-serious-eats-fetch (url) - "Given an seriouseats.com URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url" - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - - `((name . ,(org-chef-serious-eats-extract-name dom)) - (ingredients . ,(org-chef-serious-eats-extract-ingredients dom)) - (servings . ,(org-chef-serious-eats-extract-servings dom)) - (prep-time . ,(org-chef-serious-eats-extract-prep-time dom)) - (cook-time . ,(org-chef-serious-eats-extract-cook-time dom)) - (ready-in . ,(org-chef-serious-eats-extract-ready-in dom)) - (directions . ,(org-chef-serious-eats-extract-directions dom)) - (source-url . ,url))))) - - -(provide 'org-chef-serious-eats) -;;; org-chef-serious-eats.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-simply-recipes.el b/elpa/org-chef-20181105.2035/org-chef-simply-recipes.el deleted file mode 100644 index 831e766a..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-simply-recipes.el +++ /dev/null @@ -1,121 +0,0 @@ -;;; org-chef-simply-recipes.el --- Functions for fetching recipes from simplyrecipes.com. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from simplyrecipes.com. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun org-chef-simply-recipes-extract-name (dom) - "Get the name of a recipe from an simplyrecipes DOM." - (dom-text (car (dom-by-class dom "entry-title")))) - - -(defun org-chef-simply-recipes-extract-ingredients (dom) - "Get the ingredients for a recipe from an simplyrecipes DOM." - (mapcar 'dom-text (dom-by-class dom "^ingredient$"))) - - -(defun org-chef-simply-recipes-extract-servings (dom) - "Get the number of servings for a recipe from an simplyrecipes DOM." - (let ((servings (dom-text (car (dom-by-class dom "^yield*"))))) - (when servings - (substring servings 7)))) - - -(defun org-chef-simply-recipes-extract-prep-time (dom) - "Get the amount of prep-time for a recipe from an simplyrecipes DOM." - (dom-text (car (dom-by-class dom "preptime")))) - - -(defun org-chef-simply-recipes-extract-cook-time (dom) - "Get the amount of cook-time for a recipe from an simplyrecipes DOM." - (let ((cook-time (dom-by-class dom "cooktime")) - (other-time (dom-by-class dom "othertime"))) - (dom-text (car (if (null cook-time) other-time cook-time))))) - - -(defun org-chef-simply-recipes-extract-directions (dom) - "Get the directions for a recipe from an simplyrecipes DOM." - (mapcar #'dom-text (seq-filter (lambda (x) (not (stringp x))) - (dom-children (car (dom-elements dom 'itemprop "^recipeInstructions$")))))) - - -(defun org-chef-simply-recipes-from-dom (dom) - "Given a simplyrecipes.com DOM, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions" - (let* ((prep-time (org-chef-simply-recipes-extract-prep-time dom)) - (cook-time (org-chef-simply-recipes-extract-cook-time dom))) - - `((ingredients . ,(org-chef-simply-recipes-extract-ingredients dom)) - (name . ,(org-chef-simply-recipes-extract-name dom) - ) - (servings . ,(org-chef-simply-recipes-extract-servings dom)) - (prep-time . ,prep-time) - (cook-time . ,cook-time) - (ready-in . nil) - (directions . ,(org-chef-simply-recipes-extract-directions dom))))) - - -(defun org-chef-simply-recipes-fetch (url) - "Given a simplyrecipes.com URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url" - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - (cons `(source-url . ,url) (org-chef-simply-recipes-from-dom dom))))) - - -(provide 'org-chef-simply-recipes) -;;; org-chef-simply-recipes.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-steamy-kitchen.el b/elpa/org-chef-20181105.2035/org-chef-steamy-kitchen.el deleted file mode 100644 index 6591c0b4..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-steamy-kitchen.el +++ /dev/null @@ -1,105 +0,0 @@ -;;; org-chef-steamy-kitchen.el --- org-chef steamykitchen fetching. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from steamykitchen.com. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun org-chef-steamy-kitchen-extract-name (dom) - "Get the name of a recipe from an steamykitchen DOM." - (dom-text (car (dom-elements dom 'itemprop "^name$")))) - - -(defun org-chef-steamy-kitchen-extract-ingredients (dom) - "Get the ingredients for a recipe from an steamykitchen DOM." - (mapcar 'dom-texts (dom-elements dom 'itemprop "^ingredients$"))) - - -(defun org-chef-steamy-kitchen-extract-servings (dom) - "Get the number of servings for a recipe from an steamykitchen DOM." - (dom-text (car (dom-elements dom 'itemprop "^recipeYield$")))) - - -(defun org-chef-steamy-kitchen-extract-prep-time (dom) - "Get the amount of prep-time for a recipe from an steamykitchen DOM." - (dom-text (dom-parent dom (car (dom-elements dom 'itemprop "^prepTime$"))))) - - -(defun org-chef-steamy-kitchen-extract-cook-time (dom) - "Get the amount of cook-time for a recipe from an steamykitchen DOM." - (dom-text (dom-parent dom (car (dom-elements dom 'itemprop "^cookTime$"))))) - - -(defun org-chef-steamy-kitchen-extract-ready-in (dom) - "Get the total amount of time for a recipe from an steamykitchen DOM." - nil) - - -(defun org-chef-steamy-kitchen-extract-directions (dom) - "Get the directions for a recipe from an steamykitchen DOM." - (mapcar #'(lambda (n) (string-trim (dom-texts n))) - (org-chef-dom-children (car (dom-by-class dom "^instructions$"))))) - - -(defun org-chef-steamy-kitchen-fetch (url) - "Given an steamykitchen.com URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url" - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - - `((name . ,(org-chef-steamy-kitchen-extract-name dom)) - (ingredients . ,(org-chef-steamy-kitchen-extract-ingredients dom)) - (servings . ,(org-chef-steamy-kitchen-extract-servings dom)) - (prep-time . ,(org-chef-steamy-kitchen-extract-prep-time dom)) - (cook-time . ,(org-chef-steamy-kitchen-extract-cook-time dom)) - (ready-in . ,(org-chef-steamy-kitchen-extract-ready-in dom)) - (directions . ,(org-chef-steamy-kitchen-extract-directions dom)) - (source-url . ,url))))) - - -(provide 'org-chef-steamy-kitchen) -;;; org-chef-steamy-kitchen.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-utils.el b/elpa/org-chef-20181105.2035/org-chef-utils.el deleted file mode 100644 index 2239825a..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-utils.el +++ /dev/null @@ -1,64 +0,0 @@ -;;; org-chef-utils.el --- Utilities for org-chef. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Utility functions for org-chef. - -;;; Code: - -(require 'cl-macs) - -(defun org-chef-remove-empty-strings (lst) - "Filter out any empty strings in a list of strings (LST)." - (seq-filter (lambda (x) (/= (length x) 0)) lst)) - - -(defun org-chef-dom-children (dom) - "Get the child nodes of the DOM, remove strings." - (seq-filter (lambda (x) (not (stringp x))) - (dom-children dom))) - - -(defun org-chef-insert-org-list (lst &optional bullet) - "Insert LST as an ‘org-mode’ plain list. - -The optional argument BULLET specifies which type of bullet point -should be used." - (mapcar (lambda (x) (progn (insert (format "%s" x)) - (org-cycle) - (org-ctrl-c-minus) - (if bullet (org-cycle-list-bullet bullet)) - (org-return))) - lst)) - - -(provide 'org-chef-utils) -;;; org-chef-utils.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef-wordpress.el b/elpa/org-chef-20181105.2035/org-chef-wordpress.el deleted file mode 100644 index fe831575..00000000 --- a/elpa/org-chef-20181105.2035/org-chef-wordpress.el +++ /dev/null @@ -1,113 +0,0 @@ -;;; org-chef-wordpress.el --- org-chef wordpress fetching. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; Functions for fetching information from wordpress sites. - -;;; Code: - - -(require 'org-chef-utils) -(require 'dom) - - -(defun org-chef-wordpress-extract-name (dom) - "Get the name of a recipe from an wordpress DOM." - (dom-text (car (dom-by-class dom "^wprm-recipe-name")))) - - -(defun org-chef-wordpress-extract-ingredients (dom) - "Get the ingredients for a recipe from an wordpress DOM." - (mapcar #'(lambda (n) (string-trim (dom-texts n))) (dom-by-class dom "^wprm-recipe-ingredient$"))) - - -(defun org-chef-wordpress-extract-servings (dom) - "Get the number of servings for a recipe from an wordpress DOM." - (dom-texts (car (dom-by-class dom "wprm-recipe-servings$")))) - - -(defun org-chef-wordpress-extract-prep-time (dom) - "Get the amount of prep-time for a recipe from an wordpress DOM." - (dom-texts (car (dom-by-class dom "^wprm-recipe-time$")))) - - -(defun org-chef-wordpress-extract-cook-time (dom) - "Get the amount of cook-time for a recipe from an wordpress DOM." - (dom-texts (cadr (dom-by-class dom "^wprm-recipe-time$")))) - - -(defun org-chef-wordpress-extract-ready-in (dom) - "Get the total amount of time for a recipe from an wordpress DOM." - (dom-texts (caddr (dom-by-class dom "^wprm-recipe-time$")))) - - -(defun org-chef-wordpress-extract-directions (dom) - "Get the directions for a recipe from an wordpress DOM." - (org-chef-remove-empty-strings (mapcar #'(lambda (n) (string-trim (dom-texts n))) (dom-by-class dom "^wprm-recipe-instruction$")))) - - -(defun org-chef-is-wordpress-p (dom) - "Check if a DOM corresponds to a wordpress website." - (dom-by-class dom "^wprm-recipe-container$")) - - -(defun org-chef-wordpress-fetch (url) - "Given an wordpress URL, retrieve the recipe information. - -This returns an alist with the following keys: - -- name -- ingredients -- servings -- prep-time -- cook-time -- ready-in -- directions -- source-url - -If this is not a wordpress site, then return nil." - (with-current-buffer (url-retrieve-synchronously url) - (let ((dom (libxml-parse-html-region (point-min) (point-max)))) - - (if (org-chef-is-wordpress-p dom) - `((name . ,(org-chef-wordpress-extract-name dom)) - (ingredients . ,(org-chef-wordpress-extract-ingredients dom)) - (servings . ,(org-chef-wordpress-extract-servings dom)) - (prep-time . ,(org-chef-wordpress-extract-prep-time dom)) - (cook-time . ,(org-chef-wordpress-extract-cook-time dom)) - (ready-in . ,(org-chef-wordpress-extract-ready-in dom)) - (directions . ,(org-chef-wordpress-extract-directions dom)) - (source-url . ,url)) - nil)))) - - -(provide 'org-chef-wordpress) -;;; org-chef-wordpress.el ends here diff --git a/elpa/org-chef-20181105.2035/org-chef.el b/elpa/org-chef-20181105.2035/org-chef.el deleted file mode 100644 index 227ebc3b..00000000 --- a/elpa/org-chef-20181105.2035/org-chef.el +++ /dev/null @@ -1,134 +0,0 @@ -;;; org-chef.el --- Cookbook and recipe management with org-mode. -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Calvin Beck - -;; Author: Calvin Beck -;; URL: https://github.com/Chobbes/org-chef -;; Created: 2018 -;; Version: 0.1.3 -;; Keywords: convenience, abbrev, outlines, org, food, recipes, cooking -;; Package-Requires: ((org "0") (emacs "24")) - -;; Copyright 2018 Calvin Beck - -;; Permission is hereby granted, free of charge, to any person -;; obtaining a copy of this software and associated documentation -;; files (the "Software"), to deal in the Software without -;; restriction, including without limitation the rights to use, copy, -;; modify, merge, publish, distribute, sublicense, and/or sell copies -;; of the Software, and to permit persons to whom the Software is -;; furnished to do so, subject to the following conditions: - -;; The above copyright notice and this permission notice shall be -;; included in all copies or substantial portions of the Software. - -;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -;; SOFTWARE. - -;;; Commentary: - -;; org-chef is a package for managing recipes in org-mode. One of the -;; main features is that it can automatically extract recipes from -;; websites like allrecipes.com - -;;; Code: - - -(require 'org-chef-utils) -(require 'org-chef-all-recipes) -(require 'org-chef-genius-kitchen) -(require 'org-chef-simply-recipes) -(require 'org-chef-martha-stewart) -(require 'org-chef-budget-bytes) -(require 'org-chef-cultures-for-health) -(require 'org-chef-marmiton) -(require 'org-chef-serious-eats) -(require 'org-chef-reluctant-gourmet) -(require 'org-chef-chef-koch) -(require 'org-chef-steamy-kitchen) -(require 'org-chef-nytimes) -(require 'org-chef-wordpress) - - -(defun org-chef-recipe-insert-org (recipe) - "Insert a RECIPE as an ‘org-mode’ heading." - (org-insert-heading) - (insert (cdr (assoc 'name recipe))) - (org-return) - (org-set-property "source-url" (cdr (assoc 'source-url recipe))) - (org-set-property "servings" (cdr (assoc 'servings recipe))) - (org-set-property "prep-time" (format "%s" (cdr (assoc 'prep-time recipe)))) - (org-set-property "cook-time" (format "%s" (cdr (assoc 'cook-time recipe)))) - (org-set-property "ready-in" (format "%s" (cdr (assoc 'ready-in recipe)))) - (org-insert-subheading t) - (insert "Ingredients") - (org-return) - (org-return) - (org-chef-insert-org-list (cdr (assoc 'ingredients recipe))) - (org-return) - (org-return) - (org-insert-heading) - (insert "Directions") - (org-return) - (org-return) - (org-chef-insert-org-list (cdr (assoc 'directions recipe)) "1.")) - - -(defun org-chef-recipe-org-string (recipe) - "Get an ‘org-mode’ heading string for a RECIPE." - (with-temp-buffer (org-mode) - (org-chef-recipe-insert-org recipe) - (buffer-string))) - - -(defun org-chef-match-url (BASE URL) - "Match URL against a BASE url." - (not (null (string-match-p (regexp-quote BASE) URL)))) - - -(defun org-chef-fetch-recipe-specific-url (URL) - "Look up a recipe based on a specific URL." - (cond - ((org-chef-match-url "allrecipes.com" URL) (org-chef-all-recipes-fetch URL)) - ((org-chef-match-url "geniuskitchen.com" URL) (org-chef-genius-kitchen-fetch URL)) - ((org-chef-match-url "simplyrecipes.com" URL) (org-chef-simply-recipes-fetch URL)) - ((org-chef-match-url "marthastewart.com" URL) (org-chef-martha-stewart-fetch URL)) - ((org-chef-match-url "budgetbytes.com" URL) (org-chef-budget-bytes-fetch URL)) - ((org-chef-match-url "culturesforhealth.com" URL) (org-chef-cultures-for-health-fetch URL)) - ((org-chef-match-url "marmiton.org" URL) (org-chef-marmiton-fetch URL)) - ((org-chef-match-url "seriouseats.com" URL) (org-chef-serious-eats-fetch URL)) - ((org-chef-match-url "reluctantgourmet.com" URL) (org-chef-reluctant-gourmet-fetch URL)) - ((org-chef-match-url "chefkoch.de" URL) (org-chef-chef-koch-fetch URL)) - ((org-chef-match-url "steamykitchen.com" URL) (org-chef-steamy-kitchen-fetch URL)) - ((org-chef-match-url "nytimes.com" URL) (org-chef-nytimes-fetch URL)) - (t nil))) - - -(defun org-chef-fetch-recipe (URL) - "Look up a recipe at a URL." - (let ((fetched-recipe (org-chef-fetch-recipe-specific-url URL))) - (if fetched-recipe - fetched-recipe - (org-chef-wordpress-fetch URL)))) - - -(defun org-chef-insert-recipe (URL) - "Prompt for a recipe URL, and then insert the recipe at point." - (interactive "sRecipe URL: ") - (org-chef-recipe-insert-org (org-chef-fetch-recipe URL))) - - -(defun org-chef-get-recipe-from-url () - "Prompt for a recipe URL, and return the ‘org-mode’ string." - (let ((URL (read-string "Recipe URL: "))) - (org-chef-recipe-org-string (org-chef-fetch-recipe URL)))) - - -(provide 'org-chef) -;;; org-chef.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-all-recipes.el b/elpa/org-chef-20181202.2221/org-chef-all-recipes.el new file mode 100644 index 00000000..2556af84 --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-all-recipes.el @@ -0,0 +1,104 @@ +;;; org-chef-all-recipes.el --- org-chef allrecipes fetching. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from allrecipes.com. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun org-chef-all-recipes-extract-name (dom) + "Get the name of a recipe from an allrecipes DOM." + (dom-text (car (dom-by-class dom "^recipe-summary__h1$")))) + + +(defun org-chef-all-recipes-extract-ingredients (dom) + "Get the ingredients for a recipe from an allrecipes DOM." + (mapcar #'(lambda (n) (string-trim (dom-text n))) (dom-elements dom 'itemprop "^recipeIngredient$"))) + + +(defun org-chef-all-recipes-extract-servings (dom) + "Get the number of servings for a recipe from an allrecipes DOM." + (dom-attr (car (dom-by-id dom "metaRecipeServings")) 'content)) + + +(defun org-chef-all-recipes-extract-prep-time (dom) + "Get the amount of prep-time for a recipe from an allrecipes DOM." + (dom-texts (car (dom-elements dom 'itemprop "^prepTime$")))) + + +(defun org-chef-all-recipes-extract-cook-time (dom) + "Get the amount of cook-time for a recipe from an allrecipes DOM." + (dom-texts (car (dom-elements dom 'itemprop "^cookTime$")))) + + +(defun org-chef-all-recipes-extract-ready-in (dom) + "Get the total amount of time for a recipe from an allrecipes DOM." + (dom-texts (car (dom-elements dom 'itemprop "^totalTime$")))) + + +(defun org-chef-all-recipes-extract-directions (dom) + "Get the directions for a recipe from an allrecipes DOM." + (org-chef-remove-empty-strings (mapcar #'(lambda (n) (string-trim (dom-text n))) (dom-by-class dom "^recipe-directions__list--item$")))) + + +(defun org-chef-all-recipes-fetch (url) + "Given an allrecipes.com URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + + `((name . ,(org-chef-all-recipes-extract-name dom)) + (ingredients . ,(org-chef-all-recipes-extract-ingredients dom)) + (servings . ,(org-chef-all-recipes-extract-servings dom)) + (prep-time . ,(org-chef-all-recipes-extract-prep-time dom)) + (cook-time . ,(org-chef-all-recipes-extract-cook-time dom)) + (ready-in . ,(org-chef-all-recipes-extract-ready-in dom)) + (directions . ,(org-chef-all-recipes-extract-directions dom)) + (source-url . ,url))))) + + +(provide 'org-chef-all-recipes) +;;; org-chef-all-recipes.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-autoloads.el b/elpa/org-chef-20181202.2221/org-chef-autoloads.el new file mode 100644 index 00000000..9cd8eda7 --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-autoloads.el @@ -0,0 +1,146 @@ +;;; org-chef-autoloads.el --- automatically extracted autoloads +;; +;;; Code: + +(add-to-list 'load-path (directory-file-name + (or (file-name-directory #$) (car load-path)))) + + +;;;### (autoloads nil "org-chef" "org-chef.el" (0 0 0 0)) +;;; Generated autoloads from org-chef.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef" '("org-chef-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-all-recipes" "org-chef-all-recipes.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from org-chef-all-recipes.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-all-recipes" '("org-chef-all-recipes-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-budget-bytes" "org-chef-budget-bytes.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from org-chef-budget-bytes.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-budget-bytes" '("org-chef-budget-bytes-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-chef-koch" "org-chef-chef-koch.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from org-chef-chef-koch.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-chef-koch" '("org-chef-chef-koch-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-cultures-for-health" "org-chef-cultures-for-health.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from org-chef-cultures-for-health.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-cultures-for-health" '("org-chef-cultures-for-health-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-genius-kitchen" "org-chef-genius-kitchen.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from org-chef-genius-kitchen.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-genius-kitchen" '("org-chef-genius-kitchen-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-marmiton" "org-chef-marmiton.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from org-chef-marmiton.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-marmiton" '("org-chef-marmiton-" "extract-dom-text" "sanitize"))) + +;;;*** + +;;;### (autoloads nil "org-chef-martha-stewart" "org-chef-martha-stewart.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from org-chef-martha-stewart.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-martha-stewart" '("org-chef-martha-stewart-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-nytimes" "org-chef-nytimes.el" (0 +;;;;;; 0 0 0)) +;;; Generated autoloads from org-chef-nytimes.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-nytimes" '("org-chef-nytimes-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-reluctant-gourmet" "org-chef-reluctant-gourmet.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from org-chef-reluctant-gourmet.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-reluctant-gourmet" '("org-chef-reluctant-gourmet-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-saveur" "org-chef-saveur.el" (0 0 +;;;;;; 0 0)) +;;; Generated autoloads from org-chef-saveur.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-saveur" '("org-chef-saveur-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-serious-eats" "org-chef-serious-eats.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from org-chef-serious-eats.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-serious-eats" '("org-chef-serious-eats-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-simply-recipes" "org-chef-simply-recipes.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from org-chef-simply-recipes.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-simply-recipes" '("org-chef-simply-recipes-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-steamy-kitchen" "org-chef-steamy-kitchen.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from org-chef-steamy-kitchen.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-steamy-kitchen" '("org-chef-steamy-kitchen-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-utils" "org-chef-utils.el" (0 0 0 +;;;;;; 0)) +;;; Generated autoloads from org-chef-utils.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-utils" '("org-chef-"))) + +;;;*** + +;;;### (autoloads nil "org-chef-wordpress" "org-chef-wordpress.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from org-chef-wordpress.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-chef-wordpress" '("org-chef-"))) + +;;;*** + +;;;### (autoloads nil nil ("org-chef-pkg.el") (0 0 0 0)) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; coding: utf-8 +;; End: +;;; org-chef-autoloads.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-budget-bytes.el b/elpa/org-chef-20181202.2221/org-chef-budget-bytes.el new file mode 100644 index 00000000..07f83c7a --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-budget-bytes.el @@ -0,0 +1,121 @@ +;;; org-chef-budget-bytes.el --- org-chef budgetbytes fetching. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from budgetbytes.com. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun org-chef-budget-bytes-extract-name (dom) + "Get the name of a recipe from an budgetbytes DOM." + (dom-text (car (dom-by-class dom "^wprm-recipe-name$")))) + + +(defun org-chef-budget-bytes-ingredient-to-string (dom) + (let* ((amount (string-trim (dom-text (car (dom-by-class dom "wprm-recipe-ingredient-amount"))))) + (unit (string-trim (dom-text (car (dom-by-class dom "wprm-recipe-ingredient-unit"))))) + (name (string-trim (dom-text (car (dom-by-class dom "wprm-recipe-ingredient-name")))))) + (format "%s %s %s" amount unit name))) + + +(defun org-chef-budget-bytes-extract-ingredients (dom) + "Get the ingredients for a recipe from an budgetbytes DOM." + (mapcar #'(lambda (n) (org-chef-budget-bytes-ingredient-to-string n)) + (dom-by-class dom "^wprm-recipe-ingredient$"))) + + +(defun org-chef-budget-bytes-extract-servings (dom) + "Get the number of servings for a recipe from an budgetbytes DOM." + (dom-text (car (dom-by-class dom "wprm-recipe-servings$")))) + + +(defun org-chef-budget-bytes-time-to-string (dom) + (let* ((hours (string-trim (dom-text (car (dom-by-class dom "hours$"))))) + (minutes (string-trim (dom-text (car (dom-by-class dom "minutes$"))))) + (hour-string (if (/= (length hours) 0) (format "%s hours " hours) "")) + (minute-string (if (/= (length minutes) 0) (format "%s minutes" minutes) ""))) + (string-trim (concat hour-string minute-string)))) + + +(defun org-chef-budget-bytes-extract-prep-time (dom) + "Get the amount of prep-time for a recipe from an budgetbytes DOM." + (org-chef-budget-bytes-time-to-string (car (dom-by-class dom "wprm-recipe-prep-time-container")))) + + +(defun org-chef-budget-bytes-extract-cook-time (dom) + "Get the amount of cook-time for a recipe from an budgetbytes DOM." + (org-chef-budget-bytes-time-to-string (car (dom-by-class dom "wprm-recipe-cook-time-container")))) + + +(defun org-chef-budget-bytes-extract-ready-in (dom) + "Get the total amount of time for a recipe from an budgetbytes DOM." + (org-chef-budget-bytes-time-to-string (car (dom-by-class dom "wprm-recipe-total-time-container")))) + + +(defun org-chef-budget-bytes-extract-directions (dom) + "Get the directions for a recipe from an budgetbytes DOM." + (mapcar #'(lambda (n) (string-trim (dom-texts n))) + (dom-by-class dom "wprm-recipe-instruction-text"))) + + +(defun org-chef-budget-bytes-fetch (url) + "Given an budgetbytes.com URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + + `((name . ,(org-chef-budget-bytes-extract-name dom)) + (ingredients . ,(org-chef-budget-bytes-extract-ingredients dom)) + (servings . ,(org-chef-budget-bytes-extract-servings dom)) + (prep-time . ,(org-chef-budget-bytes-extract-prep-time dom)) + (cook-time . ,(org-chef-budget-bytes-extract-cook-time dom)) + (ready-in . ,(org-chef-budget-bytes-extract-ready-in dom)) + (directions . ,(org-chef-budget-bytes-extract-directions dom)) + (source-url . ,url))))) + + +(provide 'org-chef-budget-bytes) +;;; org-chef-budget-bytes.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-chef-koch.el b/elpa/org-chef-20181202.2221/org-chef-chef-koch.el new file mode 100644 index 00000000..203931c8 --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-chef-koch.el @@ -0,0 +1,134 @@ +;;; org-chef-chef-koch.el --- Functions for fetching recipes from chefkoch.de. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from chefkoch.de. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun org-chef-chef-koch-extract-name (dom) + "Get the name of a recipe from an chefkoch DOM." + (dom-text (car (dom-by-class dom "page-title")))) + + +(defun org-chef-chef-koch-ingredient-to-string (dom) + (let ((amount (replace-regexp-in-string " " " " (string-trim (dom-texts (car (dom-by-tag dom 'td)))))) + (name (string-trim (dom-texts (cadr (dom-by-tag dom 'td)))))) + (format "%s %s" amount name))) + + +(defun org-chef-chef-koch-extract-ingredients (dom) + "Get the ingredients for a recipe from an chefkoch DOM." + (mapcar #'org-chef-chef-koch-ingredient-to-string (dom-by-tag (dom-by-class dom "^incredients$") 'tr))) + + +(defun org-chef-chef-koch-extract-servings (dom) + "Get the number of servings for a recipe from an chefkoch DOM." + (dom-attr (dom-elements dom 'name "^portionen$") 'value)) + + +(defun org-chef-chef-koch-extract-prep-time (dom) + "Get the amount of prep-time for a recipe from an chefkoch DOM." + (let ((str (replace-regexp-in-string "\n" " " (dom-texts (dom-by-id dom "^preparation-info$"))))) + (string-match "Arbeitszeit:[[:space:]]+ca. \\(?1:[^\.]*\\)\." str) + (match-string 1 str))) + + +(defun org-chef-chef-koch-extract-cook-time (dom) + "Get the amount of cook-time for a recipe from an chefkoch DOM." + (let ((str (replace-regexp-in-string "\n" " " (dom-texts (dom-by-id dom "^preparation-info$"))))) + (string-match "Koch-/Backzeit:[[:space:]]+ca. \\(?1:[^\.]*\\)\." str) + (match-string 1 str))) + + +(defun org-chef-chef-koch-extract-ready-in (dom) + "Get the total amount of time for a recipe from an chefkoch DOM." + "") + + +(defun org-chef-chef-koch-extract-directions (dom) + "Get the directions for a recipe from an chefkoch DOM." + (with-temp-buffer + (insert (string-trim (dom-texts (dom-by-class dom "^instructions")))) + (delete-trailing-whitespace) + (split-string (buffer-string) "\n"))) + + +(defun org-chef-chef-koch-from-dom (dom) + "Given a chefkoch.de DOM, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions" + (let* ((prep-time (org-chef-chef-koch-extract-prep-time dom)) + (cook-time (org-chef-chef-koch-extract-cook-time dom)) + (total-time (org-chef-chef-koch-extract-ready-in dom))) + + `((ingredients . ,(org-chef-chef-koch-extract-ingredients dom)) + (name . ,(org-chef-chef-koch-extract-name dom)) + (servings . ,(org-chef-chef-koch-extract-servings dom)) + (prep-time . ,prep-time) + (cook-time . ,cook-time) + (ready-in . ,total-time) + (directions . ,(org-chef-chef-koch-extract-directions dom))))) + + +(defun org-chef-chef-koch-fetch (url) + "Given a chefkoch.de URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + (cons `(source-url . ,url) (org-chef-chef-koch-from-dom dom))))) + + +(provide 'org-chef-chef-koch) +;;; org-chef-chef-koch.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-cultures-for-health.el b/elpa/org-chef-20181202.2221/org-chef-cultures-for-health.el new file mode 100644 index 00000000..d43d703a --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-cultures-for-health.el @@ -0,0 +1,98 @@ +;;; org-chef-cultures-for-health.el --- Functions for fetching recipes from culturesforhealth.com. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from culturesforhealth.com. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun org-chef-cultures-for-health-extract-name (dom) + "Get the name of a recipe from an culturesforhealth DOM." + (dom-text (car (dom-elements dom 'itemprop "^name$")))) + + +(defun org-chef-cultures-for-health-extract-ingredients (dom) + "Get the ingredients for a recipe from an culturesforhealth DOM." + (mapcar 'dom-texts (dom-elements dom 'itemprop "^ingredients$"))) + + +(defun org-chef-cultures-for-health-extract-directions (dom) + "Get the directions for a recipe from an culturesforhealth DOM." + (mapcar #'dom-texts (org-chef-dom-children (cadr (org-chef-dom-children (car (dom-elements dom 'itemprop "^recipeInstructions$"))))))) + + +(defun org-chef-cultures-for-health-from-dom (dom) + "Given a culturesforhealth.com DOM, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions" + `((ingredients . ,(org-chef-cultures-for-health-extract-ingredients dom)) + (name . ,(org-chef-cultures-for-health-extract-name dom) + ) + (servings . nil) + (prep-time . nil) + (cook-time . nil) + (ready-in . nil) + (directions . ,(org-chef-cultures-for-health-extract-directions dom)))) + + +(defun org-chef-cultures-for-health-fetch (url) + "Given a culturesforhealth.com URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + (cons `(source-url . ,url) (org-chef-cultures-for-health-from-dom dom))))) + + +(provide 'org-chef-cultures-for-health) +;;; org-chef-cultures-for-health.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-genius-kitchen.el b/elpa/org-chef-20181202.2221/org-chef-genius-kitchen.el new file mode 100644 index 00000000..2c2de7a1 --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-genius-kitchen.el @@ -0,0 +1,97 @@ +;;; org-chef-genius-kitchen.el --- Functions for fetching recipes from geniuskitchen.com. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from geniuskitchen.com. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun org-chef-genius-kitchen-extract-name (dom) + "Get the name of a recipe from an geniuskitchen DOM." + (dom-text (caddr + (seq-filter (lambda (x) (not (stringp x))) + (dom-children (car (dom-by-class dom "^recipe-header"))))))) + + +(defun org-chef-genius-kitchen-extract-ingredients (dom) + "Get the ingredients for a recipe from an geniuskitchen DOM." + (mapcar #'dom-texts (dom-elements dom 'data-ingredient ".*"))) + + +(defun org-chef-genius-kitchen-extract-servings (dom) + "Get the number of servings for a recipe from an geniuskitchen DOM." + (dom-text (car (dom-by-class (car (dom-by-class dom "^servings$")) "count")))) + + +(defun org-chef-genius-kitchen-extract-ready-in (dom) + "Get the total amount of time for a recipe from an geniuskitchen DOM." + (string-trim (dom-text (car (dom-by-class dom "time"))))) + + +(defun org-chef-genius-kitchen-extract-directions (dom) + "Get the directions for a recipe from an geniuskitchen DOM." + (let ((directions-list (dom-by-tag (car (dom-by-class dom "directions-inner")) 'li))) + (org-chef-remove-empty-strings + (mapcar #'(lambda (n) (string-trim (dom-text n))) directions-list)))) + + +(defun org-chef-genius-kitchen-fetch (url) + "Given a geniuskitchen.com URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + `((name . ,(org-chef-genius-kitchen-extract-name dom)) + (ingredients . ,(org-chef-genius-kitchen-extract-ingredients dom)) + (servings . ,(org-chef-genius-kitchen-extract-servings dom)) + (prep-time . nil) + (cook-time . nil) + (ready-in . ,(org-chef-genius-kitchen-extract-ready-in dom)) + (directions . ,(org-chef-genius-kitchen-extract-directions dom)) + (source-url . ,url))))) + + +(provide 'org-chef-genius-kitchen) +;;; org-chef-genius-kitchen.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-marmiton.el b/elpa/org-chef-20181202.2221/org-chef-marmiton.el new file mode 100644 index 00000000..57dd7e22 --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-marmiton.el @@ -0,0 +1,127 @@ +;;; org-chef-marmiton.el --- Functions for fetching recipes from marmiton.org. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck/Sébastien Le Maguer + +;; Author: Calvin Beck /Sébastien Le Maguer +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck/Sébastien Le Maguer + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from marmiton.org. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun sanitize (str) + "Sanitize the STR by removing beginning/trailing spaces extracted from a marmiton dom." + (replace-regexp-in-string "^[ \r\n]*\\(.*[^ \r\n]\\)[ \r\n]*$" "\\1" str)) + +(defun extract-dom-text (dom) + "Embedded the operation santize of dom-text from a marmiton DOM." + (sanitize (dom-text dom))) + +(defun org-chef-marmiton-extract-name (dom) + "Get the name of a recipe from a marmiton DOM." + (dom-text (car (dom-elements dom 'class "^main-title $")))) + +(defun org-chef-marmiton-extract-current-ingredient (dom) + "Extract element for the current ingredient from a marmiton DOM." + (concat + (extract-dom-text (dom-elements dom 'class "^recipe-ingredient-qt$")) + " " + (extract-dom-text (dom-elements dom 'class "^ingredient$")))) + +(defun org-chef-marmiton-extract-ingredients (dom) + "Get the ingredients for a recipe from a marmiton DOM." + (mapcar 'org-chef-marmiton-extract-current-ingredient (dom-elements dom 'class "^recipe-ingredients__list__item$"))) + +(defun org-chef-marmiton-extract-directions (dom) + "Get the directions for a recipe from a marmiton DOM." + + (mapcar 'extract-dom-text (dom-elements dom 'class "^recipe-preparation__list__item$"))) + +(defun org-chef-marmiton-extract-prep-time (dom) + "Get the preparation time for a recipe from a marmiton DOM." + (extract-dom-text + (dom-elements (dom-elements dom 'class "recipe-infos__timmings__preparation") + 'class "^recipe-infos__timmings__value$"))) + +(defun org-chef-marmiton-extract-cook-time (dom) + "Extract the cooking time for a recipe from a marmiton DOM." + (extract-dom-text + (dom-elements (dom-elements dom 'class "recipe-infos__timmings__cooking") + 'class "^recipe-infos__timmings__value$"))) + + +(defun org-chef-marmiton-extract-servings (dom) + (dom-text (car (dom-elements dom 'class "^title-2 recipe-infos__quantity__value$")))) + + + +(defun org-chef-marmiton-from-dom (dom) + "Given a marmiton.org DOM, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions" + `((ingredients . ,(org-chef-marmiton-extract-ingredients dom)) + (name . ,(org-chef-marmiton-extract-name dom)) + (servings . ,(org-chef-marmiton-extract-servings dom)) + (prep-time . ,(org-chef-marmiton-extract-prep-time dom)) + (cook-time . ,(org-chef-marmiton-extract-cook-time dom)) + (ready-in . nil) + (directions . ,(org-chef-marmiton-extract-directions dom)))) + + +(defun org-chef-marmiton-fetch (url) + "Given a marmiton.org URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + (cons `(source-url . ,url) (org-chef-marmiton-from-dom dom))))) + +(provide 'org-chef-marmiton) +;;; org-chef-marmiton.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-martha-stewart.el b/elpa/org-chef-20181202.2221/org-chef-martha-stewart.el new file mode 100644 index 00000000..a2ee19c8 --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-martha-stewart.el @@ -0,0 +1,106 @@ +;;; org-chef-martha-stewart.el --- org-chef marthastewart fetching. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from marthastewart.com. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun org-chef-martha-stewart-extract-name (dom) + "Get the name of a recipe from an marthastewart DOM." + (string-trim (dom-text (car (dom-by-class dom "^page-title$"))))) + + +(defun org-chef-martha-stewart-extract-ingredients (dom) + "Get the ingredients for a recipe from an marthastewart DOM." + (mapcar #'(lambda (n) (string-trim (dom-text n))) + (dom-by-class dom "^component-text$"))) + + +(defun org-chef-martha-stewart-extract-servings (dom) + "Get the number of servings for a recipe from an marthastewart DOM." + (string-trim (dom-text (car (dom-by-class dom "servings-data$"))))) + + +(defun org-chef-martha-stewart-extract-prep-time (dom) + "Get the amount of prep-time for a recipe from an marthastewart DOM." + (string-trim (dom-text (car (dom-by-class dom "prep-time-data$"))))) + + +(defun org-chef-martha-stewart-extract-cook-time (dom) + "Get the amount of cook-time for a recipe from an marthastewart DOM." + nil) + + +(defun org-chef-martha-stewart-extract-ready-in (dom) + "Get the total amount of time for a recipe from an marthastewart DOM." + (string-trim (dom-text (car (dom-by-class dom "total-time-data$"))))) + + +(defun org-chef-martha-stewart-extract-directions (dom) + "Get the directions for a recipe from an marthastewart DOM." + (mapcar #'(lambda (n) (string-trim (dom-texts (dom-children n)))) + (dom-by-class dom "^directions-item-text$"))) + + +(defun org-chef-martha-stewart-fetch (url) + "Given an marthastewart.com URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + + `((name . ,(org-chef-martha-stewart-extract-name dom)) + (ingredients . ,(org-chef-martha-stewart-extract-ingredients dom)) + (servings . ,(org-chef-martha-stewart-extract-servings dom)) + (prep-time . ,(org-chef-martha-stewart-extract-prep-time dom)) + (cook-time . ,(org-chef-martha-stewart-extract-cook-time dom)) + (ready-in . ,(org-chef-martha-stewart-extract-ready-in dom)) + (directions . ,(org-chef-martha-stewart-extract-directions dom)) + (source-url . ,url))))) + + +(provide 'org-chef-martha-stewart) +;;; org-chef-martha-stewart.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-nytimes.el b/elpa/org-chef-20181202.2221/org-chef-nytimes.el new file mode 100644 index 00000000..3712c585 --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-nytimes.el @@ -0,0 +1,128 @@ +;;; org-chef-nytimes.el --- Functions for fetching recipes from nytimes.com. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck/Asilata Bapat + +;; Author: Calvin Beck /Asilata Bapat +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck/Asilata Bapat + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from nytimes.com. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun org-chef-nytimes-extract-name (dom) + "Get the name of a recipe from an nytimes DOM." + (string-trim (dom-text (car (dom-by-class dom "recipe-title"))))) + + +(defun org-chef-nytimes-ingredient-to-string (dom) + "Extract string representation of a single ingredient from an nytimes DOM." + (replace-regexp-in-string + " \\([,\.]\\)" "\\1" + (string-join (org-chef-remove-empty-strings (mapcar 'string-trim (dom-strings dom))) " "))) + +(defun org-chef-nytimes-extract-ingredients (dom) + "Get the ingredients for a recipe from an nytimes DOM." + (mapcar 'org-chef-nytimes-ingredient-to-string + (dom-elements dom 'itemprop "recipeIngredient"))) + + +(defun org-chef-nytimes-extract-servings (dom) + "Get the number of servings for a recipe from an nytimes DOM." + (replace-regexp-in-string " servings" "" (dom-text (car (dom-elements dom 'itemprop "recipeYield"))))) + + +(defun org-chef-nytimes-extract-prep-time (dom) + "Get the amount of prep-time for a recipe from an nytimes DOM." + "") + + +(defun org-chef-nytimes-extract-cook-time (dom) + "Get the amount of cook-time for a recipe from an nytimes DOM." + "") + + +(defun org-chef-nytimes-extract-ready-in (dom) + "Get the total amount of time for a recipe from an nytimes DOM." + (dom-texts (dom-by-class (cadr (dom-by-tag (dom-by-class dom "recipe-time-yield") 'li)) "recipe-yield-value"))) + + +(defun org-chef-nytimes-extract-directions (dom) + "Get the directions for a recipe from an nytimes DOM." + (mapcar 'dom-texts (dom-by-tag (dom-elements dom 'itemprop "recipeInstructions") 'li))) + + +(defun org-chef-nytimes-from-dom (dom) + "Given an nytimes.com DOM, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions" + (let* ((prep-time (org-chef-nytimes-extract-prep-time dom)) + (cook-time (org-chef-nytimes-extract-cook-time dom)) + (total-time (org-chef-nytimes-extract-ready-in dom))) + + `((ingredients . ,(org-chef-nytimes-extract-ingredients dom)) + (name . ,(org-chef-nytimes-extract-name dom)) + (servings . ,(org-chef-nytimes-extract-servings dom)) + (prep-time . ,prep-time) + (cook-time . ,cook-time) + (ready-in . ,total-time) + (directions . ,(org-chef-nytimes-extract-directions dom))))) + + +(defun org-chef-nytimes-fetch (url) + "Given an nytimes.com URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + (cons `(source-url . ,url) (org-chef-nytimes-from-dom dom))))) + + +(provide 'org-chef-nytimes) +;;; org-chef-nytimes.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-pkg.el b/elpa/org-chef-20181202.2221/org-chef-pkg.el new file mode 100644 index 00000000..70f03844 --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-pkg.el @@ -0,0 +1,13 @@ +(define-package "org-chef" "20181202.2221" "Cookbook and recipe management with org-mode." + '((org "0") + (emacs "24")) + :keywords + '("convenience" "abbrev" "outlines" "org" "food" "recipes" "cooking") + :authors + '(("Calvin Beck" . "hobbes@ualberta.ca")) + :maintainer + '("Calvin Beck" . "hobbes@ualberta.ca") + :url "https://github.com/Chobbes/org-chef") +;; Local Variables: +;; no-byte-compile: t +;; End: diff --git a/elpa/org-chef-20181202.2221/org-chef-reluctant-gourmet.el b/elpa/org-chef-20181202.2221/org-chef-reluctant-gourmet.el new file mode 100644 index 00000000..47e75e9d --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-reluctant-gourmet.el @@ -0,0 +1,122 @@ +;;; org-chef-reluctant-gourmet.el --- Functions for fetching recipes from reluctantgourmet.com. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from reluctantgourmet.com. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun org-chef-reluctant-gourmet-extract-name (dom) + "Get the name of a recipe from an reluctantgourmet DOM." + (dom-text (car (dom-by-id dom "zlrecipe-title")))) + + +(defun org-chef-reluctant-gourmet-extract-ingredients (dom) + "Get the ingredients for a recipe from an reluctantgourmet DOM." + (mapcar #'(lambda (n) (string-trim (dom-text n))) (dom-by-class dom "^ingredient$"))) + + +(defun org-chef-reluctant-gourmet-extract-servings (dom) + "Get the number of servings for a recipe from an reluctantgourmet DOM." + (dom-texts (car (dom-elements dom 'itemprop "^recipeYield$")))) + + +(defun org-chef-reluctant-gourmet-extract-prep-time (dom) + "Get the amount of prep-time for a recipe from an reluctantgourmet DOM." + (dom-texts (car (dom-elements dom 'itemprop "^prepTime$")))) + + +(defun org-chef-reluctant-gourmet-extract-cook-time (dom) + "Get the amount of cook-time for a recipe from an reluctantgourmet DOM." + (dom-texts (car (dom-elements dom 'itemprop "^cookTime$")))) + + +(defun org-chef-reluctant-gourmet-extract-ready-in (dom) + "Get the total amount of time for a recipe from an reluctantgourmet DOM." + (dom-texts (car (dom-elements dom 'itemprop "^totalTime$")))) + + +(defun org-chef-reluctant-gourmet-extract-directions (dom) + "Get the directions for a recipe from an reluctantgourmet DOM." + (mapcar #'dom-text (seq-filter (lambda (x) (not (stringp x))) + (dom-elements dom 'itemprop "^recipeInstructions$")))) + + +(defun org-chef-reluctant-gourmet-from-dom (dom) + "Given a reluctantgourmet.com DOM, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions" + (let* ((prep-time (org-chef-reluctant-gourmet-extract-prep-time dom)) + (cook-time (org-chef-reluctant-gourmet-extract-cook-time dom)) + (total-time (org-chef-reluctant-gourmet-extract-ready-in dom))) + + `((ingredients . ,(org-chef-reluctant-gourmet-extract-ingredients dom)) + (name . ,(org-chef-reluctant-gourmet-extract-name dom)) + (servings . ,(org-chef-reluctant-gourmet-extract-servings dom)) + (prep-time . ,prep-time) + (cook-time . ,cook-time) + (ready-in . ,total-time) + (directions . ,(org-chef-reluctant-gourmet-extract-directions dom))))) + + +(defun org-chef-reluctant-gourmet-fetch (url) + "Given a reluctantgourmet.com URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + (cons `(source-url . ,url) (org-chef-reluctant-gourmet-from-dom dom))))) + + +(provide 'org-chef-reluctant-gourmet) +;;; org-chef-reluctant-gourmet.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-saveur.el b/elpa/org-chef-20181202.2221/org-chef-saveur.el new file mode 100644 index 00000000..e5dfc0e4 --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-saveur.el @@ -0,0 +1,139 @@ +;;; org-chef-saveur.el --- Functions for fetching recipes from saveur.com. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck/Derek Ellis + +;; Author: Calvin Beck /Derek Ellis +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck/Derek Ellis + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from saveur.com. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + (defun org-chef-saveur-chomp (str) + "Chomp leading and tailing whitespace from STR." + (replace-regexp-in-string (rx (or (: bos (* (any " \t\n"))) + (: (* (any " \t\n")) eos))) + "" + str)) + + +(defun org-chef-saveur-extract-name (dom) + "Get the name of a recipe from an saveur DOM." + (string-trim (dom-text (car (dom-by-class dom "page-title"))))) + + +(defun org-chef-saveur-extract-ingredients (dom) + "Get the ingredients for a recipe from an saveur DOM." + (remove "" + (mapcar 'org-chef-saveur-chomp + (split-string + (replace-regexp-in-string " ⁄ " "/" + (string-join (mapcar #'dom-texts (dom-by-class dom "^ingredients$")))) "\n" )))) + + +(defun org-chef-saveur-extract-servings (dom) + "Get the number of servings for a recipe from an saveur DOM." + (replace-regexp-in-string "serves " "" + (dom-text (dom-by-tag (dom-by-class dom "yield") 'span)))) + + +(defun org-chef-saveur-extract-prep-time (dom) + "Get the amount of prep-time for a recipe from an saveur DOM." + (org-chef-saveur-chomp + (dom-text (dom-by-class dom "^prep-time$")))) + + +(defun org-chef-saveur-extract-cook-time (dom) + "Get the amount of cook-time for a recipe from an saveur DOM." + (org-chef-saveur-chomp + (dom-text (dom-by-class dom "^cook-time$")))) + + +(defun org-chef-saveur-extract-ready-in (dom) + "Get the total amount of time for a recipe from an saveur DOM." + (string-trim (dom-texts (dom-by-class (cadr (dom-by-tag (dom-by-class dom "recipe-time-yield") 'li)) "recipe-yield-value")))) + + +(defun org-chef-saveur-extract-directions (dom) + "Get the directions for a recipe from an saveur DOM." + (remove "" + (mapcar 'org-chef-saveur-chomp + (split-string + (replace-regexp-in-string " ⁄ " "/" + (dom-texts + (dom-by-class dom "^instructions "))) "\n \n " )))) + +(defun org-chef-saveur-from-dom (dom) + "Given an saveur.com DOM, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions" + (let* ((prep-time (org-chef-saveur-extract-prep-time dom)) + (cook-time (org-chef-saveur-extract-cook-time dom)) + (total-time (org-chef-saveur-extract-ready-in dom))) + + `((ingredients . ,(org-chef-saveur-extract-ingredients dom)) + (name . ,(org-chef-saveur-extract-name dom)) + (servings . ,(org-chef-saveur-extract-servings dom)) + (prep-time . ,prep-time) + (cook-time . ,cook-time) + (ready-in . ,total-time) + (directions . ,(org-chef-saveur-extract-directions dom))))) + + +(defun org-chef-saveur-fetch (url) + "Given an saveur.com URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + (cons `(source-url . ,url) (org-chef-saveur-from-dom dom))))) + + +(provide 'org-chef-saveur) +;;; org-chef-saveur.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-serious-eats.el b/elpa/org-chef-20181202.2221/org-chef-serious-eats.el new file mode 100644 index 00000000..0ed4300c --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-serious-eats.el @@ -0,0 +1,113 @@ +;;; org-chef-serious-eats.el --- org-chef seriouseats fetching. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from seriouseats.com. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun org-chef-serious-eats-extract-name (dom) + "Get the name of a recipe from an seriouseats DOM." + (dom-text (car (dom-elements dom 'itemprop "^name$")))) + + +(defun org-chef-serious-eats-extract-ingredients (dom) + "Get the ingredients for a recipe from an seriouseats DOM." + (mapcar 'dom-texts (dom-elements dom 'itemprop "^recipeIngredient$"))) + + +(defun org-chef-serious-eats-extract-servings (dom) + "Get the number of servings for a recipe from an seriouseats DOM." + (dom-text (car (dom-elements dom 'itemprop "^recipeYield$")))) + + +(defun org-chef-serious-eats-extract-prep-time (dom) + "Get the amount of prep-time for a recipe from an seriouseats DOM." + (dom-text (car (dom-by-class + (cadr + (org-chef-dom-children + (car (dom-by-class dom "^recipe-about$")))) + "info")))) + + +(defun org-chef-serious-eats-extract-cook-time (dom) + "Get the amount of cook-time for a recipe from an seriouseats DOM." + nil) + + +(defun org-chef-serious-eats-extract-ready-in (dom) + "Get the total amount of time for a recipe from an seriouseats DOM." + (dom-text (car (dom-by-class + (caddr + (org-chef-dom-children + (car (dom-by-class dom "^recipe-about$")))) + "info")))) + + +(defun org-chef-serious-eats-extract-directions (dom) + "Get the directions for a recipe from an seriouseats DOM." + (mapcar #'(lambda (n) (string-trim (dom-texts (dom-children n)))) + (dom-by-class dom "^recipe-procedure-text$"))) + + +(defun org-chef-serious-eats-fetch (url) + "Given an seriouseats.com URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + + `((name . ,(org-chef-serious-eats-extract-name dom)) + (ingredients . ,(org-chef-serious-eats-extract-ingredients dom)) + (servings . ,(org-chef-serious-eats-extract-servings dom)) + (prep-time . ,(org-chef-serious-eats-extract-prep-time dom)) + (cook-time . ,(org-chef-serious-eats-extract-cook-time dom)) + (ready-in . ,(org-chef-serious-eats-extract-ready-in dom)) + (directions . ,(org-chef-serious-eats-extract-directions dom)) + (source-url . ,url))))) + + +(provide 'org-chef-serious-eats) +;;; org-chef-serious-eats.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-simply-recipes.el b/elpa/org-chef-20181202.2221/org-chef-simply-recipes.el new file mode 100644 index 00000000..831e766a --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-simply-recipes.el @@ -0,0 +1,121 @@ +;;; org-chef-simply-recipes.el --- Functions for fetching recipes from simplyrecipes.com. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from simplyrecipes.com. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun org-chef-simply-recipes-extract-name (dom) + "Get the name of a recipe from an simplyrecipes DOM." + (dom-text (car (dom-by-class dom "entry-title")))) + + +(defun org-chef-simply-recipes-extract-ingredients (dom) + "Get the ingredients for a recipe from an simplyrecipes DOM." + (mapcar 'dom-text (dom-by-class dom "^ingredient$"))) + + +(defun org-chef-simply-recipes-extract-servings (dom) + "Get the number of servings for a recipe from an simplyrecipes DOM." + (let ((servings (dom-text (car (dom-by-class dom "^yield*"))))) + (when servings + (substring servings 7)))) + + +(defun org-chef-simply-recipes-extract-prep-time (dom) + "Get the amount of prep-time for a recipe from an simplyrecipes DOM." + (dom-text (car (dom-by-class dom "preptime")))) + + +(defun org-chef-simply-recipes-extract-cook-time (dom) + "Get the amount of cook-time for a recipe from an simplyrecipes DOM." + (let ((cook-time (dom-by-class dom "cooktime")) + (other-time (dom-by-class dom "othertime"))) + (dom-text (car (if (null cook-time) other-time cook-time))))) + + +(defun org-chef-simply-recipes-extract-directions (dom) + "Get the directions for a recipe from an simplyrecipes DOM." + (mapcar #'dom-text (seq-filter (lambda (x) (not (stringp x))) + (dom-children (car (dom-elements dom 'itemprop "^recipeInstructions$")))))) + + +(defun org-chef-simply-recipes-from-dom (dom) + "Given a simplyrecipes.com DOM, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions" + (let* ((prep-time (org-chef-simply-recipes-extract-prep-time dom)) + (cook-time (org-chef-simply-recipes-extract-cook-time dom))) + + `((ingredients . ,(org-chef-simply-recipes-extract-ingredients dom)) + (name . ,(org-chef-simply-recipes-extract-name dom) + ) + (servings . ,(org-chef-simply-recipes-extract-servings dom)) + (prep-time . ,prep-time) + (cook-time . ,cook-time) + (ready-in . nil) + (directions . ,(org-chef-simply-recipes-extract-directions dom))))) + + +(defun org-chef-simply-recipes-fetch (url) + "Given a simplyrecipes.com URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + (cons `(source-url . ,url) (org-chef-simply-recipes-from-dom dom))))) + + +(provide 'org-chef-simply-recipes) +;;; org-chef-simply-recipes.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-steamy-kitchen.el b/elpa/org-chef-20181202.2221/org-chef-steamy-kitchen.el new file mode 100644 index 00000000..6591c0b4 --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-steamy-kitchen.el @@ -0,0 +1,105 @@ +;;; org-chef-steamy-kitchen.el --- org-chef steamykitchen fetching. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from steamykitchen.com. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun org-chef-steamy-kitchen-extract-name (dom) + "Get the name of a recipe from an steamykitchen DOM." + (dom-text (car (dom-elements dom 'itemprop "^name$")))) + + +(defun org-chef-steamy-kitchen-extract-ingredients (dom) + "Get the ingredients for a recipe from an steamykitchen DOM." + (mapcar 'dom-texts (dom-elements dom 'itemprop "^ingredients$"))) + + +(defun org-chef-steamy-kitchen-extract-servings (dom) + "Get the number of servings for a recipe from an steamykitchen DOM." + (dom-text (car (dom-elements dom 'itemprop "^recipeYield$")))) + + +(defun org-chef-steamy-kitchen-extract-prep-time (dom) + "Get the amount of prep-time for a recipe from an steamykitchen DOM." + (dom-text (dom-parent dom (car (dom-elements dom 'itemprop "^prepTime$"))))) + + +(defun org-chef-steamy-kitchen-extract-cook-time (dom) + "Get the amount of cook-time for a recipe from an steamykitchen DOM." + (dom-text (dom-parent dom (car (dom-elements dom 'itemprop "^cookTime$"))))) + + +(defun org-chef-steamy-kitchen-extract-ready-in (dom) + "Get the total amount of time for a recipe from an steamykitchen DOM." + nil) + + +(defun org-chef-steamy-kitchen-extract-directions (dom) + "Get the directions for a recipe from an steamykitchen DOM." + (mapcar #'(lambda (n) (string-trim (dom-texts n))) + (org-chef-dom-children (car (dom-by-class dom "^instructions$"))))) + + +(defun org-chef-steamy-kitchen-fetch (url) + "Given an steamykitchen.com URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url" + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + + `((name . ,(org-chef-steamy-kitchen-extract-name dom)) + (ingredients . ,(org-chef-steamy-kitchen-extract-ingredients dom)) + (servings . ,(org-chef-steamy-kitchen-extract-servings dom)) + (prep-time . ,(org-chef-steamy-kitchen-extract-prep-time dom)) + (cook-time . ,(org-chef-steamy-kitchen-extract-cook-time dom)) + (ready-in . ,(org-chef-steamy-kitchen-extract-ready-in dom)) + (directions . ,(org-chef-steamy-kitchen-extract-directions dom)) + (source-url . ,url))))) + + +(provide 'org-chef-steamy-kitchen) +;;; org-chef-steamy-kitchen.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-utils.el b/elpa/org-chef-20181202.2221/org-chef-utils.el new file mode 100644 index 00000000..a9aadb24 --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-utils.el @@ -0,0 +1,65 @@ +;;; org-chef-utils.el --- Utilities for org-chef. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Utility functions for org-chef. + +;;; Code: + +(require 'cl-macs) + +(defun org-chef-remove-empty-strings (lst) + "Filter out any empty strings in a list of strings (LST)." + (seq-filter (lambda (x) (/= (length x) 0)) lst)) + + +(defun org-chef-dom-children (dom) + "Get the child nodes of the DOM, remove strings." + (seq-filter (lambda (x) (not (stringp x))) + (dom-children dom))) + + +(defun org-chef-insert-org-list (lst &optional bullet) + "Insert LST as an ‘org-mode’ plain list. + +The optional argument BULLET specifies which type of bullet point +should be used." + (mapcar (lambda (x) (progn (insert (format "%s " (string-trim x))) + (org-cycle) + (org-delete-backward-char 1) + (org-ctrl-c-minus) + (if bullet (org-cycle-list-bullet bullet)) + (org-return))) + lst)) + + +(provide 'org-chef-utils) +;;; org-chef-utils.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef-wordpress.el b/elpa/org-chef-20181202.2221/org-chef-wordpress.el new file mode 100644 index 00000000..fe831575 --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef-wordpress.el @@ -0,0 +1,113 @@ +;;; org-chef-wordpress.el --- org-chef wordpress fetching. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; Functions for fetching information from wordpress sites. + +;;; Code: + + +(require 'org-chef-utils) +(require 'dom) + + +(defun org-chef-wordpress-extract-name (dom) + "Get the name of a recipe from an wordpress DOM." + (dom-text (car (dom-by-class dom "^wprm-recipe-name")))) + + +(defun org-chef-wordpress-extract-ingredients (dom) + "Get the ingredients for a recipe from an wordpress DOM." + (mapcar #'(lambda (n) (string-trim (dom-texts n))) (dom-by-class dom "^wprm-recipe-ingredient$"))) + + +(defun org-chef-wordpress-extract-servings (dom) + "Get the number of servings for a recipe from an wordpress DOM." + (dom-texts (car (dom-by-class dom "wprm-recipe-servings$")))) + + +(defun org-chef-wordpress-extract-prep-time (dom) + "Get the amount of prep-time for a recipe from an wordpress DOM." + (dom-texts (car (dom-by-class dom "^wprm-recipe-time$")))) + + +(defun org-chef-wordpress-extract-cook-time (dom) + "Get the amount of cook-time for a recipe from an wordpress DOM." + (dom-texts (cadr (dom-by-class dom "^wprm-recipe-time$")))) + + +(defun org-chef-wordpress-extract-ready-in (dom) + "Get the total amount of time for a recipe from an wordpress DOM." + (dom-texts (caddr (dom-by-class dom "^wprm-recipe-time$")))) + + +(defun org-chef-wordpress-extract-directions (dom) + "Get the directions for a recipe from an wordpress DOM." + (org-chef-remove-empty-strings (mapcar #'(lambda (n) (string-trim (dom-texts n))) (dom-by-class dom "^wprm-recipe-instruction$")))) + + +(defun org-chef-is-wordpress-p (dom) + "Check if a DOM corresponds to a wordpress website." + (dom-by-class dom "^wprm-recipe-container$")) + + +(defun org-chef-wordpress-fetch (url) + "Given an wordpress URL, retrieve the recipe information. + +This returns an alist with the following keys: + +- name +- ingredients +- servings +- prep-time +- cook-time +- ready-in +- directions +- source-url + +If this is not a wordpress site, then return nil." + (with-current-buffer (url-retrieve-synchronously url) + (let ((dom (libxml-parse-html-region (point-min) (point-max)))) + + (if (org-chef-is-wordpress-p dom) + `((name . ,(org-chef-wordpress-extract-name dom)) + (ingredients . ,(org-chef-wordpress-extract-ingredients dom)) + (servings . ,(org-chef-wordpress-extract-servings dom)) + (prep-time . ,(org-chef-wordpress-extract-prep-time dom)) + (cook-time . ,(org-chef-wordpress-extract-cook-time dom)) + (ready-in . ,(org-chef-wordpress-extract-ready-in dom)) + (directions . ,(org-chef-wordpress-extract-directions dom)) + (source-url . ,url)) + nil)))) + + +(provide 'org-chef-wordpress) +;;; org-chef-wordpress.el ends here diff --git a/elpa/org-chef-20181202.2221/org-chef.el b/elpa/org-chef-20181202.2221/org-chef.el new file mode 100644 index 00000000..90c4acee --- /dev/null +++ b/elpa/org-chef-20181202.2221/org-chef.el @@ -0,0 +1,136 @@ +;;; org-chef.el --- Cookbook and recipe management with org-mode. -*- lexical-binding: t; -*- + +;; Copyright (C) 2018 Calvin Beck + +;; Author: Calvin Beck +;; URL: https://github.com/Chobbes/org-chef +;; Created: 2018 +;; Version: 0.1.3 +;; Keywords: convenience, abbrev, outlines, org, food, recipes, cooking +;; Package-Requires: ((org "0") (emacs "24")) + +;; Copyright 2018 Calvin Beck + +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, copy, +;; modify, merge, publish, distribute, sublicense, and/or sell copies +;; of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be +;; included in all copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; org-chef is a package for managing recipes in org-mode. One of the +;; main features is that it can automatically extract recipes from +;; websites like allrecipes.com + +;;; Code: + + +(require 'org-chef-utils) +(require 'org-chef-all-recipes) +(require 'org-chef-genius-kitchen) +(require 'org-chef-simply-recipes) +(require 'org-chef-martha-stewart) +(require 'org-chef-budget-bytes) +(require 'org-chef-cultures-for-health) +(require 'org-chef-marmiton) +(require 'org-chef-serious-eats) +(require 'org-chef-reluctant-gourmet) +(require 'org-chef-chef-koch) +(require 'org-chef-steamy-kitchen) +(require 'org-chef-nytimes) +(require 'org-chef-saveur) +(require 'org-chef-wordpress) + + +(defun org-chef-recipe-insert-org (recipe) + "Insert a RECIPE as an ‘org-mode’ heading." + (org-insert-heading) + (insert (cdr (assoc 'name recipe))) + (org-return) + (org-set-property "source-url" (cdr (assoc 'source-url recipe))) + (org-set-property "servings" (cdr (assoc 'servings recipe))) + (org-set-property "prep-time" (format "%s" (cdr (assoc 'prep-time recipe)))) + (org-set-property "cook-time" (format "%s" (cdr (assoc 'cook-time recipe)))) + (org-set-property "ready-in" (format "%s" (cdr (assoc 'ready-in recipe)))) + (org-insert-subheading t) + (insert "Ingredients") + (org-return) + (org-return) + (org-chef-insert-org-list (cdr (assoc 'ingredients recipe))) + (org-return) + (org-return) + (org-insert-heading) + (insert "Directions") + (org-return) + (org-return) + (org-chef-insert-org-list (cdr (assoc 'directions recipe)) "1.")) + + +(defun org-chef-recipe-org-string (recipe) + "Get an ‘org-mode’ heading string for a RECIPE." + (with-temp-buffer (org-mode) + (org-chef-recipe-insert-org recipe) + (buffer-string))) + + +(defun org-chef-match-url (BASE URL) + "Match URL against a BASE url." + (not (null (string-match-p (regexp-quote BASE) URL)))) + + +(defun org-chef-fetch-recipe-specific-url (URL) + "Look up a recipe based on a specific URL." + (cond + ((org-chef-match-url "allrecipes.com" URL) (org-chef-all-recipes-fetch URL)) + ((org-chef-match-url "geniuskitchen.com" URL) (org-chef-genius-kitchen-fetch URL)) + ((org-chef-match-url "simplyrecipes.com" URL) (org-chef-simply-recipes-fetch URL)) + ((org-chef-match-url "marthastewart.com" URL) (org-chef-martha-stewart-fetch URL)) + ((org-chef-match-url "budgetbytes.com" URL) (org-chef-budget-bytes-fetch URL)) + ((org-chef-match-url "culturesforhealth.com" URL) (org-chef-cultures-for-health-fetch URL)) + ((org-chef-match-url "marmiton.org" URL) (org-chef-marmiton-fetch URL)) + ((org-chef-match-url "seriouseats.com" URL) (org-chef-serious-eats-fetch URL)) + ((org-chef-match-url "reluctantgourmet.com" URL) (org-chef-reluctant-gourmet-fetch URL)) + ((org-chef-match-url "chefkoch.de" URL) (org-chef-chef-koch-fetch URL)) + ((org-chef-match-url "steamykitchen.com" URL) (org-chef-steamy-kitchen-fetch URL)) + ((org-chef-match-url "nytimes.com" URL) (org-chef-nytimes-fetch URL)) + ((org-chef-match-url "saveur.com" URL) (org-chef-saveur-fetch URL)) + (t nil))) + + +(defun org-chef-fetch-recipe (URL) + "Look up a recipe at a URL." + (let ((fetched-recipe (org-chef-fetch-recipe-specific-url URL))) + (if fetched-recipe + fetched-recipe + (org-chef-wordpress-fetch URL)))) + + +(defun org-chef-insert-recipe (URL) + "Prompt for a recipe URL, and then insert the recipe at point." + (interactive "sRecipe URL: ") + (org-chef-recipe-insert-org (org-chef-fetch-recipe URL))) + + +(defun org-chef-get-recipe-from-url () + "Prompt for a recipe URL, and return the ‘org-mode’ string." + (let ((URL (read-string "Recipe URL: "))) + (org-chef-recipe-org-string (org-chef-fetch-recipe URL)))) + + +(provide 'org-chef) +;;; org-chef.el ends here diff --git a/elpa/org-chef-readme.txt b/elpa/org-chef-readme.txt deleted file mode 100644 index b59d21fe..00000000 --- a/elpa/org-chef-readme.txt +++ /dev/null @@ -1,3 +0,0 @@ -org-chef is a package for managing recipes in org-mode. One of the -main features is that it can automatically extract recipes from -websites like allrecipes.com