Skip to content

Commit

Permalink
Modificado: notepad-calculator, comentarios de implementación en docu…
Browse files Browse the repository at this point in the history
…mentation.org
  • Loading branch information
neverkas committed Feb 18, 2023
1 parent 0d7c32b commit a9d23fd
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 40 deletions.
96 changes: 96 additions & 0 deletions notepad-calculator/DOCUMENTATION.org
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#+TITLE: Documentation
* Intro
#+BEGIN_QUOTE
Centralizamos los comentarios sobre las implementaciones en los Makefiles,
para separar la explicación de la implementación en si
#+END_QUOTE
* Comando awk - Escapar símbolo $
#+BEGIN_SRC makefile
RESUELTOS_DIR=resueltos

# 1. las columnas que imprime la función PRINT del comando AWK sólo necesitan un símbolo $ como prefijo
# 2. en GNU Make necesitamos escapar el $ con otro $ delante quedando $$ para que lo tome como caracter en vez de una macro
lista-archivos-resueltos:
ifeq ("$(wildcard $(RESUELTOS_DIR)/*.txt)", "")
@echo "No hay archivos resueltos.."
else
@ls -lth --time-style=long-iso $(RESUELTOS_DIR)/*.txt | \
nawk 'BEGIN{print "# Nombre Tamaño Fecha Hora"} {print NR, $$NF, $$5, $$6, $$7}' | \
column -t
endif
#+END_SRC
* Comando sed - Sustitución de expresiones
#+BEGIN_SRC makefile
MAXIMA_EXT=mac
TMP_DIR=.tmp

formatear-textos: $(TMP_DIR) $(MAXIMA_FILES_TMP)
@echo "Textos formateados!"

# Breve explicación sobre como usamos el comando sed con la operación de sustitución
#
# 1. Removemos los espacios en blanco
# sed -E 's/[[:space:]]//g'
#
# 2. formateamos el texto para Maxima
# 2.1 reemplazando los = por :
# 2.2 considerando las variables como la primer palabra de cada linea y que pueden incluir el símbolo _
# 2.3 considerando que las operaciones con apertura de paréntesis
# sed -E 's/^(([[:alnum:]]|\_)+)\=((([[:alnum:]]|\()+[[:punct:]]*[[:alnum:]]*)+)/\1 : \3;/g' \
#
# Notas:
# 1. éste target hace la conversión %.txt en %.mac
# 2. alternativa para acortar el código, encadenar patrones de sustitución sed con ;

$(TMP_DIR)/%.$(MAXIMA_EXT): %.txt
$(info Formateando $< para Maxima..)
@cat $< | \
sed -E 's/[[:space:]]//g' | \
sed -E 's/^(([[:alnum:]]|\_)+)\=((([[:alnum:]]|\()+[[:punct:]]*[[:alnum:]]*)+)/\1 : \3;/g' \
> $@
#+END_SRC

#+BEGIN_SRC makefile
MAXIMA_EXT=mac
RESUELTOS_DIR=resueltos
TMP_DIR=.tmp

TEXT_FILES=$(wildcard *.txt)
TEXT_FILES_RESUELTOS=$(addprefix $(RESUELTOS_DIR)/,$(TEXT_FILES))

analizar-textos: $(TEXT_FILES_RESUELTOS)
@echo "Textos analizados!"

# Breve explicación sobre como usamos el comando sed con la operación de sustitución
#
# 1. Removemos mensajes de Maxima
# sed '/batch.*$$/d; /read and interpret .*$$/d; /.*\.$(MAXIMA_EXT)$$/d'
#
# 2. Removemos los espacios en blanco
# sed -E 's/[[:space:]]//g'
#
# 3. Formateamos el texto que entiende Maxima por algo más común
# 3.1 reemplazando los : por =
# 3.2 y las mismas consideraciones que en la conversión de %.mac a %.txt
# sed -E 's/\(\%i.{1,3}\)([[:alnum:]]+)\:(([[:alnum:]]+[[:punct:]]*)*)(\n)/\1 = /g'
#
# 4. Capturamos los resultados, removiendo (%o) y el espacio en blanco, capturar sólo el resultado a la derecha
# sed -E 's/\(\%o.{1,3}\)([0-9]*)/\1/g'
#
# 5. Removemos cualquier linea en blanco por la conversión
# sed -E '/^[[:space:]]*$$/d'
#
# Notas:
# 1. éste target hace la conversión %.mac en %.txt
# 2. con la opción --very-quiet no se imprimen los simbolos de input/output %i %o pero justamente los necesitamos

$(RESUELTOS_DIR)/%.txt: $(TMP_DIR)/%.$(MAXIMA_EXT)
$(info Analizando $< con Maxima..)
@maxima --quiet --batch=$< | \
sed '/batch.*$$/d; /read and interpret .*$$/d; /.*\.$(MAXIMA_EXT)$$/d' | \
sed -E 's/[[:space:]]//g' | \
sed -E -z 's/\(\%i.{1,3}\)(([[:alnum:]]|\_)+)\:(([[:alnum:]]+[[:punct:]]*)*)(\n)/\1 = /g' | \
sed -E 's/\(\%o.{1,3}\)([0-9]*)/\1/g' | \
sed -E '/^[[:space:]]*$$/d' \
> $@ && echo "Finalizó el análisis de $<"
#+END_SRC
40 changes: 0 additions & 40 deletions notepad-calculator/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@ MAXIMA_FILES_TMP=$(addprefix $(TMP_DIR)/, $(MAXIMA_FILES))
resolver-archivos: formatear-textos analizar-textos ## Formatea y analiza todos los textos
@echo "Archivos resueltos!"

# Notas:
# 1. las columnas que imprime la función PRINT del comando AWK sólo necesitan un símbolo $ como prefijo
# 2. en GNU Make necesitamos escapar el $ con otro $ delante quedando $$ para que lo tome como caracter en vez de una macro
lista-archivos-resueltos: ##
ifeq ("$(wildcard $(RESUELTOS_DIR)/*.$(TEXT_EXT))", "")
@echo "No hay archivos resueltos.."
Expand All @@ -29,50 +26,13 @@ endif
$(TMP_DIR):
@mkdir -p $@

# Breve explicación sobre como usamos el comando sed con la operación de sustitución
#
# 1. Removemos los espacios en blanco
# sed -E 's/[[:space:]]//g'
#
# 2. formateamos el texto para Maxima
# 2.1 reemplazando los = por :
# 2.2 considerando las variables como la primer palabra de cada linea y que pueden incluir el símbolo _
# 2.3 considerando que las operaciones con apertura de paréntesis
# sed -E 's/^(([[:alnum:]]|\_)+)\=((([[:alnum:]]|\()+[[:punct:]]*[[:alnum:]]*)+)/\1 : \3;/g' \
#
# Notas:
# 1. éste target hace la conversión %.txt en %.mac
# 2. alternativa para acortar el código, encadenar patrones de sustitución sed con ;
$(TMP_DIR)/%.$(MAXIMA_EXT): %.$(TEXT_EXT)
$(info Formateando $< para Maxima..)
@cat $< | \
sed -E 's/[[:space:]]//g' | \
sed -E 's/^(([[:alnum:]]|\_)+)\=((([[:alnum:]]|\()+[[:punct:]]*[[:alnum:]]*)+)/\1 : \3;/g' \
> $@


# Breve explicación sobre como usamos el comando sed con la operación de sustitución
#
# 1. Removemos mensajes de Maxima
# sed '/batch.*$$/d; /read and interpret .*$$/d; /.*\.$(MAXIMA_EXT)$$/d'
#
# 2. Removemos los espacios en blanco
# sed -E 's/[[:space:]]//g'
#
# 3. Formateamos el texto que entiende Maxima por algo más común
# 3.1 reemplazando los : por =
# 3.2 y las mismas consideraciones que en la conversión de %.mac a %.txt
# sed -E 's/\(\%i.{1,3}\)([[:alnum:]]+)\:(([[:alnum:]]+[[:punct:]]*)*)(\n)/\1 = /g'
#
# 4. Capturamos los resultados, removiendo (%o) y el espacio en blanco, capturar sólo el resultado a la derecha
# sed -E 's/\(\%o.{1,3}\)([0-9]*)/\1/g'
#
# 5. Removemos cualquier linea en blanco por la conversión
# sed -E '/^[[:space:]]*$$/d'
#
# Notas:
# 1. éste target hace la conversión %.mac en %.txt
# 2. con la opción --very-quiet no se imprimen los simbolos de input/output %i %o pero justamente los necesitamos
$(RESUELTOS_DIR)/%.$(TEXT_EXT): $(TMP_DIR)/%.$(MAXIMA_EXT)
$(info Analizando $< con Maxima..)
@maxima --quiet --batch=$< | \
Expand Down

0 comments on commit a9d23fd

Please sign in to comment.