Browse Source

markdown: support $mod and $multiply

Kyle P Davis 10 years ago
parent
commit
7e8b7c37df
1 changed files with 34 additions and 2 deletions
  1. 34 2
      lib/extras/markdown.js

+ 34 - 2
lib/extras/markdown.js

@@ -350,11 +350,43 @@ function toListItem(str, i) {
 
 		//TODO: $minute
 
-		//TODO: $mod
+		expressions.ModExpression.prototype.getMarkdown = function(level) {
+			var indent = getIndentStr(level),
+				str = indent + "get remainder of (modulo):\n";
+			var names = ["numerator", "denominator"];
+			names.forEach(function(name, i) {
+				str += indent + INDENT_STR + i + ". " + name;
+				var opDocStr = this.operands[i].getMarkdown(level + 2).trimRight();
+				if (opDocStr.indexOf("\n") === -1 && opDocStr.length < MAX_LINE_LEN) { // is one line
+					str += " is " + opDocStr.trimLeft() + "\n";
+				} else {
+					str += ":\n" + toListItem(opDocStr) + "\n";
+				}
+			}, this);
+			return str;
+		};
 
 		//TODO: $month
 
-		//TODO: $multiply
+		expressions.MultiplyExpression.prototype.getMarkdown = function(level) {
+			var str = "",
+				indent = getIndentStr(level),
+				opStrs = this.operands.map(function(op) {
+					return op.getMarkdown(level + 1).trimRight();
+				}),
+				isOneLine = opStrs.length <= 2 && opStrs.every(function(opStr, i) {
+					return opStr.indexOf("\n") === -1;
+				});
+			if (isOneLine && indent.length + opStrs.join(" + ").length < MAX_LINE_LEN) {
+				str += indent + "( " + opStrs.map(Function.prototype.call.bind(String.prototype.trimLeft)).join(" + ") + " )\n";
+			} else {
+				str += indent + "multiply:\n";
+				for (var i = 0, l = this.operands.length; i < l; i++) {
+					str += toListItem(opStrs[i], i) + "\n";
+				}
+			}
+			return str;
+		};
 
 		expressions.NotExpression.prototype.getMarkdown = function(level) {
 			var indent = getIndentStr(level),