import QtQml 2.0
import QOwnNotesTypes 1.0

import "markdown-it.js" as MarkdownIt

QtObject {
	property variant md;
	
	property string options;
	property string customStylesheet;

	property variant settingsVariables: [
		{
			"identifier": "options",
			"name": "Markdown-it options",
			"description": "For available options and default values see https://github.com/markdown-it/markdown-it/blob/master/lib/presets",
			"type": "text",
			"default":
"{"+"\n"+
"    //html:         false,        // Enable HTML tags in source"+"\n"+
"    //xhtmlOut:     false,        // Use '/' to close single tags (<br />)"+"\n"+
"    //breaks:       false,        // Convert '\\n' in paragraphs into <br>"+"\n"+
"    //langPrefix:   'language-',  // CSS language prefix for fenced blocks"+"\n"+
"    //linkify:      false,        // autoconvert URL-like texts to links"+"\n"+
""+"\n"+
"    // Enable some language-neutral replacements + quotes beautification"+"\n"+
"    //typographer:  false,"+"\n"+
""+"\n"+
"    // Double + single quotes replacement pairs, when typographer enabled,"+"\n"+
"    // and smartquotes on. Could be either a String or an Array."+"\n"+
"    //"+"\n"+
"    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,"+"\n"+
"    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp)."+"\n"+
"    //quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */"+"\n"+
""+"\n"+
"    // Highlighter function. Should return escaped HTML,"+"\n"+
"    // or '' if the source string is not changed and should be escaped externaly."+"\n"+
"    // If result starts with <pre... internal wrapper is skipped."+"\n"+
"    //"+"\n"+
"    // function (/*str, lang*/) { return ''; }"+"\n"+
"    //"+"\n"+
"    //highlight: null,"+"\n"+
""+"\n"+
"    //maxNesting:   100            // Internal protection, recursion limit"+"\n"+
"}"
		},
		{
            "identifier": "customStylesheet",
            "name": "Custom stylesheet",
            "description": "Please enter your custom stylesheet:",
            "type": "text",
            "default": null,
        },
	];
	
    function init() {
		
		var optionsObj = eval("("+options+")");
		md = new MarkdownIt.markdownit(optionsObj);
		
		//Allow file:// url scheme
		var validateLinkOrig = md.validateLink;
		var GOOD_PROTO_RE = /^(file):/;
		md.validateLink = function(url)
		{
			var str = url.trim().toLowerCase();
			return GOOD_PROTO_RE.test(str) ? true : validateLinkOrig(url);
		}
	}
	
    function noteToMarkdownHtmlHook(note, html) {
		
		var mdHtml = md.render(note.noteText);
		
		//Insert root folder in attachments and media relative urls
		var path = script.currentNoteFolderPath();
		if (script.platformIsWindows()) {
			path = "/" + path;
		}
		mdHtml = mdHtml.replace(new RegExp("href=\"file://attachments/", "gi"), "href=\"file://" + path + "/attachments/");
		mdHtml = mdHtml.replace(new RegExp("src=\"file://media/", "gi"), "src=\"file://" + path + "/media/");
		
		//Get original styles
		var head = html.match(new RegExp("<head>(?:.|\n)*?</head>"))[0];
		//Add custom styles
		head = head.replace("</style>", customStylesheet + "</style>");
		
		mdHtml = "<html>"+head+"<body>"+mdHtml+"</body></html>";
		
		return mdHtml;
    }
}