{"id":15337278,"url":"https://github.com/vy/demacs","last_synced_at":"2025-10-16T13:30:36.332Z","repository":{"id":542040,"uuid":"171939","full_name":"vy/demacs","owner":"vy","description":"An extensible Common Lisp utility software to ease the definitions in language by supplying a standard syntax.","archived":false,"fork":false,"pushed_at":"2009-04-09T14:23:29.000Z","size":90,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-12-06T15:22:08.318Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vy.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2009-04-09T14:23:12.000Z","updated_at":"2023-12-31T21:30:00.000Z","dependencies_parsed_at":"2022-07-07T15:30:22.355Z","dependency_job_id":null,"html_url":"https://github.com/vy/demacs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vy%2Fdemacs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vy%2Fdemacs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vy%2Fdemacs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vy%2Fdemacs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vy","download_url":"https://codeload.github.com/vy/demacs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236721597,"owners_count":19194455,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-01T10:20:24.217Z","updated_at":"2025-10-16T13:30:35.989Z","avatar_url":"https://github.com/vy.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\t    E     X     T     E     N     S     I     B     L     E\n                                        \n            |#%#\u0026\u0026.  |##\u0026%\u0026#  |#\\  /|#    /#\\     ,\u0026#%#\u0026.  ,\u0026##%#\u0026.\n            |#   |#  |#       |#\u0026\\/\u0026|#   /%:#\\   |#        |#\n            |#   |#  |##\u0026%\u0026#  |#    |#  |#   |#  |#        `+\u0026#%#+,\n            |#   |#  |#       |#    |#  |####|#  |#              |#\n            |#$$$|#  |##\u0026%\u0026#  |#    |#  |#   |#  `+#%#\u0026#~  ~\u0026#%\u0026#^\n                                        \n        D    E    F    I    N    E    R       M    A    C    R    O    S\n\t\t\t\t\t\nDemacs is an extensible Common Lisp utility software to ease the definitions in\nlanguage by supplying a standard syntax. Demacs is written from scratch with the\nidea of syntax of cl-def[1] in mind. Despite there are some other definer\nutilities in the wide (e.g. definer[2], cl-def[1]), almost all of them lack of\nat least one of below functionalities.\n\n- Extensibility. (definer[2] doesn't support extensions.)\n\n- Affordable dependency. (cl-def[1] depends on some libraries, and those\n  libraries depend on some other libraries and so on... You're required to\n  install a dozen of libraries to benefit from a single definer utility.\n  Furthermore, a major portion of related libraries are not available via\n  ASDF-INSTALL.)\n\nTo summarize, demacs is implemented with KISS[3] principle in mind. And as a\nbonus, demacs has no library dependencies.\n\n[1] http://common-lisp.net/project/cl-def/\n[2] http://www.common-lisp.net/project/definer\n[3] http://en.wikipedia.org/wiki/KISS_principle\n\n\n\n\t\t\t --- S   Y   N   T   A   X ---\n\n(def function-spec name lambda-list [[declaration* | documentation]] form*)\nfunction-spec ::= function |  (function {function-option}*)\nfunction-option ::= i | o | d | e\n\n(def macro-spec name macro-lambda-list [[declaration* | documentation]] form*)\nmacro-spec ::= macro | (macro {macro-option}*)\nmacro-option ::= o | d | e\n\n(def compiler-macro-spec name macro-lambda-list [[declaration* | documentation]] form*)\ncompiler-macro-spec ::= compiler-macro | (compiler-macro {macro-option*})\n\n(def generic-spec name gf-lambda-list [[{method-description}*]])\ngeneric-spec ::= generic | (generic {generic-option}* [[gf-option*]])\ngeneric-option ::= o | d | e\n\n(def method-spec name specialized-lambda-list [[declaration* | documentation]] form*)\nmethod-spec ::= method | (method {method-option}* [[method-qualifier*]])\nmethod-option ::= o | d\n\n(def (type-spec) name deftype-lambda-list [[declaration* | documentation]] form*)\ntype-spec ::= type | (type {type-option}*)\ntype-option ::= e\n\n(def print-object-spec object (self stream) [[declaration* | documentation]] form*)\nprint-object-spec ::= print-object | (print-object \u0026key print-identity print-type package)\n\n(def setf-spec name defsetf-lambda-list (new-value) [[declaration* | documentation]] form*)\nsetf-spec ::= setf | (setf {setf-option}*)\nsetf-option ::= o | d\n\n(def constant-spec name value)\nconstant-spec ::= constant | (constant {variable-option}* \u0026key test documentation)\nvariable-option := e\n\n(def special-variable-spec name [value])\nspecial-variable-spec ::= special-variable | (special-variable {variable-option}* \u0026key documentation)\n\n(def symbol-macro-spec name form)\nsymbol-macro-spec ::= symbol-macro | (symbol-macro {variable-option}*)\n\n(def class-spec name ({superclass}*) ({slot-specifier}*) [[class-option]])\nclass-spec ::= class | (class {class-option}* \u0026key initarg-format accessor-format reader-format writer-format)\nclass-option ::= e | a | s | n | c | r | w | m\n\n(def condition-spec name (parent-type*) ({slot-spec}*) option*)\ncondition-spec ::= condition | (condition {class-option}* \u0026key initarg-format accessor-format reader-format writer-format)\n\n(def struct-spec name-and-options [documentation] {slot-description}*)\nname-and-options ::= structure-name | (structure-name [[options]])\nstruct-spec ::= struct | (struct {class-option}*)\n\ni -- Inline function.\no -- Make optimization declarations.\nd -- Make debugging declarations.\ne -- Export function.\na -- Export class accessors.\ns -- Export slot symbols.\nn -- Introduce :INITARG keywords into slot specifiers.\nc -- Introduce :ACCESSOR keywords into slot specifiers.\nr -- Introduce :READER keywords into slot specifiers.\nw -- Introduce :WRITER keywords into slot specifiers.\nm -- Make a MAKE-FOO function according to the class. (Exported if class is also\n     requested to be exported.)\n\n\n\t   --- E   X   T   E   N   S   I   B   I   L   I   T   Y ---\n\nAll definers in demacs first inherits DEFINER class. And based on DEFINER class,\nINITIALIZE-DEFINER and EXPAND-DEFINER gets called. Used CLOS architecture, helps\nprogrammers to benefit from inherited classes methods and eases implementation\nof definers. For instance, consider macro definer:\n\n  (defclass macro-definer (function-definer) ())\n  \n  (defmethod available-definer-options ((definer macro-definer))\n    (list #\\o #\\d #\\e))\n  \n  (defmethod expand-definer ((definer macro-definer))\n    (expand-function-like-definer definer 'defmacro))\n\nThere are various helper functions served with the package to ease the\nimplementation of new definers. Decide which file fits better to your new\ndefiner -- Will it have a function-like, variable-like or miscelanous form? --\nand check the existing samples in the existing file.\n\n\n\t       --- I   N   D   E   N   T   A   T   I   O   N ---\n\nBecause of definer macros don't play well with the existing lisp indentation\nsemantics of editors, it can sometimes become a pain to indent definer forms in\nan appropriate style. To solve this problem, see indentation scripts supplied\nunder contrib directory.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvy%2Fdemacs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvy%2Fdemacs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvy%2Fdemacs/lists"}