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 213
     # Crea el EPUB, el MOBI y más (véase la documentación de pc-automata)
212 214
     puts "Creando proyecto EPUB…"
213 215
     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")
216
+    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 217
 
216 218
     # Saca los EPUB y el MOBI del proyecto, los renombra y borra el resto del proyecto
217 219
     Dir.glob('tmp/epub-automata/*') do |file|
... ...
@@ -277,41 +279,8 @@ def create_pdf hash, project
277 279
     FileUtils.rm_rf('tmp/tex')
278 280
 end
279 281
 
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
-
282
+# Crea versión JSON y WEB
283
+def create_json_web hash, project
315 284
     # Crea el archivo JSON
316 285
     puts "Creando JSON…"
317 286
 	archivo = File.new("tmp/#{File.basename(project)}.json", 'w:UTF-8')
... ...
@@ -334,7 +303,82 @@ $projects.each do |project|
334 303
 	archivo_abierto = File.new(project + '/docs/index.html', 'w:UTF-8')
335 304
 	archivo_abierto.puts html
336 305
 	archivo_abierto.close
306
+end
307
+
308
+# Crea versión APK
309
+def create_apk project
310
+    # Cambia la versión a una superior
311
+    puts "Creando APK…"
312
+    def change_version text
313
+        version = text.split('"')[1].split('.')
314
+        subversion = version.last.to_i + 1
315
+
316
+        return 'version="' + version[0] + '.' + version[1] + '.' + subversion.to_s + '"'
317
+    end
318
+
319
+    # Copia la carpeta de la versión web a la carpeta temporal y la renombra como «www»
320
+    FileUtils.cp_r(project + '/docs', Dir.pwd + '/tmp')
321
+    FileUtils.mv(Dir.pwd + '/tmp/docs', Dir.pwd + '/tmp/www')
322
+
323
+    # Elimina soportes finales innecesarios
324
+    Dir.glob(Dir.pwd + '/tmp/www/files/*.*') do |file|
325
+        if File.extname(file) != '.json'
326
+            FileUtils.rm_rf(file)
327
+        end
328
+    end
329
+
330
+    # Modifica pie del HTML
331
+    puts "Modificando HTML para el APK…"
332
+    html = []
333
+    archivo_abierto = File.open(Dir.pwd + '/tmp/www/index.html', 'r:UTF-8')
334
+    archivo_abierto.each do |line|
335
+        if line !~ /no-apk/
336
+            html.push(line)
337
+        end
338
+    end
339
+    archivo_abierto.close
340
+
341
+	archivo_abierto = File.new(Dir.pwd + '/tmp/www/index.html', 'w:UTF-8')
342
+	archivo_abierto.puts html
343
+	archivo_abierto.close
337 344
 
345
+    # Añade los archivos al proyecto de cordova
346
+    puts "Añadiendo archivos a cordova…"
347
+    FileUtils.rm_rf(project + '/cordova/www')
348
+    FileUtils.mv(Dir.pwd + '/tmp/www', project + '/cordova')
349
+
350
+    # Modifica la versión en el config.xml si se desea
351
+    if $version_increase == true
352
+        puts "Añadiendo número de versión…"
353
+        config = []
354
+        archivo_abierto = File.open(project + '/cordova/config.xml', 'r:UTF-8')
355
+        archivo_abierto.each do |line|
356
+            if line =~ /<widget/
357
+                line = line.gsub(/version=".*?"/, change_version(line.scan(/version=".*?"/)[0]))
358
+            end
359
+
360
+            config.push(line)
361
+        end
362
+        archivo_abierto.close
363
+
364
+	    archivo_abierto = File.new(project + '/cordova/config.xml', 'w:UTF-8')
365
+	    archivo_abierto.puts config
366
+	    archivo_abierto.close
367
+    end
368
+
369
+    # Crea el APK
370
+    puts "Compilando APK…"
371
+    Dir.chdir(project + '/cordova')
372
+    system("cordova build android")
373
+    Dir.chdir('../../aml-general')
374
+
375
+    # Copia el APK a la carpeta temporal y lo renombra
376
+    FileUtils.cp_r(project + '/cordova/platforms/android/app/build/outputs/apk/debug/app-debug.apk', Dir.pwd + '/tmp')
377
+    FileUtils.mv(Dir.pwd + '/tmp/app-debug.apk', Dir.pwd + '/tmp/' + File.basename(project) + '.apk')
378
+end
379
+
380
+# Elimina archivos previos, manda soportes finales a su destino y firma estos archivos
381
+def finish project
338 382
     # Elimina los archivos previos de la carpeta «/docs/files» de cada repo
339 383
     puts "Eliminando archivos previos de «#{File.basename(project)}/docs/files»…"
340 384
     Dir.glob(project + '/docs/files/*') do |file|
... ...
@@ -353,12 +397,87 @@ $projects.each do |project|
353 397
         system("gpg --output #{file}.sig --detach-sig #{file}")
354 398
     end
355 399
 
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 400
     # Elimina la carpeta temporal
363 401
     FileUtils.rm_rf('tmp')
364 402
 end
403
+
404
+def push project
405
+    if $push == true
406
+        puts "Guardando cambios en el repositorio…"
407
+        Dir.chdir(project)
408
+        puts "git add . && git commit -m \"Guardado automático de aml-general: #{$date}\" && git push origin master && git-push-all"
409
+#        system("git add . && git commit -m \"Guardado automático de aml-general: #{$date}\" && git push origin master && git-push-all")
410
+        Dir.chdir('../aml-general')
411
+    end
412
+end
413
+
414
+# Variables #
415
+
416
+$projects = []
417
+$date = Time.now
418
+$date_with_format = format_date
419
+$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."]
420
+$version_increase = true
421
+$push = false
422
+
423
+# Va a la carpeta del script
424
+Dir.chdir(File.dirname(__FILE__))
425
+
426
+# Localiza los proyectos y las configuraciones
427
+if ARGF.argv.length == 0
428
+    locate
429
+else
430
+    project_path = ''
431
+
432
+    # Busca el tipo de argumento presente
433
+    ARGF.argv.each do |argument|
434
+        if argument == '--no-version-increase'
435
+            $version_increase = false
436
+        elsif argument == '--push'
437
+            $push = true
438
+        elsif argument == '-h' || argument == '--help'
439
+            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."
440
+            abort
441
+        else
442
+            project_path = argument
443
+        end
444
+    end 
445
+
446
+    # Determina si se crearán todos o solo un proyecto
447
+    if project_path == ''
448
+        locate
449
+    else
450
+        locate(project_path)
451
+    end
452
+end
453
+
454
+# Inicia la creación de cada formato de cada proyecto
455
+$projects.each do |project|
456
+    puts "\n========================================\n\n"
457
+    puts "Iniciando automatización del repositorio «#{File.basename(project)}»…"
458
+
459
+    # Crea una carpeta temporal donde se estarán poniendo los archivos preliminares
460
+    FileUtils.rm_rf('tmp')
461
+    Dir.mkdir('tmp')
462
+
463
+    # Obtiene la información
464
+    hash = convert_to_hash(project)
465
+
466
+    # Crea los archivos EPUB y MOBI
467
+    create_epub_mobi(hash, project)
468
+
469
+    # Crea el archivo PDF
470
+    create_pdf(hash, project)
471
+
472
+    # Crea el archivo JSON y modifica la versión web
473
+    create_json_web(hash, project)
474
+
475
+    # Crea el archivo APK
476
+    create_apk(project)
477
+
478
+    # Manda los archivos a su destino y los firma
479
+    finish(project)
480
+
481
+    # Hace push al repositorio si se desea
482
+    push(project)
483
+end