function html2notecase(contents, note) {
    // remove any possible extra newlines which might be inserted - all relevant new lines should be only in 
 and 
    contents = contents.replace(/(?:\r\n|\r|\n)/, '');
    contents = contents.replace(/
<\/p>/g, '\n');
    contents = contents.replace(/
<\/p>/g, '\n');
    contents = contents.replace(/
/g, '\n');
    contents = contents.replace(/
/g, '\n');
    contents = contents.replace(/<\/p>/g, '\n');
    contents = contents.replace(/
/g, '');
    contents = contents.replace(/ /g, ' ');
    let index = 0;
    note.formatting = [];
    note.links = [];
    note.images = [];
    while (index < contents.length) {
        let curContent = contents.substr(index);
        if (contents[index] === '<') {
            let found = false;
            const endOfTag = curContent.indexOf('>');
            if (endOfTag === -1) {
                console.log("Can't find the end of the tag");
            }
            const curTag = curContent.substr(0, endOfTag + 1);
            for (tagId in tags) {
                const tag = tags[tagId];
                if (contents.substr(index, tag.length) === tag) {
                    found = true;
                    note.formatting.push({
                        note_id: note.detail.note_id,
                        note_offset: index,
                        fmt_tag: tagId,
                        fmt_color: '',
                        fmt_font: '',
                        fmt_value: 100
                    });
                    contents = contents.substr(0, index) + contents.substr(index + tag.length);
                    break;
                }
            }
            if (curTag.substr(0, 4) === "]+?href="([^"]+?)"[^>]+?>([^<]+?)<\/a>/.exec(curContent);
            if (linkMatch !== null) {
                const targetUrl = linkMatch[1];
                const linkText = linkMatch[2];
                const newLink = {
                    note_id: note.detail.note_id,
                    note_offset: index,
                    lnk_text: linkText
                };
                const noteIdMatch = /app#([A-Za-z0-9]{22})/.exec(targetUrl);
                if (noteIdMatch !== null) {
                    newLink.target_note_id = noteIdMatch[1];
                }
                else {
                    newLink.target_url = targetUrl;
                }
                note.links.push(newLink);
                contents = contents.substr(0, index) + linkText + contents.substr(index + linkMatch[0].length);
                found = true;
            }
            if (!found) {
                contents = contents.substr(0, index) + contents.substr(index + endOfTag + 1);
            }
        }
        else {
            let linkMatch = /^(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/i.exec(curContent);
            if (linkMatch !== null) {
                const targetUrl = linkMatch[0];
                const newLink = {
                    note_id: note.detail.note_id,
                    note_offset: index,
                    lnk_text: targetUrl
                };
                const noteIdMatch = /app#([A-Za-z0-9]{22})/.exec(targetUrl);
                if (noteIdMatch !== null) {
                    newLink.target_note_id = noteIdMatch[1];
                }
                else {
                    newLink.target_url = targetUrl;
                }
                note.links.push(newLink);
                index += targetUrl.length;
            }
            else {
                index++;
            }
        }
    }
    contents = contents.trim();
    note.detail.note_text = contents;
}