Skip to content

Документация

Yuri Sementsov edited this page Mar 2, 2015 · 2 revisions

mdash

Порт оригинального типографа Евгения Муравьёва (mdash.ru) на Node.js.

Установка

Инсталируем модуль:

npm install mdash-node

Документация

Currently this is a port from PHP library which fully immitates its behavior excluding debuging and custom builds. So you can check the original documentation on mdash.ru. Optimizations and improvements will follow. All formatting rules can be found on mdash.ru/rules.html (Russian).

Использование

Модуль принимает текст и настройки как при объявлении нового объекта, так и в качестве атрибутов метода format():

var Mdash = require('mdash-node');

var a = new Mdash("Типографика - это круто!");
console.log(a.format());  // <p>Типографика&nbsp;&mdash; это круто!</p>

var b = new Mdash("Типографика - это круто!", {'Text.paragraphs': false});
console.log(b.format());  // Типографика&nbsp;&mdash; это круто!

var c = new Mdash({'Text.paragraphs': false});
console.log(c.format("Типографика - это круто!"));  // Типографика&nbsp;&mdash; это круто!

console.log(Mdash.format("Типографика - это круто!", {'Text.paragraphs': false}));  // Типографика&nbsp;&mdash; это круто!

Трет (терминология заимствована из оригинального типографа) являет собой namespace, объединяющий однотипные правила форматирования. Получить список всех доступных третов можно при помощи метода ´getTretNames()`. Сортировка названий будет в порядке выполнения правил.

var typo = new Mdash();
var trets = typo.getTretNames();

// [ 'Text',
//   'Space',
//   'Number',
//   'Quote',
//   'Punctmark',
//   'Date',
//   'Symbol',
//   'Nobr',
//   'Dash',
//   'Abbr',
//   'OptAlign',
//   'Etc' ]

Получить названия всех правил, разбитые по третам или отфильтровать по маске можно с помощью метода ´getRuleNames()`:

var typo = new Mdash();
var rules = typo.getRuleNames();  // Названия всех правил

var dash = typo.getRuleNames('Dash');    // Только в трете Dash

// { Dash:
//    [ 'mdash_symbol_to_html_mdash',
//      'mdash',
//      'mdash_2',
//      'mdash_3',
//      'iz_za_pod',
//      'to_libo_nibud',
//      'koe_kak',
//      'ka_de_kas' ] }

Получить текущие настройки типографа:

var typo = new Mdash();
var settings = typo.getSettings();

// { Quote: { no_bdquotes: false, no_inches: false },
//   OptAlign: { disabled: true },
//   Text: { disabled: true },
//   'Dash.ka_de_kas': { disabled: true },
//   'Date.mdash_month_interval': { disabled: true },
//   'Date.nbsp_and_dash_month_interval': { disabled: true },
//   'Nobr.hyphen_nowrap_in_small_words': { disabled: true },
//   'Nobr.hyphen_nowrap': { disabled: true },
//   'Punctmark.dot_on_end': { disabled: true },
//   'OptAlign.oa_obracket_coma': { disabled: true } }

Настройки модуля

По-умолчанию некоторые правила (например, для оптического выравнивания) добавляют в текст при форматировании дополнительные HTML-тэги с атрибутом ´styles´. Если вместо этого вы предпочитаете пользоваться отдельными классами, можно сделать вот так:

Mdash.setLayout(Mdash.LAYOUT_CLASS);

Или можно выводить и то, и другое:

Mdash.setLayout(Mdash.LAYOUT_STYLE|Mdash.LAYOUT_CLASS);

Чтобы задать префикс генерируемых классов (по-умолчанию 'mdash-'):

Mdash.setLayoutClassPrefix('typo-');

Чтобы вывести готовый CSS для сгенерированных классов:

var css = Mdash.getStyles();

Настройки правил

All settings are usualy just the rule names with tret name as the namespace, so mainly you can enable or disable some of them. Also you can specify some options for the rule or specify some virtual settings for different rules. To disable some rule you can pass the arguments object where key is rulename (with namespace — tret name) and the value is false. For example, we want to disable rule oa_obracket_coma in namespace OptAlign:

{
  'OptAlign.oa_obracket_coma': false
}

Also we can disable all rules in the namespace:

{
  'OptAlign': false
}

In case we need to specify some options inside the rules or to apply some methods inside the different rules, we can use "virtual" rules. It is just a setting which name does not conflict with real rule name and selects specified rules:

{
  'Space.autospace_after': {
    selector: 'Space.autospace_after_*'
  },
  'Etc.unicode': {
    selector: '*',
    dounicode: true,
    disabled: true
  }
}

There is no such rule as Etc.unicode, however if we will pass this as setting to the lib, the option dounicode will be applied to the rules specified in selector (to all rules in this case). Also switching disabled will either enable or disable it.

For example, to turn on convertion of the HTML entities in unicode characters we can put this in settings:

var typo = new Mdash({
  'Etc.unicode': true
});

Or if we would like to disable all rules which puts space after punctuation marks:

var typo = new Mdash({
  'Space.autospace_after': false
});

Which is equal to this settings for the real rules:

var typo = new Mdash({
  'Space.autospace_after_comma': false,
  'Space.autospace_after_pmarks': false,
  'Space.autospace_after_dot': false,
  'Space.autospace_after_hellips': false
});

Преднастройки и алиасы по-умолчанию:

Mdash.prototype.presets = {
  'Quote': {
    no_bdquotes: false,
    no_inches: false
  },
  'OptAlign': {
    disabled: true
  },
  'Text': {
    disabled: true
  },
  'Dash.ka_de_kas': {
    disabled: true
  },
  'Date.mdash_month_interval': {
    disabled: true
  },
  'Date.nbsp_and_dash_month_interval': {
    disabled: true
  },
  'Nobr.hyphen_nowrap_in_small_words': {
    disabled: true
  },
  'Nobr.hyphen_nowrap': {
    disabled: true
  },
  'Punctmark.dot_on_end': {
    disabled: true
  },
  'Space.clear_before_after_punct': {
    selector: 'Space.remove_space_before_punctuationmarks'
  },
  'Space.autospace_after': {
    selector: 'Space.autospace_after_*'
  },
  'Space.bracket_fix': {
    selector: ['Space.nbsp_before_open_quote', 'Punctmark.fix_brackets']
  },
  'Etc.unicode': {
    selector: '*',
    dounicode: true,
    disabled: true
  }
};

.mdash

Можно задать глобальные настройки правил, поместив их в простой JSON в файл .mdash в корне вашего проекта:

{
  "OptAlign.oa_obracket_coma": false,
  "Text.paragraphs": false,
  "Text.breakline": false,
  "Quote": false
}

Эти настройки будут перекрываться настройками, которые вы передаёте объекту напрямую.

License

This package is licensed under the MIT license.