From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Emanuel Berg via Users list for the GNU Emacs text editor Newsgroups: gmane.emacs.help Subject: good enough for MELPA work? Date: Wed, 26 Feb 2020 08:27:03 +0100 Message-ID: <87imjtg660.fsf@ebih.ebihd> Reply-To: Emanuel Berg Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="4067"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:FPgoKFPttgcTjJzkWQXz0N3h6N0= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Wed Feb 26 08:29:15 2020 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1j6r87-0000zG-Mi for geh-help-gnu-emacs@m.gmane-mx.org; Wed, 26 Feb 2020 08:29:15 +0100 Original-Received: from localhost ([::1]:38956 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6r86-00057G-P9 for geh-help-gnu-emacs@m.gmane-mx.org; Wed, 26 Feb 2020 02:29:14 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:38738) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6r67-0004gn-A9 for help-gnu-emacs@gnu.org; Wed, 26 Feb 2020 02:27:12 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6r66-0005qk-0Z for help-gnu-emacs@gnu.org; Wed, 26 Feb 2020 02:27:11 -0500 Original-Received: from ciao.gmane.io ([159.69.161.202]:54242) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6r65-0005kn-Q0 for help-gnu-emacs@gnu.org; Wed, 26 Feb 2020 02:27:09 -0500 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1j6r63-000WaR-Vl for help-gnu-emacs@gnu.org; Wed, 26 Feb 2020 08:27:07 +0100 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: help-gnu-emacs@gnu.org Mail-Copies-To: never X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 159.69.161.202 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:122475 Archived-At: OK, I got it to work, the code looks OK. I used (checkdoc-current-buffer t) to help with the conventions. It (checkdoc) still complains about the first line, but that is OK, right? So that is a bug, if indeed alright. It also complains about every function not being documented but I think not everything has to be, only interactive functions for sure. Maybe I'll still do it later, just to shut it up and prove who has the better fighter and the better gym. The one thing I wonder tho is, does Emacs have one global namespace? If so, should you adhere to some convention with respect to names? How do you avoid collisions? Personally I only have a couple of packages from M/ELPA but I know some people are big consumers, so I wonder how that works out, for them? ;;; isbn-verify - Verify ISBN-10 and ISBN-13 -*- lexical-binding: t -*- ;; ;;; Commentary: ;; ;; This Elisp package provides functions to ;; verify ISBNs by computing their check ;; digits. The package can be found here: ;; ;; ;; For more info on ISBNs and how the check ;; digits are computed, see: ;; ;; ;; To see how it works, try ;; `check-isbn-at-point' on these two Biblatex ;; entries, the first one with ISBN-10, the ;; second with ISBN-13. Place point at the ;; beginning of the ISBN, then do M-x ciap RET ;; ;; @book{russia-and-the-arms-trade, ;; author = {Ian Anthony}, ;; isbn = {0-19-829278-3}, ;; publisher = {Oxford}, ;; title = {Russia and the Arms Trade}, ;; year = 1998 ;; } ;; ;; @book{baa-lo-4, ;; author = {Yukito Kishiro}, ;; isbn = {978-1-61262-294-1}, ;; publisher = {Kodansha}, ;; title = {Battle Angel Alita: The Last Order 4}, ;; year = {2014 (2011)} ;; } ;; ;; Or, with Lisp: ;; ;; (checksum-isbn-10 "0-19-829576-6") ; 6 ;; (checksum-isbn-13 "978-1-61262-294-1") ; 1 ;; ;;; Code: (require 'cl-lib) (defun digits-only-string (str) (replace-regexp-in-string "[^0-9]" "" str) ) (defun check-isbn-at-point () "Compute and echo the check digit from the ISBN at point." (interactive) (let*((isbn-string (thing-at-point 'symbol t)) (digits-only (digits-only-string isbn-string)) (num-digits (length digits-only)) (check-digit (if (> num-digits 10) (checksum-isbn-13 digits-only) (checksum-isbn-10 digits-only) ))) (message "check digit: %s" check-digit) )) (defalias 'ciap #'check-isbn-at-point) (defun char-to-int (c) (- c ?0)) (defun isbn-integer-list (isbn) (let*((digits-only (digits-only-string isbn)) (isbn-list (string-to-list digits-only)) (isbn-ints (cl-map 'list (lambda (c) (char-to-int c)) isbn-list) )) isbn-ints) ) (defun checksum-isbn-13 (isbn) (let*((isbn-ints (isbn-integer-list isbn)) (sum 0)) (cl-loop for e in isbn-ints for i from 0 to 11 do (progn (message "%d" i) (cl-incf sum (* e (or (and (zerop (mod i 2)) 1) 3))) ) ) (let ((checksum (- 10 (mod sum 10)))) (if (= 10 checksum) 0 checksum) ))) ;; 13 ISBN-13 tests: ;; ;; (checksum-isbn-13 "91-518-4657-8") ; 8 ;; (checksum-isbn-13 "978-1-63236-616-0") ; 0 ;; (checksum-isbn-13 "978-91-0-012814-2") ; 2 ;; (checksum-isbn-13 "978-91-29-59023-4") ; 4 ;; (checksum-isbn-13 "978-91-7037-681-8") ; 8 ;; (checksum-isbn-13 "978-91-7515-205-9") ; 9 ;; (checksum-isbn-13 "978-91-7515-317-9") ; 9 ;; (checksum-isbn-13 "978-91-86936-31-0") ; 0 ;; (checksum-isbn-13 "978-91-87861-54-3") ; 3 ;; (checksum-isbn-13 "978-91-87861-67-3") ; 3 ;; (checksum-isbn-13 "978-91-87861-99-4") ; 4 ;; (checksum-isbn-13 "9780062802187") ; 7 ;; (checksum-isbn-13 "9789188805034") ; 4 (defun checksum-isbn-10 (isbn) (let*((isbn-ints (isbn-integer-list isbn)) (sum 0) ) (cl-loop for e in isbn-ints for i downfrom 10 to 2 do (cl-incf sum (* e i)) ) (let ((checksum (mod (- 11 (mod sum 11)) 11))) (if (= 10 checksum) "X" checksum) ))) ;; 10 ISBN-10 tests: ;; ;; (checksum-isbn-10 "0-201-53992-6") ; 6 ;; (checksum-isbn-10 "0312168144") ; 4 ;; (checksum-isbn-10 "1-4012-0622-0") ; 0 ;; (checksum-isbn-10 "1616558717") ; 7 ;; (checksum-isbn-10 "91-510-6483-9") ; 9 ;; (checksum-isbn-10 "91-7054-940-0") ; 0 ;; (checksum-isbn-10 "91-7089-710-7") ; 7 ;; (checksum-isbn-10 "91-85668-01-X") ; X ;; (checksum-isbn-10 "91-88930-23-8") ; 8 ;; (checksum-isbn-10 "9177988515") ; 5 (provide 'isbn-verify) ;;; isbn-verify.el ends here -- underground experts united http://user.it.uu.se/~embe8573 https://dataswamp.org/~incal