;; Copyright 2014-2015 Free Software Foundation, Inc.
;; Author: David Gonzalez Gandara <dggandara@member.fsf.org>
-;; Version: 1.0.1
+;; Version: 1.0.2
;; 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
;; REQUIRES:
;; -----------------------------
-;; In order to use the audio functions of transcribe, you need to install
-;; emms and mpg321.
+;; This module works without any requires, but in order to use the audio
+;; functions, you need to install the emacs package "emms", by Joe Drew,
+;; and the external program "mpg321", by Jorgen Schafer and Ulrik Jensen,
+;; both under GPL licenses.
;;
;; USAGE:
;; -------------------------
;; include them.
;; The analyse function will search for a specific structure
;; of episodes that can be automatically added with the macro NewEpisode.
-;; The function expects the utterances to be transcribed inside a xml tag
-;; with the identifier of the speaker, with the tags <l1> or <l2>, depending
+;; The function expects the speech acts to be transcribed inside a turn xml
+;; tag with the identifier of the speaker with optional move attribute.
+;; Each speech act is spected inside a <l1> or <l2> tag, depending
;; on the language used by the person. The attributes expected are the
-;; number of clauses that form the utterance and the number of errors the
-;; transcriber observes.
+;; number of clauses that form the utterance, the number of errors the
+;; transcriber observes, and the function of the speech act. The parser will
+;; work even if some attributes are missing.
;;
;;
;; AUDIO COMMANDS
;;
;; XML TAGGING COMMANDS
;; --------------------------------------------------
-;; C-x C-n --> Create new episode structure. This is useful in case your
-;; xml file structure requires it. You can customize the text
-;; inserted manipulating the realted function.
-;; <f6> -----> Interactively insert new tag. You will be prompted for the
-;; content of the tag. The starting tag and the end tag will be
-;; inserted automatically and the cursor placed in the proper
-;; place to type.
+;; C-x C-n ------> Create new episode structure. This is useful in case your
+;; xml file structure requires it.
+;; <f2> ---------> Interactively insert a function attribute in a speech act
+;; (l1 or l2) tag.
+;; <f3> ---------> Interactively insert a move attribute in a turn (person) tag
+;; <f4> ---------> Interactively insert an attribute (any kind)
+;; <f9> ---------> Insert turn (person) tag. Inserts a move attribute.
+;; <f10> --------> Insert a custom tag. Edit the function to adapt to your needs.
+;; <f11> --------> Insert speech act tag in L1, with clauses, errors and function
+;; attributes.
+;; <f12> --------> Insert speech act tag in L2, with clauses, errors and function
+;; attributes.
;;
-;;
-;;
-;; SPECIFIC COMMANDS I USE, THAT YOU MAY FIND USEFUL
-;; ------------------------------------------------
+;; AUTOMATIC PARSING
+;; -----------------------------------------------------
;; C-x C-a ------> Analyses the text for measurments of performance.
-;; <f11> --------> Customised tag 1. Edit the function to adapt to your needs.
-;; <f12> --------> Customised tag 2. Edit the function to adapt to your needs.
-;; <f7> ---------> Break tag. This command "breaks" a tag in two, that is
-;; it inserts an ending tag and then a starting tag.
-;; <f4> ---------> Insert atributes. This function insert custom xml attributes.
-;; Edit the function to suit you needs.
;;; Code:
(if t (require 'emms-playing-time))
(emms-playing-time 1)
+(defvar transcribe-function-list '("initiating" "responding" "control" "expresive" "interpersonal"))
+(defvar transcribe-move-list '("initiation" "response" "follow-up"))
+(defvar transcribe-attribute-list '("clauses" "errors" "function" "move"))
+;(append transcribe-attribute-list transcribe-function-list transcribe-move-list)
+
(defun transcribe-analyze-episode (episode person)
"This calls the external python package analyze_episodes2.py. The new
function transcribe-analyze implements its role now."
(princ (format "L2(Asunits/second): %s, L2(clauses/Asunit): %s, L1(Asunits/second): %s"
asunitspersecondl2 clausesperasunitl2 asunitspersecondl1)))))
-(defun transcribe-define-xml-tag (xmltag)
- "This function allows the automatic insetion of a xml tag and places the cursor."
+(defun transcribe-xml-tag-person (xmltag)
+ "This function allows the automatic insetion of a speaker xml tag and places the cursor."
+ (interactive "stag:")
+ (insert (format "<%s move=\"\"></%s>" xmltag xmltag))
+ (backward-char 3)
+ (backward-char (string-width xmltag)))
+
+(defun transcribe-xml-tag (xmltag)
+ "This function allows the automatic insetion of a custom xml tag and places the cursor."
(interactive "stag:")
(insert (format "<%s></%s>" xmltag xmltag))
(backward-char 3)
(backward-char (string-width xmltag)))
+(defun transcribe-region-xml-tag (xmltag)
+ "This function encapsulates the marked region in the given tag."
+ (interactive "stag:")
+ (let ((beginning (region-beginning))
+ (end (region-end)))
+ (goto-char beginning)
+ (insert (format "<%s>" xmltag))
+ (goto-char end)
+ (insert (format "</%s>" xmltag))))
+
+(defun transcribe-add-attribute (att val)
+ "Adds a xml attribute at cursor with the name and value specified (autocompletion possible)"
+ (interactive (list(completing-read "attibute name:" transcribe-attribute-list)(read-string "value:")))
+ (insert (format "%s=\"%s\"" att val)))
+
+(defun transcribe-add-attribute-function (val)
+ "Adds the xml attribute 'function' at cursor with the name specified (autocompletion possible)"
+ (interactive (list(completing-read "function name:" transcribe-function-list)))
+ (insert (format "function=\"%s\"" val)))
+
+(defun transcribe-add-attribute-move (val)
+ "Adds the xml attribute 'move' at cursor with the name specified (autocompletion possible"
+ (interactive (list(completing-read "move name:" transcribe-move-list)))
+ (insert (format "move=\"%s\"" val)))
+
(defun transcribe-xml-tag-l1 ()
"Inserts a l1 tag and places the cursor"
(interactive)
- (insert "<l1></l1>")
- (backward-char 3)
- (backward-char 2))
+ (insert "<l1 clauses=\"1\" errors=\"0\" function=\"\"></l1>")
+ (backward-char 5))
(defun transcribe-xml-tag-l2 ()
"Inserts a l2 tag and places the cursor"
(interactive)
- (insert "<l2 clauses=\"1\" errors=\"0\"></l2>")
- (backward-char 3)
- (backward-char 2))
+ (insert "<l2 clauses=\"1\" errors=\"0\" function=\"\"></l2>")
+ (backward-char 5))
-(fset 'transcribe-xml-tag-l2-break "</l2><l2 clauses=\"1\" errors=\"0\">")
- ;inserts a break inside a l2 tag
-(fset 'transcribe-set-attributes "clauses=\"1\" errors=\"0\"")
- ;inserts the attributes where they are missing
+(defun transcribe-xml-tag-break (xmltag)
+ "This function breaks an unit into two. That is, insert a closing and an opening equal tags"
+ (interactive "stag:")
+ (insert (format "</%s><%s clauses=\"1\" errors=\"0\" function=\"\">" xmltag xmltag)))
(defun transcribe-display-audio-info ()
(interactive)
([?\C-x down] . emms-stop)
([?\C-x right] . emms-seek-forward)
([?\C-x left] . emms-seek-backward)
+
+ ([f2] . transcribe-add-attribute-function)
+ ([f3] . transcribe-add-attribute-move)
+ ([f4] . transcribe-add-attribute)
+
([f5] . emms-pause)
- ([f6] . transcribe-define-xml-tag)
- ([f7] . transcribe-xml-tag-l2-break)
([f8] . emms-seek)
- ([f4] . transcribe-set-atributes)
+
+ ([f9] . transcribe-xml-tag)
+ ([f10] . transcribe-xml-tag-person)
([f11] . transcribe-xml-tag-l1)
([f12] . transcribe-xml-tag-l2))
)