diff --git a/markwon-core/src/main/java/io/noties/markwon/LinkResolverDef.java b/markwon-core/src/main/java/io/noties/markwon/LinkResolverDef.java
index 999dcee5..f61ad21f 100644
--- a/markwon-core/src/main/java/io/noties/markwon/LinkResolverDef.java
+++ b/markwon-core/src/main/java/io/noties/markwon/LinkResolverDef.java
@@ -20,7 +20,7 @@ public class LinkResolverDef implements LinkResolver {
try {
context.startActivity(intent);
} catch (ActivityNotFoundException e) {
- Log.w("LinkResolverDef", "Actvity was not found for intent, " + intent.toString());
+ Log.w("LinkResolverDef", "Actvity was not found for the link: '" + link + "'");
}
}
}
diff --git a/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathBlockParser.java b/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathBlockParser.java
index cb159aef..3ef61a24 100644
--- a/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathBlockParser.java
+++ b/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathBlockParser.java
@@ -120,6 +120,7 @@ public class JLatexMathBlockParser extends AbstractBlockParser {
}
// consume spaces until the end of the line, if any other content is found -> NONE
+ // TODO: here we can check mode in which we operate (legacy or not)
if (Parsing.skip(SPACE, line, nextNonSpaceIndex + signs, length) != length) {
return BlockStart.none();
}
diff --git a/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathPlugin.java b/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathPlugin.java
index 3f85b9f7..d758be38 100644
--- a/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathPlugin.java
+++ b/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathPlugin.java
@@ -42,8 +42,33 @@ import ru.noties.jlatexmath.JLatexMathDrawable;
/**
* @since 3.0.0
*/
-public class JLatexMathPlugin extends AbstractMarkwonPlugin {
+public class JLatexMathPlugin extends AbstractMarkwonPlugin {
+ /**
+ * @since 4.3.0-SNAPSHOT
+ */
+ public enum RenderMode {
+ /**
+ * LEGACY mode mimics pre {@code 4.3.0-SNAPSHOT} behavior by rendering LaTeX blocks only.
+ * In this mode LaTeX is started by `$$` (that must be exactly at the start of a line) and
+ * ended at whatever line that is ended with `$$` characters exactly.
+ */
+ LEGACY,
+
+ /**
+ * Starting with {@code 4.3.0-SNAPSHOT} it is possible to have LaTeX inlines (which flows inside
+ * a text paragraph without breaking it). Inline LaTeX starts and ends with `$$` symbols. For example:
+ * {@code
+ * **bold $$\\begin{array}\\end{array}$$ bold-end**, and whatever more
+ * }
+ * LaTeX block starts on a new line started by 0-3 spaces and 2 (or more) {@code $} signs
+ * followed by a new-line (with any amount of space characters in-between). And ends on a new-line
+ * starting with 0-3 spaces followed by number of {@code $} signs that was used to start the block.
+ */
+ BLOCKS_AND_INLINES
+ }
+
+ // TODO: inlines are not moved to a new line when exceed available width.. (api 23, emulator)
public interface BuilderConfigure {
void configureBuilder(@NonNull Builder builder);
}
@@ -338,6 +363,7 @@ public class JLatexMathPlugin extends AbstractMarkwonPlugin {
final JLatexMathDrawable jLatexMathDrawable;
+ // TODO: obtain real values from theme (for blocks and inlines)
final JLatextAsyncDrawable jLatextAsyncDrawable = (JLatextAsyncDrawable) drawable;
if (jLatextAsyncDrawable.isBlock) {
// create JLatexMathDrawable
diff --git a/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathTheme.java b/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathTheme.java
index 04ea346c..30b9e04a 100644
--- a/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathTheme.java
+++ b/markwon-ext-latex/src/main/java/io/noties/markwon/ext/latex/JLatexMathTheme.java
@@ -1,6 +1,5 @@
package io.noties.markwon.ext.latex;
-import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull;
@@ -16,12 +15,22 @@ public abstract class JLatexMathTheme {
@NonNull
public static JLatexMathTheme create(@Px float textSize) {
- return null;
+ return builder(textSize).build();
}
@NonNull
- public static JLatexMathTheme builer() {
- return null;
+ public static JLatexMathTheme create(@Px float inlineTextSize, @Px float blockTextSize) {
+ return builder(inlineTextSize, blockTextSize).build();
+ }
+
+ @NonNull
+ public static JLatexMathTheme.Builder builder(@Px float textSize) {
+ return new JLatexMathTheme.Builder(textSize, 0F, 0F);
+ }
+
+ @NonNull
+ public static JLatexMathTheme.Builder builder(@Px float inlineTextSize, @Px float blockTextSize) {
+ return new Builder(0F, inlineTextSize, blockTextSize);
}
/**
@@ -73,7 +82,7 @@ public abstract class JLatexMathTheme {
/**
* @return text size in pixels for inline LaTeX
- * @see #blockTexxtSize()
+ * @see #blockTextSize()
*/
@Px
public abstract float inlineTextSize();
@@ -83,7 +92,7 @@ public abstract class JLatexMathTheme {
* @see #inlineTextSize()
*/
@Px
- public abstract float blockTexxtSize();
+ public abstract float blockTextSize();
@Nullable
public abstract BackgroundProvider inlineBackgroundProvider();
@@ -111,9 +120,9 @@ public abstract class JLatexMathTheme {
public static class Builder {
- private float textSize;
- private float inlineTextSize;
- private float blockTextSize;
+ private final float textSize;
+ private final float inlineTextSize;
+ private final float blockTextSize;
private BackgroundProvider backgroundProvider;
private BackgroundProvider inlineBackgroundProvider;
@@ -121,10 +130,168 @@ public abstract class JLatexMathTheme {
private boolean blockFitCanvas;
// horizontal alignment (when there is additional horizontal space)
- private int blockAlign;
+ private int blockHorizontalAlignment;
private Padding padding;
private Padding inlinePadding;
private Padding blockPadding;
+
+ Builder(float textSize, float inlineTextSize, float blockTextSize) {
+ this.textSize = textSize;
+ this.inlineTextSize = inlineTextSize;
+ this.blockTextSize = blockTextSize;
+ }
+
+ @NonNull
+ public Builder backgroundProvider(@Nullable BackgroundProvider backgroundProvider) {
+ this.backgroundProvider = backgroundProvider;
+ this.inlineBackgroundProvider = backgroundProvider;
+ this.blockBackgroundProvider = backgroundProvider;
+ return this;
+ }
+
+ @NonNull
+ public Builder inlineBackgroundProvider(@Nullable BackgroundProvider inlineBackgroundProvider) {
+ this.inlineBackgroundProvider = inlineBackgroundProvider;
+ return this;
+ }
+
+ @NonNull
+ public Builder blockBackgroundProvider(@Nullable BackgroundProvider blockBackgroundProvider) {
+ this.blockBackgroundProvider = blockBackgroundProvider;
+ return this;
+ }
+
+ @NonNull
+ public Builder blockFitCanvas(boolean blockFitCanvas) {
+ this.blockFitCanvas = blockFitCanvas;
+ return this;
+ }
+
+ @NonNull
+ public Builder blockHorizontalAlignment(@JLatexMathDrawable.Align int blockHorizontalAlignment) {
+ this.blockHorizontalAlignment = blockHorizontalAlignment;
+ return this;
+ }
+
+ @NonNull
+ public Builder padding(@Nullable Padding padding) {
+ this.padding = padding;
+ this.inlinePadding = padding;
+ this.blockPadding = padding;
+ return this;
+ }
+
+ @NonNull
+ public Builder inlinePadding(@Nullable Padding inlinePadding) {
+ this.inlinePadding = inlinePadding;
+ return this;
+ }
+
+ @NonNull
+ public Builder blockPadding(@Nullable Padding blockPadding) {
+ this.blockPadding = blockPadding;
+ return this;
+ }
+
+ @NonNull
+ public JLatexMathTheme build() {
+ return null;
+ }
+ }
+
+ static class Impl extends JLatexMathTheme {
+
+ private final float textSize;
+ private final float inlineTextSize;
+ private final float blockTextSize;
+
+ private final BackgroundProvider backgroundProvider;
+ private final BackgroundProvider inlineBackgroundProvider;
+ private final BackgroundProvider blockBackgroundProvider;
+
+ private final boolean blockFitCanvas;
+ // horizontal alignment (when there is additional horizontal space)
+ private int blockHorizontalAlignment;
+
+ private final Padding padding;
+ private final Padding inlinePadding;
+ private final Padding blockPadding;
+
+ Impl(@NonNull Builder builder) {
+ this.textSize = builder.textSize;
+ this.inlineTextSize = builder.inlineTextSize;
+ this.blockTextSize = builder.blockTextSize;
+ this.backgroundProvider = builder.backgroundProvider;
+ this.inlineBackgroundProvider = builder.inlineBackgroundProvider;
+ this.blockBackgroundProvider = builder.blockBackgroundProvider;
+ this.blockFitCanvas = builder.blockFitCanvas;
+ this.blockHorizontalAlignment = builder.blockHorizontalAlignment;
+ this.padding = builder.padding;
+ this.inlinePadding = builder.inlinePadding;
+ this.blockPadding = builder.blockPadding;
+ }
+
+ @Override
+ public float inlineTextSize() {
+ if (inlineTextSize > 0F) {
+ return inlineTextSize;
+ }
+ return textSize;
+ }
+
+ @Override
+ public float blockTextSize() {
+ if (blockTextSize > 0F) {
+ return blockTextSize;
+ }
+ return textSize;
+ }
+
+ @Nullable
+ @Override
+ public BackgroundProvider inlineBackgroundProvider() {
+ if (inlineBackgroundProvider != null) {
+ return inlineBackgroundProvider;
+ }
+ return backgroundProvider;
+ }
+
+ @Nullable
+ @Override
+ public BackgroundProvider blockBackgroundProvider() {
+ if (blockBackgroundProvider != null) {
+ return blockBackgroundProvider;
+ }
+ return backgroundProvider;
+ }
+
+ @Override
+ public boolean blockFitCanvas() {
+ return blockFitCanvas;
+ }
+
+ @Override
+ public int blockHorizontalAlignment() {
+ return blockHorizontalAlignment;
+ }
+
+ @Nullable
+ @Override
+ public Padding inlinePadding() {
+ if (inlinePadding != null) {
+ return inlinePadding;
+ }
+ return padding;
+ }
+
+ @Nullable
+ @Override
+ public Padding blockPadding() {
+ if (blockPadding != null) {
+ return blockPadding;
+ }
+ return padding;
+ }
}
}
diff --git a/sample/src/main/java/io/noties/markwon/sample/ActivityWithMenuOptions.java b/sample/src/main/java/io/noties/markwon/sample/ActivityWithMenuOptions.java
new file mode 100644
index 00000000..66690f7b
--- /dev/null
+++ b/sample/src/main/java/io/noties/markwon/sample/ActivityWithMenuOptions.java
@@ -0,0 +1,34 @@
+package io.noties.markwon.sample;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+public abstract class ActivityWithMenuOptions extends Activity {
+
+ @NonNull
+ public abstract MenuOptions menuOptions();
+
+ private MenuOptions menuOptions;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ menuOptions = menuOptions();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ return menuOptions.onCreateOptionsMenu(menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ return menuOptions.onOptionsItemSelected(item);
+ }
+}
diff --git a/sample/src/main/java/io/noties/markwon/sample/MenuOptions.java b/sample/src/main/java/io/noties/markwon/sample/MenuOptions.java
new file mode 100644
index 00000000..1c349bd8
--- /dev/null
+++ b/sample/src/main/java/io/noties/markwon/sample/MenuOptions.java
@@ -0,0 +1,46 @@
+package io.noties.markwon.sample;
+
+import android.view.Menu;
+import android.view.MenuItem;
+
+import androidx.annotation.NonNull;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public class MenuOptions {
+
+ @NonNull
+ public static MenuOptions create() {
+ return new MenuOptions();
+ }
+
+ // to preserve order use LinkedHashMap
+ private final Map actions = new LinkedHashMap<>();
+
+ @NonNull
+ public MenuOptions add(@NonNull String title, @NonNull Runnable action) {
+ actions.put(title, action);
+ return this;
+ }
+
+ boolean onCreateOptionsMenu(Menu menu) {
+ if (!actions.isEmpty()) {
+ for (String key : actions.keySet()) {
+ menu.add(key);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ boolean onOptionsItemSelected(MenuItem item) {
+ final String title = String.valueOf(item.getTitle());
+ final Runnable action = actions.get(title);
+ if (action != null) {
+ action.run();
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/sample/src/main/java/io/noties/markwon/sample/editor/EditorActivity.java b/sample/src/main/java/io/noties/markwon/sample/editor/EditorActivity.java
index 5553c9f8..0dc05ef9 100644
--- a/sample/src/main/java/io/noties/markwon/sample/editor/EditorActivity.java
+++ b/sample/src/main/java/io/noties/markwon/sample/editor/EditorActivity.java
@@ -1,6 +1,5 @@
package io.noties.markwon.sample.editor;
-import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.SpannableStringBuilder;
@@ -42,12 +41,26 @@ import io.noties.markwon.inlineparser.EntityInlineProcessor;
import io.noties.markwon.inlineparser.HtmlInlineProcessor;
import io.noties.markwon.inlineparser.MarkwonInlineParser;
import io.noties.markwon.linkify.LinkifyPlugin;
+import io.noties.markwon.sample.ActivityWithMenuOptions;
+import io.noties.markwon.sample.MenuOptions;
import io.noties.markwon.sample.R;
-public class EditorActivity extends Activity {
+public class EditorActivity extends ActivityWithMenuOptions {
private EditText editText;
+ @NonNull
+ @Override
+ public MenuOptions menuOptions() {
+ return MenuOptions.create()
+ .add("simpleProcess", this::simple_process)
+ .add("simplePreRender", this::simple_pre_render)
+ .add("customPunctuationSpan", this::custom_punctuation_span)
+ .add("additionalEditSpan", this::additional_edit_span)
+ .add("additionalPlugins", this::additional_plugins)
+ .add("multipleEditSpans", this::multiple_edit_spans);
+ }
+
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -56,16 +69,6 @@ public class EditorActivity extends Activity {
this.editText = findViewById(R.id.edit_text);
initBottomBar();
-// simple_process();
-
-// simple_pre_render();
-
-// custom_punctuation_span();
-
-// additional_edit_span();
-
-// additional_plugins();
-
multiple_edit_spans();
}
diff --git a/sample/src/main/java/io/noties/markwon/sample/editor/LinkEditHandler.java b/sample/src/main/java/io/noties/markwon/sample/editor/LinkEditHandler.java
index 743428d0..3a6d60fd 100644
--- a/sample/src/main/java/io/noties/markwon/sample/editor/LinkEditHandler.java
+++ b/sample/src/main/java/io/noties/markwon/sample/editor/LinkEditHandler.java
@@ -40,24 +40,28 @@ class LinkEditHandler extends AbstractEditHandler {
final EditLinkSpan editLinkSpan = persistedSpans.get(EditLinkSpan.class);
editLinkSpan.link = span.getLink();
- final int s;
- final int e;
+ // First first __letter__ to find link content (scheme start in URL, receiver in email address)
+ // NB! do not use phone number auto-link (via LinkifyPlugin) as we cannot guarantee proper link
+ // display. For example, we _could_ also look for a digit, but:
+ // * if phone number start with special symbol, we won't have it (`+`, `(`)
+ // * it might interfere with an ordered-list
+ int start = -1;
- // markdown link vs. autolink
- if ('[' == input.charAt(spanStart)) {
- s = spanStart + 1;
- e = spanStart + 1 + spanTextLength;
- } else {
- s = spanStart;
- e = spanStart + spanTextLength;
+ for (int i = spanStart, length = input.length(); i < length; i++) {
+ if (Character.isLetter(input.charAt(i))) {
+ start = i;
+ break;
+ }
}
- editable.setSpan(
- editLinkSpan,
- s,
- e,
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
- );
+ if (start > -1) {
+ editable.setSpan(
+ editLinkSpan,
+ start,
+ start + spanTextLength,
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+ );
+ }
}
@NonNull
diff --git a/sample/src/main/java/io/noties/markwon/sample/latex/LatexActivity.java b/sample/src/main/java/io/noties/markwon/sample/latex/LatexActivity.java
index 3186c1cc..c669cde0 100644
--- a/sample/src/main/java/io/noties/markwon/sample/latex/LatexActivity.java
+++ b/sample/src/main/java/io/noties/markwon/sample/latex/LatexActivity.java
@@ -1,57 +1,100 @@
package io.noties.markwon.sample.latex;
-import android.app.Activity;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
-import android.util.Log;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import org.commonmark.node.Node;
-
-import io.noties.markwon.AbstractMarkwonPlugin;
import io.noties.markwon.Markwon;
import io.noties.markwon.ext.latex.JLatexMathPlugin;
import io.noties.markwon.ext.latex.JLatexMathTheme;
+import io.noties.markwon.sample.ActivityWithMenuOptions;
+import io.noties.markwon.sample.MenuOptions;
import io.noties.markwon.sample.R;
-import io.noties.markwon.utils.DumpNodes;
import ru.noties.jlatexmath.JLatexMathDrawable;
-public class LatexActivity extends Activity {
+public class LatexActivity extends ActivityWithMenuOptions {
+
+ private TextView textView;
+
+ @NonNull
+ @Override
+ public MenuOptions menuOptions() {
+ return MenuOptions.create()
+ .add("array", this::array)
+ .add("longDivision", this::longDivision)
+ .add("bangle", this::bangle)
+ .add("boxes", this::boxes)
+ .add("insideBlockQuote", this::insideBlockQuote);
+ }
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_text_view);
- final TextView textView = findViewById(R.id.text_view);
+ textView = findViewById(R.id.text_view);
-// String latex = "\\begin{array}{l}";
-// latex += "\\forall\\varepsilon\\in\\mathbb{R}_+^*\\ \\exists\\eta>0\\ |x-x_0|\\leq\\eta\\Longrightarrow|f(x)-f(x_0)|\\leq\\varepsilon\\\\";
-// latex += "\\det\\begin{bmatrix}a_{11}&a_{12}&\\cdots&a_{1n}\\\\a_{21}&\\ddots&&\\vdots\\\\\\vdots&&\\ddots&\\vdots\\\\a_{n1}&\\cdots&\\cdots&a_{nn}\\end{bmatrix}\\overset{\\mathrm{def}}{=}\\sum_{\\sigma\\in\\mathfrak{S}_n}\\varepsilon(\\sigma)\\prod_{k=1}^n a_{k\\sigma(k)}\\\\";
-// latex += "\\sideset{_\\alpha^\\beta}{_\\gamma^\\delta}{\\begin{pmatrix}a&b\\\\c&d\\end{pmatrix}}\\\\";
-// latex += "\\int_0^\\infty{x^{2n} e^{-a x^2}\\,dx} = \\frac{2n-1}{2a} \\int_0^\\infty{x^{2(n-1)} e^{-a x^2}\\,dx} = \\frac{(2n-1)!!}{2^{n+1}} \\sqrt{\\frac{\\pi}{a^{2n+1}}}\\\\";
-// latex += "\\int_a^b{f(x)\\,dx} = (b - a) \\sum\\limits_{n = 1}^\\infty {\\sum\\limits_{m = 1}^{2^n - 1} {\\left( { - 1} \\right)^{m + 1} } } 2^{ - n} f(a + m\\left( {b - a} \\right)2^{-n} )\\\\";
-// latex += "\\int_{-\\pi}^{\\pi} \\sin(\\alpha x) \\sin^n(\\beta x) dx = \\textstyle{\\left \\{ \\begin{array}{cc} (-1)^{(n+1)/2} (-1)^m \\frac{2 \\pi}{2^n} \\binom{n}{m} & n \\mbox{ odd},\\ \\alpha = \\beta (2m-n) \\\\ 0 & \\mbox{otherwise} \\\\ \\end{array} \\right .}\\\\";
-// latex += "L = \\int_a^b \\sqrt{ \\left|\\sum_{i,j=1}^ng_{ij}(\\gamma(t))\\left(\\frac{d}{dt}x^i\\circ\\gamma(t)\\right)\\left(\\frac{d}{dt}x^j\\circ\\gamma(t)\\right)\\right|}\\,dt\\\\";
-// latex += "\\begin{array}{rl} s &= \\int_a^b\\left\\|\\frac{d}{dt}\\vec{r}\\,(u(t),v(t))\\right\\|\\,dt \\\\ &= \\int_a^b \\sqrt{u'(t)^2\\,\\vec{r}_u\\cdot\\vec{r}_u + 2u'(t)v'(t)\\, \\vec{r}_u\\cdot\\vec{r}_v+ v'(t)^2\\,\\vec{r}_v\\cdot\\vec{r}_v}\\,\\,\\, dt. \\end{array}\\\\";
-// latex += "\\end{array}";
+// array();
+ longDivision();
+ }
+ private void array() {
+ String latex = "\\begin{array}{l}";
+ latex += "\\forall\\varepsilon\\in\\mathbb{R}_+^*\\ \\exists\\eta>0\\ |x-x_0|\\leq\\eta\\Longrightarrow|f(x)-f(x_0)|\\leq\\varepsilon\\\\";
+ latex += "\\det\\begin{bmatrix}a_{11}&a_{12}&\\cdots&a_{1n}\\\\a_{21}&\\ddots&&\\vdots\\\\\\vdots&&\\ddots&\\vdots\\\\a_{n1}&\\cdots&\\cdots&a_{nn}\\end{bmatrix}\\overset{\\mathrm{def}}{=}\\sum_{\\sigma\\in\\mathfrak{S}_n}\\varepsilon(\\sigma)\\prod_{k=1}^n a_{k\\sigma(k)}\\\\";
+ latex += "\\sideset{_\\alpha^\\beta}{_\\gamma^\\delta}{\\begin{pmatrix}a&b\\\\c&d\\end{pmatrix}}\\\\";
+ latex += "\\int_0^\\infty{x^{2n} e^{-a x^2}\\,dx} = \\frac{2n-1}{2a} \\int_0^\\infty{x^{2(n-1)} e^{-a x^2}\\,dx} = \\frac{(2n-1)!!}{2^{n+1}} \\sqrt{\\frac{\\pi}{a^{2n+1}}}\\\\";
+ latex += "\\int_a^b{f(x)\\,dx} = (b - a) \\sum\\limits_{n = 1}^\\infty {\\sum\\limits_{m = 1}^{2^n - 1} {\\left( { - 1} \\right)^{m + 1} } } 2^{ - n} f(a + m\\left( {b - a} \\right)2^{-n} )\\\\";
+ latex += "\\int_{-\\pi}^{\\pi} \\sin(\\alpha x) \\sin^n(\\beta x) dx = \\textstyle{\\left \\{ \\begin{array}{cc} (-1)^{(n+1)/2} (-1)^m \\frac{2 \\pi}{2^n} \\binom{n}{m} & n \\mbox{ odd},\\ \\alpha = \\beta (2m-n) \\\\ 0 & \\mbox{otherwise} \\\\ \\end{array} \\right .}\\\\";
+ latex += "L = \\int_a^b \\sqrt{ \\left|\\sum_{i,j=1}^ng_{ij}(\\gamma(t))\\left(\\frac{d}{dt}x^i\\circ\\gamma(t)\\right)\\left(\\frac{d}{dt}x^j\\circ\\gamma(t)\\right)\\right|}\\,dt\\\\";
+ latex += "\\begin{array}{rl} s &= \\int_a^b\\left\\|\\frac{d}{dt}\\vec{r}\\,(u(t),v(t))\\right\\|\\,dt \\\\ &= \\int_a^b \\sqrt{u'(t)^2\\,\\vec{r}_u\\cdot\\vec{r}_u + 2u'(t)v'(t)\\, \\vec{r}_u\\cdot\\vec{r}_v+ v'(t)^2\\,\\vec{r}_v\\cdot\\vec{r}_v}\\,\\,\\, dt. \\end{array}\\\\";
+ latex += "\\end{array}";
+
+ render(wrapLatexInSampleMarkdown(latex));
+ }
+
+ private void longDivision() {
String latex = "\\text{A long division \\longdiv{12345}{13}";
-// String latex = "{a \\bangle b} {c \\brace d} {e \\brack f} {g \\choose h}";
+ render(wrapLatexInSampleMarkdown(latex));
+ }
-// String latex = "\\begin{array}{cc}";
-// latex += "\\fbox{\\text{A framed box with \\textdbend}}&\\shadowbox{\\text{A shadowed box}}\\cr";
-// latex += "\\doublebox{\\text{A double framed box}}&\\ovalbox{\\text{An oval framed box}}\\cr";
-// latex += "\\end{array}";
+ private void bangle() {
+ String latex = "{a \\bangle b} {c \\brace d} {e \\brack f} {g \\choose h}";
+ render(wrapLatexInSampleMarkdown(latex));
+ }
- final String markdown = "# Example of LaTeX\n\nhello there: $$"
- + latex + "$$ so nice, really?\n\n $$ \n" + latex + "\n$$\n\n $$ \n" + latex + "\n$$";
+ private void boxes() {
+ String latex = "\\begin{array}{cc}";
+ latex += "\\fbox{\\text{A framed box with \\textdbend}}&\\shadowbox{\\text{A shadowed box}}\\cr";
+ latex += "\\doublebox{\\text{A double framed box}}&\\ovalbox{\\text{An oval framed box}}\\cr";
+ latex += "\\end{array}";
+ render(wrapLatexInSampleMarkdown(latex));
+ }
+ private void insideBlockQuote() {
+ String latex = "W=W_1+W_2=F_1X_1-F_2X_2";
+ final String md = "" +
+ "# LaTeX inside a blockquote\n" +
+ "> $$" + latex + "$$\n";
+ render(md);
+ }
+
+ @NonNull
+ private static String wrapLatexInSampleMarkdown(@NonNull String latex) {
+ return "" +
+ "# Example of LaTeX\n\n" +
+ "(inline): $$" + latex + "$$ so nice, really? Now, (block):\n\n" +
+ "$$\n" +
+ "" + latex + "\n" +
+ "$$\n\n" +
+ "the end";
+ }
+
+ private void render(@NonNull String markdown) {
final Markwon markwon = Markwon.builder(this)
.usePlugin(JLatexMathPlugin.create(textView.getTextSize(), new JLatexMathPlugin.BuilderConfigure() {
@Override
@@ -70,37 +113,7 @@ public class LatexActivity extends Activity {
;
}
}))
-// .usePlugin(JLatexMathPlugin.create(textView.getTextSize()))
- .usePlugin(new AbstractMarkwonPlugin() {
- @Override
- public void beforeRender(@NonNull Node node) {
- Log.e("LTX", DumpNodes.dump(node));
- }
- })
.build();
-//
-// if (true) {
-//// final String l = "$$\n" +
-//// " P(X=r)=\\frac{\\lambda^r e^{-\\lambda}}{r!}\n" +
-//// "$$\n" +
-//// "\n" +
-//// "$$\n" +
-//// " P(Xr)=1-P(X
+
+
+
+
\ No newline at end of file