# -*- mode: org -*-
#+PROPERTY: COOKIE_DATA todo recursive

* Useful resources
  - Lua5.1
    - [[http://www.lua.org/manual/5.1/manual.html#8][bnf syntax]]
    - [[http://www.lua.org/manual/5.1/index.html#index][function index]]
  - Lua5.2
    - [[http://www.lua.org/manual/5.2/manual.html#9][syntax]]
    - [[http://www.lua.org/manual/5.2/#index][function index]]


* TODO Fontify function parameters as variable names
* TODO Fontify variable names in line-continuation statements
  - local
      foo,bar,baz = xyz,xyyz,xyyz
  - function xyzzy(
        foo,
        bar,
        baz
    )

* TODO left-shift parenthesis that closes function parameter block
  local foobar = function(
      param1,
      param2,
      param3
  )
      dosmth()
  end

* TODO issue #33
  a = 
     {
     }
     b = 
        {
        }

* TODO finish works in lua-compat branch for Emacs21/Emacs22

* TODO put text property 'lua-last-stmt-begin
  - continuation-line detection becomes a one-liner
  - multiline fontification becomes easier
  - beginning-of-defun is a one-liner

  - if property value is a marker, it will get updated on each edit,
    that's not necessary and might cause performance impact
  - if property value is an integer, it needs to be updated before use
    1. `buffer-access-fontify-functions' / `buffer-access-fontified-property'
    2. maintain `stmt-begin-up-to-date-pos' point
       - after-change function sets `stmt-begin-up-to-date-pos' to
         (line-beginning-position)
       - (defun get-stmt-beginning-pos (pos) ...)
	 - (when (< stmt-begin-up-to-date-pos pos)
             ...
             (setq stmt-begin-up-to-date-pos pos))
         - return property at position pos

* TODO Support line-continuation statements [0/2]
  - [ ]  assignments
    x,y = long_value,
          other_long_value
  - [ ] `for ... do' operators

* TODO update site [0/2]
** TODO reuse section-aware template
** TODO add section for release downloading

* TODO [#C] Improve lua-prefix-key machinery [0/2]
  - [ ] add docs
  - [ ] improve setting prefix-key
    Currently, prefix-key is parsed from a macro string (which may
    contain more than one key) and all keys but the first one are
    silently removed. Maybe there's a better way to do it.

* DONE Fix braces/parens that reduce indent by const offset
   this causes wrong behavior when indented block was
   anchored to first line, e.g.
   my_func( hello,
            world
         )

* DONE lua-mark-all-multiline-literals [5/5]
  - [X] process --[[ as multiline comment
  - [X] process ---[[ as single-line comment
    distinguish by syntax state of last dash before square bracket
  - [X] don't recognize [[ in comments or literals
  - [X] extend region backwards if BEGIN is inside multiline literal
  - [X] don't change buffer-modified-p state

* TODO [#C] Redo syntax engine using semantic/wisent
