Browse code

¡Al fin todos los formatos finales son creados! :fire:

NikaZhenya authored on 08/04/2018 17:36:57
Showing 1 changed files
... ...
@@ -11,9 +11,11 @@ Encoding.default_internal = Encoding::UTF_8
11 11
 
12 12
 # Dependencias externas #
13 13
 # - roo (gema)
14
-# - Pecas
14
+# - pecas
15 15
 # - pandoc
16
+# - kindlegen
16 17
 # - pdflatex
18
+# - cordova
17 19
 
18 20
 # Funciones #
19 21
 
... ...
@@ -211,7 +213,7 @@ def create_epub_mobi hash, project
211 211
     # Crea el EPUB, el MOBI y más (véase la documentación de pc-automata)
212 212
     puts "Creando proyecto EPUB…"
213 213
     system("pc-automata --directory tmp --init")
214
-    system("pc-automata -d tmp/epub-automata -y #{project}/src/yaml/meta-data.yaml -f tmp/#{File.basename(project)}.md -c #{project}/src/img/portada.jpg -i #{project}/src/img -x #{project}/src/xhtml -s #{project}/src/css/styles.css --no-analytics --no-legacy --overwrite")
214
+    system("pc-automata -d tmp/epub-automata -y #{project}/src/yaml/meta-data.yaml -f tmp/#{File.basename(project)}.md -c #{project}/src/img/portada.jpg -i #{project}/src/img -x #{project}/src/xhtml -s #{project}/src/css/styles.css --no-analytics --no-legacy --no-ace --overwrite")
215 215
 
216 216
     # Saca los EPUB y el MOBI del proyecto, los renombra y borra el resto del proyecto
217 217
     Dir.glob('tmp/epub-automata/*') do |file|
... ...
@@ -277,41 +279,8 @@ def create_pdf hash, project
277 277
     FileUtils.rm_rf('tmp/tex')
278 278
 end
279 279
 
280
-# Variables #
281
-
282
-$projects = []
283
-$date = Time.now
284
-$date_with_format = format_date
285
-$warning = ["Advertencia", "La edición de la presente obra solo es preliminar. Todavía falta su adaptación a las normas de publicación de la lengua española."]
286
-
287
-# Va a la carpeta del script
288
-Dir.chdir(File.dirname(__FILE__))
289
-
290
-# Localiza los proyectos
291
-if ARGF.argv.length == 0
292
-    locate
293
-else
294
-    locate(ARGF.argv[0])
295
-end
296
-
297
-# Inicia la creación de cada formato de cada proyecto
298
-$projects.each do |project|
299
-    puts "\n========================================\n\n"
300
-    puts "Iniciando automatización del repositorio «#{File.basename(project)}»…"
301
-
302
-    # Crea una carpeta temporal donde se estarán poniendo los archivos preliminares
303
-    FileUtils.rm_rf('tmp')
304
-    Dir.mkdir('tmp')
305
-
306
-    # Obtiene la información
307
-    hash = convert_to_hash(project)
308
-
309
-    # Crea los archivos EPUB y MOBI
310
-    create_epub_mobi(hash, project)
311
-
312
-    # Crea el archivo PDF
313
-    create_pdf(hash, project)
314
-
280
+# Crea versión JSON y WEB
281
+def create_json_web hash, project
315 282
     # Crea el archivo JSON
316 283
     puts "Creando JSON…"
317 284
 	archivo = File.new("tmp/#{File.basename(project)}.json", 'w:UTF-8')
... ...
@@ -334,7 +303,82 @@ $projects.each do |project|
334 334
 	archivo_abierto = File.new(project + '/docs/index.html', 'w:UTF-8')
335 335
 	archivo_abierto.puts html
336 336
 	archivo_abierto.close
337
+end
338
+
339
+# Crea versión APK
340
+def create_apk project
341
+    # Cambia la versión a una superior
342
+    puts "Creando APK…"
343
+    def change_version text
344
+        version = text.split('"')[1].split('.')
345
+        subversion = version.last.to_i + 1
346
+
347
+        return 'version="' + version[0] + '.' + version[1] + '.' + subversion.to_s + '"'
348
+    end
349
+
350
+    # Copia la carpeta de la versión web a la carpeta temporal y la renombra como «www»
351
+    FileUtils.cp_r(project + '/docs', Dir.pwd + '/tmp')
352
+    FileUtils.mv(Dir.pwd + '/tmp/docs', Dir.pwd + '/tmp/www')
353
+
354
+    # Elimina soportes finales innecesarios
355
+    Dir.glob(Dir.pwd + '/tmp/www/files/*.*') do |file|
356
+        if File.extname(file) != '.json'
357
+            FileUtils.rm_rf(file)
358
+        end
359
+    end
360
+
361
+    # Modifica pie del HTML
362
+    puts "Modificando HTML para el APK…"
363
+    html = []
364
+    archivo_abierto = File.open(Dir.pwd + '/tmp/www/index.html', 'r:UTF-8')
365
+    archivo_abierto.each do |line|
366
+        if line !~ /no-apk/
367
+            html.push(line)
368
+        end
369
+    end
370
+    archivo_abierto.close
371
+
372
+	archivo_abierto = File.new(Dir.pwd + '/tmp/www/index.html', 'w:UTF-8')
373
+	archivo_abierto.puts html
374
+	archivo_abierto.close
337 375
 
376
+    # Añade los archivos al proyecto de cordova
377
+    puts "Añadiendo archivos a cordova…"
378
+    FileUtils.rm_rf(project + '/cordova/www')
379
+    FileUtils.mv(Dir.pwd + '/tmp/www', project + '/cordova')
380
+
381
+    # Modifica la versión en el config.xml si se desea
382
+    if $version_increase == true
383
+        puts "Añadiendo número de versión…"
384
+        config = []
385
+        archivo_abierto = File.open(project + '/cordova/config.xml', 'r:UTF-8')
386
+        archivo_abierto.each do |line|
387
+            if line =~ /<widget/
388
+                line = line.gsub(/version=".*?"/, change_version(line.scan(/version=".*?"/)[0]))
389
+            end
390
+
391
+            config.push(line)
392
+        end
393
+        archivo_abierto.close
394
+
395
+	    archivo_abierto = File.new(project + '/cordova/config.xml', 'w:UTF-8')
396
+	    archivo_abierto.puts config
397
+	    archivo_abierto.close
398
+    end
399
+
400
+    # Crea el APK
401
+    puts "Compilando APK…"
402
+    Dir.chdir(project + '/cordova')
403
+    system("cordova build android")
404
+    Dir.chdir('../../aml-general')
405
+
406
+    # Copia el APK a la carpeta temporal y lo renombra
407
+    FileUtils.cp_r(project + '/cordova/platforms/android/app/build/outputs/apk/debug/app-debug.apk', Dir.pwd + '/tmp')
408
+    FileUtils.mv(Dir.pwd + '/tmp/app-debug.apk', Dir.pwd + '/tmp/' + File.basename(project) + '.apk')
409
+end
410
+
411
+# Elimina archivos previos, manda soportes finales a su destino y firma estos archivos
412
+def finish project
338 413
     # Elimina los archivos previos de la carpeta «/docs/files» de cada repo
339 414
     puts "Eliminando archivos previos de «#{File.basename(project)}/docs/files»…"
340 415
     Dir.glob(project + '/docs/files/*') do |file|
... ...
@@ -353,12 +397,87 @@ $projects.each do |project|
353 353
         system("gpg --output #{file}.sig --detach-sig #{file}")
354 354
     end
355 355
 
356
-    # Actualiza el repositorio
357
-    puts "Actualizando repositorio…"
358
-    Dir.chdir(project)
359
-#    system("git add . && git commit -m \"Recreación de los archivos «#{$date}»\" && git-push-all")
360
-    Dir.chdir('../aml-general')
361
-
362 356
     # Elimina la carpeta temporal
363 357
     FileUtils.rm_rf('tmp')
364 358
 end
359
+
360
+def push project
361
+    if $push == true
362
+        puts "Guardando cambios en el repositorio…"
363
+        Dir.chdir(project)
364
+        puts "git add . && git commit -m \"Guardado automático de aml-general: #{$date}\" && git push origin master && git-push-all"
365
+#        system("git add . && git commit -m \"Guardado automático de aml-general: #{$date}\" && git push origin master && git-push-all")
366
+        Dir.chdir('../aml-general')
367
+    end
368
+end
369
+
370
+# Variables #
371
+
372
+$projects = []
373
+$date = Time.now
374
+$date_with_format = format_date
375
+$warning = ["Advertencia", "La edición de la presente obra solo es preliminar. Todavía falta su adaptación a las normas de publicación de la lengua española."]
376
+$version_increase = true
377
+$push = false
378
+
379
+# Va a la carpeta del script
380
+Dir.chdir(File.dirname(__FILE__))
381
+
382
+# Localiza los proyectos y las configuraciones
383
+if ARGF.argv.length == 0
384
+    locate
385
+else
386
+    project_path = ''
387
+
388
+    # Busca el tipo de argumento presente
389
+    ARGF.argv.each do |argument|
390
+        if argument == '--no-version-increase'
391
+            $version_increase = false
392
+        elsif argument == '--push'
393
+            $push = true
394
+        elsif argument == '-h' || argument == '--help'
395
+            puts "Genera formatos APK, EPUB, JSON, MOBI, PDF y WEB del «Diccionario escolar» y del «Diccionario de mexicanismos» de la Academia Mexicana de la Lengua.\n\nNota: requiere los repositorios «aml-escolar» o «aml-mexicanismos» como directorios hermanos a este repositorio.\n\nUso:\n  ruby crear.rb\n\nParámetros opcionales:\n  proyecto: Nombre del proyecto en específico para no generar todos (p. ej. «aml-escolar» o «aml-mexicanismos»).\n  --no-version-increase: Evita incrementar el número de versión del APK.\n  --push: Hace push a los repositorios de cada obra.\n  -h || --help: Muestra esta ayuda."
396
+            abort
397
+        else
398
+            project_path = argument
399
+        end
400
+    end 
401
+
402
+    # Determina si se crearán todos o solo un proyecto
403
+    if project_path == ''
404
+        locate
405
+    else
406
+        locate(project_path)
407
+    end
408
+end
409
+
410
+# Inicia la creación de cada formato de cada proyecto
411
+$projects.each do |project|
412
+    puts "\n========================================\n\n"
413
+    puts "Iniciando automatización del repositorio «#{File.basename(project)}»…"
414
+
415
+    # Crea una carpeta temporal donde se estarán poniendo los archivos preliminares
416
+    FileUtils.rm_rf('tmp')
417
+    Dir.mkdir('tmp')
418
+
419
+    # Obtiene la información
420
+    hash = convert_to_hash(project)
421
+
422
+    # Crea los archivos EPUB y MOBI
423
+    create_epub_mobi(hash, project)
424
+
425
+    # Crea el archivo PDF
426
+    create_pdf(hash, project)
427
+
428
+    # Crea el archivo JSON y modifica la versión web
429
+    create_json_web(hash, project)
430
+
431
+    # Crea el archivo APK
432
+    create_apk(project)
433
+
434
+    # Manda los archivos a su destino y los firma
435
+    finish(project)
436
+
437
+    # Hace push al repositorio si se desea
438
+    push(project)
439
+end