summaryrefslogtreecommitdiffstats
path: root/markdown_it/rules_inline/text.py
diff options
context:
space:
mode:
Diffstat (limited to 'markdown_it/rules_inline/text.py')
-rw-r--r--markdown_it/rules_inline/text.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/markdown_it/rules_inline/text.py b/markdown_it/rules_inline/text.py
new file mode 100644
index 0000000..ec6ee0f
--- /dev/null
+++ b/markdown_it/rules_inline/text.py
@@ -0,0 +1,57 @@
+# Skip text characters for text token, place those to pending buffer
+# and increment current pos
+
+from .state_inline import StateInline
+
+# Rule to skip pure text
+# '{}$%@~+=:' reserved for extensions
+
+# !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, or ~
+
+# !!!! Don't confuse with "Markdown ASCII Punctuation" chars
+# http://spec.commonmark.org/0.15/#ascii-punctuation-character
+
+
+def isTerminatorChar(ch):
+ return ch in {
+ 0x0A, # /* \n */:
+ 0x21, # /* ! */:
+ 0x23, # /* # */:
+ 0x24, # /* $ */:
+ 0x25, # /* % */:
+ 0x26, # /* & */:
+ 0x2A, # /* * */:
+ 0x2B, # /* + */:
+ 0x2D, # /* - */:
+ 0x3A, # /* : */:
+ 0x3C, # /* < */:
+ 0x3D, # /* = */:
+ 0x3E, # /* > */:
+ 0x40, # /* @ */:
+ 0x5B, # /* [ */:
+ 0x5C, # /* \ */:
+ 0x5D, # /* ] */:
+ 0x5E, # /* ^ */:
+ 0x5F, # /* _ */:
+ 0x60, # /* ` */:
+ 0x7B, # /* { */:
+ 0x7D, # /* } */:
+ 0x7E, # /* ~ */:
+ }
+
+
+def text(state: StateInline, silent: bool, **args):
+ pos = state.pos
+ posMax = state.posMax
+ while (pos < posMax) and not isTerminatorChar(state.srcCharCode[pos]):
+ pos += 1
+
+ if pos == state.pos:
+ return False
+
+ if not silent:
+ state.pending += state.src[state.pos : pos]
+
+ state.pos = pos
+
+ return True