mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 22:09:52 +08:00
Mathjax: support equation number in read mode
This commit is contained in:
parent
2b5b460451
commit
8184f3a1af
@ -4,3 +4,86 @@ div.mark-rect {
|
|||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Mathjax */
|
||||||
|
x-eqs {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
x-eqs > x-eqn {
|
||||||
|
width: 100%;
|
||||||
|
margin-left: 3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
x-eqs > span {
|
||||||
|
text-align:right;
|
||||||
|
}
|
||||||
|
/* Mathjax */
|
||||||
|
|
||||||
|
/* View Image */
|
||||||
|
.view-image,.view-svg {
|
||||||
|
transition: 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-box {
|
||||||
|
display: none;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 1000;
|
||||||
|
padding-top: 50px;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: rgb(68, 68, 68);
|
||||||
|
background-color: rgba(68, 68, 68, 0.95);
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-content {
|
||||||
|
margin: auto;
|
||||||
|
display: block;
|
||||||
|
width: auto;
|
||||||
|
height: auto;
|
||||||
|
cursor: move;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add Animation */
|
||||||
|
.modal-content {
|
||||||
|
-webkit-animation-name: zoom;
|
||||||
|
-webkit-animation-duration: 0.6s;
|
||||||
|
animation-name: zoom;
|
||||||
|
animation-duration: 0.6s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes zoom {
|
||||||
|
from {-webkit-transform:scale(0)}
|
||||||
|
to {-webkit-transform:scale(1)}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes zoom {
|
||||||
|
from {transform:scale(0)}
|
||||||
|
to {transform:scale(1)}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The Close Button */
|
||||||
|
span.modal-close {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1000;
|
||||||
|
top: 15px;
|
||||||
|
right: 35px;
|
||||||
|
color: #DADADA;
|
||||||
|
font-size: 40px;
|
||||||
|
font-weight: bold;
|
||||||
|
transition: 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.modal-close:hover,
|
||||||
|
span.modal-close:focus {
|
||||||
|
color: #EEEEEE;
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
/* View Image */
|
||||||
|
@ -21,8 +21,7 @@
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="qrc:/resources/common.css">
|
<link rel="stylesheet" type="text/css" href="COMMON_CSS_PLACE_HOLDER">
|
||||||
<link rel="stylesheet" type="text/css" href="qrc:/resources/view_image.css">
|
|
||||||
<link rel="stylesheet" type="text/css" href="CSS_PLACE_HOLDER">
|
<link rel="stylesheet" type="text/css" href="CSS_PLACE_HOLDER">
|
||||||
<link rel="stylesheet" type="text/css" href="HIGHLIGHTJS_CSS_PLACE_HOLDER">
|
<link rel="stylesheet" type="text/css" href="HIGHLIGHTJS_CSS_PLACE_HOLDER">
|
||||||
<script src="qrc:/resources/qwebchannel.js"></script>
|
<script src="qrc:/resources/qwebchannel.js"></script>
|
||||||
|
@ -1,62 +0,0 @@
|
|||||||
.view-image,.view-svg {
|
|
||||||
transition: 0.3s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-box {
|
|
||||||
display: none;
|
|
||||||
position: fixed;
|
|
||||||
z-index: 1000;
|
|
||||||
padding-top: 50px;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
overflow: hidden;
|
|
||||||
background-color: rgb(68, 68, 68);
|
|
||||||
background-color: rgba(68, 68, 68, 0.95);
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-content {
|
|
||||||
margin: auto;
|
|
||||||
display: block;
|
|
||||||
width: auto;
|
|
||||||
height: auto;
|
|
||||||
cursor: move;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add Animation */
|
|
||||||
.modal-content {
|
|
||||||
-webkit-animation-name: zoom;
|
|
||||||
-webkit-animation-duration: 0.6s;
|
|
||||||
animation-name: zoom;
|
|
||||||
animation-duration: 0.6s;
|
|
||||||
}
|
|
||||||
|
|
||||||
@-webkit-keyframes zoom {
|
|
||||||
from {-webkit-transform:scale(0)}
|
|
||||||
to {-webkit-transform:scale(1)}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes zoom {
|
|
||||||
from {transform:scale(0)}
|
|
||||||
to {transform:scale(1)}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The Close Button */
|
|
||||||
span.modal-close {
|
|
||||||
position: absolute;
|
|
||||||
z-index: 1000;
|
|
||||||
top: 15px;
|
|
||||||
right: 35px;
|
|
||||||
color: #DADADA;
|
|
||||||
font-size: 40px;
|
|
||||||
font-weight: bold;
|
|
||||||
transition: 0.3s;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.modal-close:hover,
|
|
||||||
span.modal-close:focus {
|
|
||||||
color: #EEEEEE;
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
@ -18,7 +18,8 @@ function texmath(md, options) {
|
|||||||
|
|
||||||
for (let rule of texmath.rules[delimiters].block) {
|
for (let rule of texmath.rules[delimiters].block) {
|
||||||
md.block.ruler.before('fence', rule.name, texmath.block(rule));
|
md.block.ruler.before('fence', rule.name, texmath.block(rule));
|
||||||
md.renderer.rules[rule.name] = (tokens, idx) => rule.tmpl.replace(/\$1/,texmath.render(tokens[idx].content,true));
|
md.renderer.rules[rule.name] = (tokens, idx) => rule.tmpl.replace(/\$2/,tokens[idx].info) // equation number
|
||||||
|
.replace(/\$1/,texmath.render(tokens[idx].content,true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,6 +59,7 @@ texmath.block = (rule) =>
|
|||||||
let token = state.push(rule.name, 'math', 0);
|
let token = state.push(rule.name, 'math', 0);
|
||||||
token.block = true;
|
token.block = true;
|
||||||
token.content = res[1];
|
token.content = res[1];
|
||||||
|
token.info = res[2];
|
||||||
token.markup = rule.tag;
|
token.markup = rule.tag;
|
||||||
}
|
}
|
||||||
for (let line=begLine, endpos=res.lastIndex-1; line < endLine; line++)
|
for (let line=begLine, endpos=res.lastIndex-1; line < endLine; line++)
|
||||||
@ -101,6 +103,11 @@ texmath.rules = {
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
block: [
|
block: [
|
||||||
|
{ name: 'math_block_eqno',
|
||||||
|
rex: /\\\[(.+?)\\\]\s*?\(([^)$\r\n]+?)\)\s*$/gmy,
|
||||||
|
tmpl: '<x-eqs><x-eqn class="tex-to-render">$1</x-eqn><span>($2)</span></x-eqs>',
|
||||||
|
tag: '\\['
|
||||||
|
},
|
||||||
{ name: 'math_block',
|
{ name: 'math_block',
|
||||||
rex: /\\\[(.+?)\\\]\s*$/gmy,
|
rex: /\\\[(.+?)\\\]\s*$/gmy,
|
||||||
tmpl: '<x-eqn class="tex-to-render">$1</x-eqn>',
|
tmpl: '<x-eqn class="tex-to-render">$1</x-eqn>',
|
||||||
@ -117,6 +124,11 @@ texmath.rules = {
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
block: [
|
block: [
|
||||||
|
{ name: 'math_block_eqno',
|
||||||
|
rex: /`{3}math\s+?([^`]+?)\s+?`{3}\s*?\(([^)$\r\n]+?)\)\s*$/gmy,
|
||||||
|
tmpl: '<x-eqs><x-eqn class="tex-to-render">$1</x-eqn><span>($2)</span></x-eqs>',
|
||||||
|
tag: '```math'
|
||||||
|
},
|
||||||
{ name: 'math_block',
|
{ name: 'math_block',
|
||||||
rex: /`{3}math\s+?([^`]+?)\s+?`{3}\s*$/gmy,
|
rex: /`{3}math\s+?([^`]+?)\s+?`{3}\s*$/gmy,
|
||||||
tmpl: '<x-eqn class="tex-to-render">$1</x-eqn>',
|
tmpl: '<x-eqn class="tex-to-render">$1</x-eqn>',
|
||||||
@ -142,6 +154,11 @@ texmath.rules = {
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
block: [
|
block: [
|
||||||
|
{ name: 'math_block_eqno',
|
||||||
|
rex: /\${2}([^$]*?)\${2}\s*?\(([^)$\r\n]+?)\)\s*$/gmy,
|
||||||
|
tmpl: '<x-eqs><x-eqn class="tex-to-render">$1</x-eqn><span>($2)</span></x-eqs>',
|
||||||
|
tag: '$$'
|
||||||
|
},
|
||||||
{ name: 'math_block',
|
{ name: 'math_block',
|
||||||
rex: /\${2}([^$]*?)\${2}\s*$/gmy,
|
rex: /\${2}([^$]*?)\${2}\s*$/gmy,
|
||||||
tmpl: '<x-eqn class="tex-to-render">$1</x-eqn>',
|
tmpl: '<x-eqn class="tex-to-render">$1</x-eqn>',
|
||||||
|
@ -41,6 +41,8 @@ const QString VConfigManager::c_templateConfigFolder = QString("templates");
|
|||||||
|
|
||||||
const QString VConfigManager::c_snippetConfigFolder = QString("snippets");
|
const QString VConfigManager::c_snippetConfigFolder = QString("snippets");
|
||||||
|
|
||||||
|
const QString VConfigManager::c_resourceConfigFolder = QString("resources");
|
||||||
|
|
||||||
const QString VConfigManager::c_warningTextStyle = QString("color: #C9302C; font: bold");
|
const QString VConfigManager::c_warningTextStyle = QString("color: #C9302C; font: bold");
|
||||||
|
|
||||||
const QString VConfigManager::c_dataTextStyle = QString("font: bold");
|
const QString VConfigManager::c_dataTextStyle = QString("font: bold");
|
||||||
@ -64,6 +66,8 @@ void VConfigManager::initialize()
|
|||||||
{
|
{
|
||||||
initSettings();
|
initSettings();
|
||||||
|
|
||||||
|
checkVersion();
|
||||||
|
|
||||||
initThemes();
|
initThemes();
|
||||||
|
|
||||||
initEditorStyles();
|
initEditorStyles();
|
||||||
@ -858,6 +862,30 @@ const QString &VConfigManager::getSnippetConfigFilePath() const
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString VConfigManager::getResourceConfigFolder() const
|
||||||
|
{
|
||||||
|
return QDir(getConfigFolder()).filePath(c_resourceConfigFolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString &VConfigManager::getCommonCssUrl() const
|
||||||
|
{
|
||||||
|
static QString cssPath;
|
||||||
|
if (cssPath.isEmpty()) {
|
||||||
|
cssPath = QDir(getResourceConfigFolder()).filePath("common.css");
|
||||||
|
if (m_versionChanged || !QFileInfo::exists(cssPath)) {
|
||||||
|
// Output the default one.
|
||||||
|
if (!VUtils::copyFile(":/resources/common.css", cssPath, false)) {
|
||||||
|
cssPath = "qrc:/resources/common.css";
|
||||||
|
return cssPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cssPath = QUrl::fromLocalFile(cssPath).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return cssPath;
|
||||||
|
}
|
||||||
|
|
||||||
const QString VConfigManager::getKeyboardLayoutConfigFilePath() const
|
const QString VConfigManager::getKeyboardLayoutConfigFilePath() const
|
||||||
{
|
{
|
||||||
return QDir(getConfigFolder()).filePath(c_keyboardLayoutConfigFile);
|
return QDir(getConfigFolder()).filePath(c_keyboardLayoutConfigFile);
|
||||||
@ -1637,3 +1665,12 @@ QString VConfigManager::getRenderBackgroundColor(const QString &p_bgName) const
|
|||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VConfigManager::checkVersion()
|
||||||
|
{
|
||||||
|
const QString key("version");
|
||||||
|
QString ver = getConfigFromSettings("global", key).toString();
|
||||||
|
m_versionChanged = ver != c_version;
|
||||||
|
if (m_versionChanged) {
|
||||||
|
setConfigToSettings("global", key, c_version);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -457,6 +457,11 @@ public:
|
|||||||
// Get the folder c_codeBlockStyleConfigFolder in the config folder.
|
// Get the folder c_codeBlockStyleConfigFolder in the config folder.
|
||||||
const QString &getCodeBlockStyleConfigFolder() const;
|
const QString &getCodeBlockStyleConfigFolder() const;
|
||||||
|
|
||||||
|
// Get the folder c_resourceConfigFolder in the config folder.
|
||||||
|
QString getResourceConfigFolder() const;
|
||||||
|
|
||||||
|
const QString &getCommonCssUrl() const;
|
||||||
|
|
||||||
// All the editor styles.
|
// All the editor styles.
|
||||||
QList<QString> getEditorStyles() const;
|
QList<QString> getEditorStyles() const;
|
||||||
|
|
||||||
@ -663,6 +668,8 @@ private:
|
|||||||
|
|
||||||
QString getEditorStyleFile() const;
|
QString getEditorStyleFile() const;
|
||||||
|
|
||||||
|
void checkVersion();
|
||||||
|
|
||||||
// Default font and palette.
|
// Default font and palette.
|
||||||
QFont m_defaultEditFont;
|
QFont m_defaultEditFont;
|
||||||
QPalette m_defaultEditPalette;
|
QPalette m_defaultEditPalette;
|
||||||
@ -1032,6 +1039,9 @@ private:
|
|||||||
// Whether download image from parse and paste.
|
// Whether download image from parse and paste.
|
||||||
bool m_parsePasteLocalImage;
|
bool m_parsePasteLocalImage;
|
||||||
|
|
||||||
|
// Whether the VNote instance has different version of vnote.ini.
|
||||||
|
bool m_versionChanged;
|
||||||
|
|
||||||
// The name of the config file in each directory.
|
// The name of the config file in each directory.
|
||||||
static const QString c_dirConfigFile;
|
static const QString c_dirConfigFile;
|
||||||
|
|
||||||
@ -1080,6 +1090,9 @@ private:
|
|||||||
|
|
||||||
// The default export output folder name.
|
// The default export output folder name.
|
||||||
static const QString c_exportFolderName;
|
static const QString c_exportFolderName;
|
||||||
|
|
||||||
|
// The folder name of resource files.
|
||||||
|
static const QString c_resourceConfigFolder;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@ namespace HtmlHolder
|
|||||||
static const QString c_JSHolder = "JS_PLACE_HOLDER";
|
static const QString c_JSHolder = "JS_PLACE_HOLDER";
|
||||||
static const QString c_cssHolder = "CSS_PLACE_HOLDER";
|
static const QString c_cssHolder = "CSS_PLACE_HOLDER";
|
||||||
static const QString c_codeBlockCssHolder = "HIGHLIGHTJS_CSS_PLACE_HOLDER";
|
static const QString c_codeBlockCssHolder = "HIGHLIGHTJS_CSS_PLACE_HOLDER";
|
||||||
|
static const QString c_commonCssHolder = "COMMON_CSS_PLACE_HOLDER";
|
||||||
static const QString c_globalStyleHolder = "/* STYLE_GLOBAL_PLACE_HOLDER */";
|
static const QString c_globalStyleHolder = "/* STYLE_GLOBAL_PLACE_HOLDER */";
|
||||||
static const QString c_extraHolder = "<!-- EXTRA_PLACE_HOLDER -->";
|
static const QString c_extraHolder = "<!-- EXTRA_PLACE_HOLDER -->";
|
||||||
static const QString c_bodyHolder = "<!-- BODY_PLACE_HOLDER -->";
|
static const QString c_bodyHolder = "<!-- BODY_PLACE_HOLDER -->";
|
||||||
|
@ -120,6 +120,7 @@ QString VNote::generateHtmlTemplate(const QString &p_renderBg,
|
|||||||
g_palette->fillStyle(templ);
|
g_palette->fillStyle(templ);
|
||||||
|
|
||||||
// Must replace the code block holder first.
|
// Must replace the code block holder first.
|
||||||
|
templ.replace(HtmlHolder::c_commonCssHolder, g_config->getCommonCssUrl());
|
||||||
templ.replace(HtmlHolder::c_codeBlockCssHolder, p_codeBlockStyleUrl);
|
templ.replace(HtmlHolder::c_codeBlockCssHolder, p_codeBlockStyleUrl);
|
||||||
templ.replace(HtmlHolder::c_cssHolder, p_renderStyleUrl);
|
templ.replace(HtmlHolder::c_cssHolder, p_renderStyleUrl);
|
||||||
|
|
||||||
|
@ -261,7 +261,6 @@
|
|||||||
<file>resources/icons/tag_explorer.svg</file>
|
<file>resources/icons/tag_explorer.svg</file>
|
||||||
<file>resources/icons/tag.svg</file>
|
<file>resources/icons/tag.svg</file>
|
||||||
<file>resources/view_image.js</file>
|
<file>resources/view_image.js</file>
|
||||||
<file>resources/view_image.css</file>
|
|
||||||
<file>resources/icons/decrease_outline_level.svg</file>
|
<file>resources/icons/decrease_outline_level.svg</file>
|
||||||
<file>resources/icons/increase_outline_level.svg</file>
|
<file>resources/icons/increase_outline_level.svg</file>
|
||||||
<file>utils/markdown-it/markdown-it-texmath.js</file>
|
<file>utils/markdown-it/markdown-it-texmath.js</file>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user