~mhysterio/sintel-media/trunk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
#!/bin/bash
# This file is part of Sintel.
#
# Sintel 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.
#
# Sintel 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 Sintel.  If not, see <https://www.gnu.org/licenses/>.
#
#
# Módulo DOC
# Funciones de documentación

function doc.info() {
    echo "doc - Funciones de documentación."
    echo
    echo "Contiene funciones para consultar la documentación."
    echo "interna de sintel."
    echo    
}

function doc.callFunction() {
	local tupla="$1"

	$DEBUG && echo "Tupla: $tupla" >> /dev/tty
	local pos=$(expr index "$tupla" :)
	if [[ $pos == 1 ]]; then
	    die "callFunction necesita una llamada normalizada tipo 'funcion:\"args\"'"
	fi
	local funcion=""
	if [[ $pos == 0 ]]; then
	    funcion=$tupla
	    pos=${#tupla}
	else
	    #IFS=':' read -a aux <<< "$tupla"; IFS=" "
	    #local funcion="${aux[0]}"
	    funcion="${tupla::$(( pos-1 ))}"
	fi
	$DEBUG && echo "Función: $funcion" > /dev/tty

	#local args="${aux[1]}"
	local args="${tupla:pos}"
	$DEBUG && echo "Argumentos: $args" > /dev/tty

	eval set -- "$args"
	$DEBUG && echo "Argumentos procesados: $@" > /dev/tty

	local postargs=""
	for arg in "$@"; do
	    postargs="$postargs \"$arg\""
	done
	postargs=$(trim "$postargs")

	$DEBUG && echo "A ejecutar: $funcion $postargs" > /dev/tty
	# local res=`$funcion "$postargs"`

	local res=`eval "$funcion" $postargs`
	echo "$res"
}


function doc.callFunction.info() {
    echo "doc.callFunction - Llama a una funcion integrada de sintel"
    echo
    echo -e "\tArgumentos: tupla"
    echo
    echo "La tupla es el nombre de la función que queremos llamar y argumentos"
    echo "separados por el caracter dos puntos ':'. El argumento es opcional."
    echo
    echo "La forma más cómoda de acceder a esta función es mediante la opción"
    echo "-f de sintel".
    echo
    echo "Se puede pasar más de un argumento a una función. Para ello hay que"
    echo "entrecomillar los argumentos o toda la tupla. Si uno o varios de los"
    echo "argumentos consta de más de una palabra, es decir, que contiene"
    echo "espacios, debe entrecomillarse de por si con comilla simple o usando"
    echo "comillas dobles escapadas: \"."
    echo
    echo "Ejemplos:"
    echo -e "\tsintel -f series.list"
    echo -e "\tsintel -f series.find:poirot"
    echo -e "\tsintel -f film.add:\"'Regreso al futuro' '/mnt/Peliculas/rfuturo.mp4' -1\""
}

function doc.callFunction2() {
	local tupla="$1"

	$DEBUG && echo "Tupla: $tupla" >> /dev/tty
	local pos=$(expr index "$tupla" :)
	if [[ $pos == 1 ]]; then
	    die "callFunction22 necesita una llamada normalizada tipo 'funcion:\"args\"'"
	fi
	local funcion=""
	if [[ $pos == 0 ]]; then
	    funcion=$tupla
	    pos=${#tupla}
	else
	    funcion="${tupla::$(( pos-1 ))}"
	fi
	$DEBUG && echo "Función: $funcion" > /dev/tty

	local args="${tupla:pos}"
	$DEBUG && echo "Argumentos: $args" > /dev/tty

	declare -a preargs
	IFS='|' read -r -a preargs <<< "$args"; IFS=" "

	local postargs=""
	for arg in "${preargs[@]}"; do
		postargs="$postargs \"$arg\""
	done
	postargs=$(trim "$postargs")

	#eval set -- "$args"
	$DEBUG && echo "Argumentos procesados: $postargs" > /dev/tty

	$DEBUG && echo "A ejecutar: $funcion $postargs" > /dev/tty

	local res=`eval "$funcion" "$postargs"`
	echo "$res"
}

function doc.callFunction2.info() {
    echo "doc.callFunction2 - Llama a una función con varios argumentos"
    echo
    echo -e "\tArgumentos: tupla-avanzada"
    echo
    echo "Tupla-avanzada consiste en 'funcion:argumento-avanzado'"
    echo "mientras que argumento avanzado es una cadena entrecomillada que admite "
    echo "varios argumentos separados por el caracter tubería '|'."
    echo
    echo "Ejemplo:"
    echo -e "\tsintel -n anime.add:\"Detective Conan|www.veranimes.tv/detective-conan-capitulo-\""
}

function doc.listFunctions() {
    if [[ $# == 0 ]]; then
        declare -F | while read line; do
	    if `grep -E '.info$' <<< "$line" > /dev/null 2>&1`; then
	       continue;
	    fi
	    echo "${line:11}"
	done
    else
	local module=""
	case $1 in
	"generic")
	    declare -F | while read line; do
		line="${line:11}"
		if `grep "\." <<< "$line" > /dev/null 2>&1`; then
		    continue
		fi
		echo "$line"
	    done
	    ;;
	"peliculas")
	    module="film"
	    ;;
	*)
	    module="$1"
	    ;;
	esac
	declare -F | grep "$module\." | while read line; do
	    if `grep -E '.info$' <<< "$line" > /dev/null 2>&1`; then
		continue
	    fi
	    echo "${line:11}"
	done
    fi
}

function doc.listFunctions.info() {
    echo "doc.listFunctions - Lista las funciones integradas en sintel."
    echo
    echo -e "\tArgumentos: [módulo]"
    echo
    echo "Si no se indican argumentos se listan todas las funciones definidas"
    echo "dentro de los diversos módulos de sintel."
    echo
    echo "Si se indica el nombre de un módulo se listan todas las funciones"
    echo "de ese módulo."
    echo
    echo "Si no se requiere argumento puede ahorrarse tiempo invocando el comando"
    echo "'sintel -l'. Si por el contrario se quieren ver solo las funciones de"
    echo "un módulo, podemos usar el atajo 'sintel -x anime'."
    echo
    echo "Ejemplos:"
    echo -e "\tsintel -f doc.listFunctions"
    echo -e "\tsintel -f doc.listFunctions:series"
}

function doc.listModules() {
    for module in "${MODS[@]}"; do
	echo "$module"
    done
}

function doc.listModules.info() {
    echo "doc.listModules - Listar módulos"
    echo
    echo "Lista los módulos cargados."
    echo
    echo "La opción -m es un atajo a esta función."
}

function doc.functionInfo() {
    local funcion="$1"

    declare -F | grep "${funcion}.info" > /dev/null 2>&1
    if [[ $? != 0 ]]; then
	echo -e "La función '$funcion' no tiene documentación de momento."
    else
	"${funcion}.info"
    fi
}


function doc.functionInfo.info() {
    echo "doc.functionInfo - Mostrar la documentación de una función de sintel."
    echo
    echo -e "\tArgumentos: función"
    echo
    echo "La documentación de sintel está todavía escribiéndose. Puede haber funciones"
    echo "que no estén documentadas todavía."
    echo
    echo "Se puede llamar a esta función con el atajo 'sintel --info funcion'."
    echo
    echo "Ejemplos:"
    echo -e "\t sintel --info doc.functionInfo"
    echo -e "\t sintel --info ver.serie"
}