docs: function(page) {
              // Get all code texts
              umls = page.content.match(/```(uml|puml|plantuml)((.*[\r\n]+)+?)?```/igm);
              // Begin replace
              if (umls instanceof Array) {
                  for (var i = 0, len = umls.length; i < len; i++) {
                      page.content = page.content.replace(
                          umls[i],
                          // Parameter parser for user argument to gitbook argument
                          umls[i].replace(/```(uml|puml|plantuml)[ \t]+{(.*)}/i,
                              function(match, p1, p2) {
                                  var newStr = "";
                                  var modeQuote = false;
                                  var modeArray = false;
                                  var modeChar = false;
                                  var modeEqual = false;
                                  // Trim left and right space
                                  var str = p2.replace(/^\s+|\s+$/g,"");
  
                                  // Build new str
                                  for(var i = 0; i < str.length; i++){
                                      if (str.charAt(i) == "\"") {
                                          modeQuote = !modeQuote;
                                          modeChar = true;
                                          newStr += str.charAt(i);
                                          continue;
                                      }
                                      if (str.charAt(i) == "[") {
                                          modeArray = true;
                                          newStr += str.charAt(i);
                                          continue;
                                      }
                                      if (str.charAt(i) == "]") {
                                          modeArray = false;
                                          newStr += str.charAt(i);
                                          continue;
                                      }
                                      if (modeQuote || modeArray) {
                                          // In quote, keep all string
                                          newStr += str.charAt(i);
                                      } else {
                                          // Out of quote, process it
                                          if (str.charAt(i).match(/[A-Za-z0-9_]/)) {
                                              modeChar = true;
                                              newStr += str.charAt(i);
                                          } else if (str.charAt(i).match(/[=]/)) {
                                              modeEqual = true;
                                              modeChar = false;
                                              newStr += str.charAt(i);
                                          } else if (modeChar && modeEqual) {
                                              modeChar = false;
                                              modeEqual = false;
                                              newStr += ",";
                                          }
                                      }
                                  }
  
                                  newStr = newStr.replace(/,$/,"");
  
                                  return "{% uml " + newStr + " %}";
                              })
                          .replace(/```(uml|puml|plantuml)/i, '{% uml %}')
                          .replace(/```/, '{% enduml %}'));
                  }
              }
              return page;
          }