shakespeare-mode icon indicating copy to clipboard operation
shakespeare-mode copied to clipboard

An emacs major mode for editing hamlet, lucius, and julius files

#+AUTHOR: Cody Reichert #+EMAIL: [email protected] #+TITLE: shakespeare-mode.el [[http://melpa.org/#/shakespeare-mode][file:http://melpa.org/packages/shakespeare-mode-badge.svg]] [[http://stable.melpa.org/#/shakespeare-mode][file:http://stable.melpa.org/packages/shakespeare-mode-badge.svg]]

A major mode that provides syntax highlighting and indentation for editing Shakespearean templates (hamlet, lucius, julius).

[[file:https://cloud.githubusercontent.com/assets/7034627/5676535/fced8f2a-979c-11e4-8619-683bba400707.jpg]]

** Installation You can install this package from the MELPA repository:

#+BEGIN_SRC bash M-x package-install RET shakespeare-mode RET #+END_SRC

Note: shakespeare-mode is also available via [[http://stable.melpa.org/#/shakespeare-mode][melpa-stable]] .

Alternatively, clone this repo and add the directory to your emacs load path by adding the following lines to your .emacs:

#+BEGIN_SRC elisp (add-to-list 'load-path "/path/to/this/clone") (require 'shakespeare-mode) #+END_SRC

And that's it. Open up a hamlet, lucius, or julius file to make sure it worked.

** Usage After installation, you'll have three major modes. =.hamlet=, =.lucius=, and =.julius= files should inherit their mode automatically.

#+BEGIN_SRC elisp shakespeare-hamlet-mode shakespeare-julius-mode shakespeare-lucius-mode #+END_SRC

They each have mode-maps and hooks you use to add functions and key bindings to them individually.

Alternatively, a minor mode is also loaded with mode-maps and mode-hooks that runs in /all/ shakespeare buffers. To use this, just hook into =shakespeare-mode=.

** Features Currently, shakespeare-mode supports basic syntax highlighting and indentation for hamlet, lucius, and julius. Cassius files are not yet supported.

*** Variable Interpolation All of the modes support syntax highlighting for variable interpolation:

#+BEGIN_SRC elisp
    #{...}
    @{...}
    ^{...}
   @?{...}
    _{...}
#+END_SRC

*** Hamlet Mode shakespeare-hamlet-mode has full support for most hamlet features (submit an issue if any are missing!):

- control flow statements (=$if=, =$forall=, =$maybe=, etc)
- shorthand class and id attributes (=<p .some-class #some-id>=)
- optional quotes around attribute values (=<input type=text>=)
- no need to explicitly tag =div= elements. (=<.mydiv>=)

*** Lucius Mode shakespeare-lucius-mode supports a lot of the same things as shakespeare-hamlet-mode

- url and variable interpolation
- indentation for nested css blocks
- variable declaration
- lucius mixins

*** Julius Mode shakespeare-julius-mode is the most basic of the modes, but supports Javascript syntax highlighting indentation and the variable interpolation mentioned above.

** Todo (in order of priority) - Support for setting option attributes with colons, as dicussed [[http://www.yesodweb.com/book/shakespearean-templates#shakespearean-templates_attributes][here]]. - Support far Cassius (shakespeare-cassius-mode) - Integration with html2hamlet for quick formatting of buffers and regions (eg, copy in html and quickly reformat to hamlet.)

** Thanks [[https://github.com/purcell/less-css-mode][less-css-mode]] I was originally using less-css-mode for editing lucius files, so I used parts of this mode's modified syntax-table to compose lucius'.

[[https://github.com/lightquake/hamlet-mode][hamlet mode]] I was able to use parts of the regexp's from this repo for syntax highlighting, and parts of the syntax-table. There's been some reformatting and minor restructure but this was a big help.

** License **** This software is licensed under the GNU General Publice License Version 3.0

 This program is free software: you can redistribute it and/or
 modify it under the terms of the GNU General Public License as
 published by the Free Software Foundation, either version 3 of the
 License, or (at your option) any later version.  This program is
 distributed in the hope that it will be useful, but WITHOUT ANY
 WARRANTY; without even the implied warranty of MERCHANTABILITY or
 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
 License for more details.  You should have received a copy of the
 GNU General Public License along with this program. If not, see
 http://www.gnu.org/licenses/