2017-08-09 12:39:06 +00:00
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" ,
2018-03-30 05:58:05 +00:00
"description" : "For available options and default values see <a href='https://github.com/markdown-it/markdown-it/blob/master/lib/presets'>markdown-it presets</a>." ,
2017-08-09 12:39:06 +00:00
"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
2018-11-12 16:52:02 +00:00
head = head . replace ( "</style>" , "table {border-spacing: 0; border-style: solid; border-width: 1px; border-collapse: collapse; margin-top: 0.5em;} th, td {padding: 0 5px;}" + customStylesheet + "</style>" ) ;
2017-08-09 12:39:06 +00:00
mdHtml = "<html>" + head + "<body>" + mdHtml + "</body></html>" ;
return mdHtml ;
}
2018-03-30 05:51:32 +00:00
}