--- /dev/null
+'use strict';
+
+var trim = require('trim');
+var word = require('is-word-character');
+var whitespace = require('is-whitespace-character');
+var locate = require('../locate/emphasis');
+
+module.exports = emphasis;
+emphasis.locator = locate;
+
+var C_ASTERISK = '*';
+var C_UNDERSCORE = '_';
+
+function emphasis(eat, value, silent) {
+ var self = this;
+ var index = 0;
+ var character = value.charAt(index);
+ var now;
+ var pedantic;
+ var marker;
+ var queue;
+ var subvalue;
+ var length;
+ var prev;
+
+ if (character !== C_ASTERISK && character !== C_UNDERSCORE) {
+ return;
+ }
+
+ pedantic = self.options.pedantic;
+ subvalue = character;
+ marker = character;
+ length = value.length;
+ index++;
+ queue = '';
+ character = '';
+
+ if (pedantic && whitespace(value.charAt(index))) {
+ return;
+ }
+
+ while (index < length) {
+ prev = character;
+ character = value.charAt(index);
+
+ if (character === marker && (!pedantic || !whitespace(prev))) {
+ character = value.charAt(++index);
+
+ if (character !== marker) {
+ if (!trim(queue) || prev === marker) {
+ return;
+ }
+
+ if (!pedantic && marker === C_UNDERSCORE && word(character)) {
+ queue += marker;
+ continue;
+ }
+
+ /* istanbul ignore if - never used (yet) */
+ if (silent) {
+ return true;
+ }
+
+ now = eat.now();
+ now.column++;
+ now.offset++;
+
+ return eat(subvalue + queue + marker)({
+ type: 'emphasis',
+ children: self.tokenizeInline(queue, now)
+ });
+ }
+
+ queue += marker;
+ }
+
+ if (!pedantic && character === '\\') {
+ queue += character;
+ character = value.charAt(++index);
+ }
+
+ queue += character;
+ index++;
+ }
+}