Monday, March 19, 2018

 Imagine q vc é 1. Os outros são 2,3, 5,7,11.. até um primo menor que gugol . Os primos começam a se relacionar e constroem todos os outros números. Mas um dia vc se cansa de ser o 1 pq a perfeição precisa conter a imperfeição para ser perfeita. E daí vc constrói um número bem grande com vários outros números e esquece que vc é o 1. Agora vc acredita ser o 584298.
Pois então os outros primos também fizeram isso e assumiram novos números não primos como identidade. E fizeram tanto isso que geraram todos os números de 1 até gugol.
 Cansados dessa zoeira, sentiram falta de ser sua própria essência. Agora começam a "decompor" relacionamentos.
Porém, voltar ao estado de total decomposição, causaria o desagrado inicial. O estado intermediário seria imperfeito pra alguns.
 Então eles resolvem construir relacionamentos on-demand. Ou seja, quando surgir o desejo de um primo por um estado, todos os relacionamentos mudam pra atender. E assim pra cada primo.
Dessa dinâmica de desejos começam a emergir padrões.
 E assim é feito tudo que é real, ironicamente com números inteiros.

Wednesday, January 8, 2014

How to translate latex documents?

1 - use po4a-gettextize to generate .po file
2 - upload the *.po file to  http://translate.google.com/toolkit/list?hl=en#translations/active
3 - edit properly on google translate an download the translated *.po file
4 - use po4a-translate to generate the latex document translated


example:
po4a-gettextize -f tex -M utf-8 -m proposal.tex -p out.po -o definitions=commands.po4a

po4a-translate -f latex -M utf-8 -m proposal.tex -p translated.po -l p.tex -o definitions=commands.po4a

commands.po4a file content :

% po4a:  environment small
% po4a:  environment document
% po4a:  environment enumerate
% po4a:  environment table
% po4a:  environment tabular

Saturday, July 27, 2013

SoyCssRenamingMap Implementation

If you want render soy templates on server side, with closure stylesheet compiler(GSS compiler) renaming map, you will need an implementation of SoyCssRenamingMap  interface.
The renaming map generated by GSS  compiler split keys with "-".  So, if  you just load the renaming maps generated to Map the soy will ignore the keys with "-"

The code below support keys with "-". 



1:  import java.util.Map;  
2:  import org.slf4j.Logger;  
3:  import org.slf4j.LoggerFactory;  
4:  import com.google.template.soy.shared.SoyCssRenamingMap;  
5:  public class SoyCssRenamingMapImpl implements SoyCssRenamingMap {  
6:       static boolean isMultipleCommandsSuppported = false;  
7:       final static Logger logger = LoggerFactory  
8:                 .getLogger(SoyCssRenamingMapImpl.class);  
9:       private Map<String, String> map;  
10:       public SoyCssRenamingMapImpl(Map<String, String> map) {  
11:            this.map = map;  
12:       }  
13:       private String parse(String string, String tokenRenaming, String regexKey) {  
14:            String ret = null;  
15:            String partialRenaming = null;  
16:            String[] keyArray = string.split(regexKey);  
17:            String renamingStr = partialRenaming = this.parseTopDown(keyArray[0]);  
18:            if (renamingStr != null) {  
19:                 int i = 1;  
20:                 while ((i < keyArray.length)  
21:                           && ((partialRenaming = this.parseTopDown(keyArray[i])) != null)) {  
22:                      renamingStr = renamingStr.concat(tokenRenaming).concat(  
23:                                partialRenaming);  
24:                      i++;  
25:                 }  
26:                 if (partialRenaming != null) {  
27:                      map.put(string, renamingStr);  
28:                      ret = renamingStr;  
29:                 }  
30:            }  
31:            return ret;  
32:       }  
33:       private String parseTopDown(String string) {  
34:            String ret = null;  
35:            if (string.contains(" ")) {  
36:                 if (isMultipleCommandsSuppported) {  
37:                      ret = this.parse(string, " ", "\\s+");  
38:                 } else {  
39:                      ret = null;  
40:                 }  
41:            } else if (string.contains("-")) {  
42:                 ret = this.parse(string, "-", "-");  
43:            } else {  
44:                 ret = map.get(string);  
45:                 if (ret==null){  
46:                      ret=string;  
47:                 }  
48:            }  
49:            return ret;  
50:       }  
51:       @Override  
52:       public String get(String key) {  
53:            // TODO Auto-generated method stub  
54:            String ret = map.get(key);  
55:            if (ret == null) {  
56:                 logger.debug("get miss to key:" + key);  
57:                 ret = parseTopDown(key);  
58:                 logger.debug("css renaming: key=" + key + " | value: " + ret);  
59:            }  
60:            return ret;  
61:       }  
62:  }  

The property "isMultipleCommandsSuppported" is experimental and allow multiples command in just one call.
Ex.: closure template css command: {css one-class other-class}



That's all folks!