(*********************************************************************************)
(*                Chamo                                                          *)
(*                                                                               *)
(*    Copyright (C) 2003-2021 Institut National de Recherche en Informatique     *)
(*    et en Automatique. All rights reserved.                                    *)
(*                                                                               *)
(*    This program is free software; you can redistribute it and/or modify       *)
(*    it under the terms of the GNU Lesser General Public License version        *)
(*    3 as published by the Free Software Foundation.                            *)
(*                                                                               *)
(*    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, write to the Free Software                *)
(*    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA                   *)
(*    02111-1307  USA                                                            *)
(*                                                                               *)
(*    Contact: Maxence.Guesdon@inria.fr                                          *)
(*                                                                               *)
(*********************************************************************************)

(** ChangeLog sourceview mode. *)

let _ = Mode_changelog_rc.read ()
let _ = Mode_changelog_rc.write ()

let mode_name = Mode_changelog_rc.mode_name

let new_day_entry (v : Sourceview.sourceview) args =
  let username = Commands.safe_get_global "username" in
  let usermail = Commands.safe_get_global "usermail" in
  let date =
    let t = Unix.localtime (Unix.time ()) in
    Printf.sprintf "%04d-%02d-%02d"
      (t.Unix.tm_year + 1900) (t.Unix.tm_mon+1) t.Unix.tm_mday
  in
  v#source_view#move_cursor ~offset:0 ();
  let s = Printf.sprintf "%s  %s  <%s>\n\n\t* \n\n"
    date username usermail
  in
  v#source_view#insert s

let coms = [
  "new_day_entry", [| |], None, new_day_entry ;
]

let _ = List.iter
  (fun (name, args, more, f) ->
     Sourceview.register_com
       ~prefix: mode_name name args ?more f)
    coms

class mode =
  object
    inherit Sourceview.empty_mode
    method name = mode_name
    method key_bindings : (Stk.Key.keystate list * string) list =
      Ocf.get Mode_changelog_rc.key_bindings
    method menus : (string * Stk.Menu.menu_entry list) list = []
  end

let mode = new mode
let _ = Sourceview.register_mode mode