aleksposte / typograf

0 stars 0 forks source link

workflow #17

Open the-teacher opened 8 years ago

the-teacher commented 8 years ago

@aleksposte твои задачи

  1. Научиться запускать типограф из ноды напрямую. Посмотреть какой код это требует
  2. Узнать как выполнять в руби скрипте консольную команду
  3. Устроить все так, что бы в руби скрипте формировался кусок JS и выполнялся в консоли через возможности руби по запуску консольных команд
  4. Научится получать результат выполнения консольной команды и выводить это результат в терминал. В идеале сохранять в новый файл
aleksposte commented 8 years ago

Буду отписываться по мере выполнения.

1.Научиться запускать типограф из ноды напрямую. Посмотреть какой код это требует:

запуск типографа

Установить typograf для node:

npm install typograf

С js не общался, поэтому не факт, что сделал правильно, но работает. для чтения, записи необходим модуль fs , устанавливаем:

npm install fs

в папке node , создал файл

typograf_run.js

поискав написал следующее:

var Typograf = require('typograf'),
    tp = new Typograf({lang: 'ru'});

var fs = require('fs');

var input_text = fs.readFileSync('/Users/Sanches/Web/RoR/Repositorys/typograf/tests/test_2.txt', 'utf8');

var out_text = tp.execute(input_text);

fs.writeFileSync('/Users/Sanches/Web/RoR/Repositorys/typograf/tests/outpout_file.txt', out_text);

работает, читает из первого , преобразует, пишет во второй. Надеюсь сделал корректно.

the-teacher commented 8 years ago

@aleksposte если результат увидел и он соответствует ожидаениям. Значит все ок.

fs нужен для чтения и записи файла. Нам это не потребуется, если файл будет читаться в руби.

Ты сделал через ноду. Это хорошо.

А теперь надо ноду вызвать прямо в терминале и передать ей поток. грубо говоря нужно сделать что то такое:

cat text_1.txt >> node -e "tp = new Typograf({lang: 'ru'})"

короч, найди возможность прочитать файл консольными средствами, и вызвать кусок Nodejs кода прямо из терминала. В ноде 100% должна бытьвозможность эвалить код прямо в терминальном окне.

ты админ, ты должен понять о чем я. Если нет спрашивай.

aleksposte commented 8 years ago

Если я правильно понимаю, то из консоли можно передать в node след способом(из описания типографа) :

установить командный интерфейс

npm install typograf-cli -g

и тогда можно передавать например

typograf -l ru tests/test_1.txt

и в консоль будет выведен обработанный файл.

сделал в script_test.rb для чтения записи тестового файла:

#Первый тестовый файл, пишет результат в outpout_file.txt
#system("typograf -l ru tests/test_1.txt > tests/outpout_file.txt")

#Второй тестовый файл, пишет результат в outpout_file.txt
system("typograf -l ru tests/test_2.txt > tests/outpout_file.txt")

или я не правильно понял/сделал? просто, на данный момент, все, что делает ruby, так просто передает команду в терминале на отправку файла в node.(но сам его даже не читает)

the-teacher commented 8 years ago

@aleksposte концепт правильный. нужно было просто понять как передавать текст на обработку в терминале.

Возникает другой вопрос. Типограф, как я понимаю, состоит из ряда модулей. Один отвечает за одну обработку текста, другой за другую. Поправь меня если не так.

Как передать в типограф параметры обработки текста?

the-teacher commented 8 years ago

@aleksposte

system("typograf -l ru tests/test_2.txt > tests/outpout_file.txt")

принципиально верно. Как прочитать в руби файл и поместить контент в файл - наука не великая. Дальше просто сделаешь интерполяцию переменной с текстом вместо tests/test_2.txt а результат обработки заберешь из system. В простейшем случае так. Если что то не сработает, то можно будет создать пару временных файлов и передать пути к ним в system

the-teacher commented 8 years ago

@aleksposte мне представлялось что то такое

system('node -e "
var Typograf = require('typograf'),
    tp = new Typograf({lang: 'ru'});

tp.uses("rule_1"); // Правила обработки можно генерировать на лету
tp.uses("rule_2"); // По тем параметрам, которые будут в руби скрипте

result = tp.process_test(" YOUR TEST FOR PROCESSING")
return result;
"
')

т.е ту строку JS кода, которую мы даем ноде на исполнение мы будем формировать еще на уровне руби скрипта, что бы передавать типографу нужные правила обработки текста.

:warning: это только мое предположение. не факт, что там может быть или будет. Решение зависит от тебя.

:red_circle: Я хочу понять может ли типограф принимать параметры для формирования правил обработки текста и как мы будем их формировать и передавать типографу. Несомненно руби скрипт должен иметь позможность передавать типографу правила обработки (если у типографа есть вообще какие то опции, ктоме как входной и конечный файл)

aleksposte commented 8 years ago

Привет, да типограф может принимать параметры для изменения правил обработки, typograf -l ru - русские правила, -l en -английские правила и тд, и также можно включать и выключать различные правила var Typograf = require('typograf'), tp = new Typograf({lang: 'ru'});

tp.enable('ru/optalign/rule');

.пытаюсь разобраться с передачей параметров js в node из ruby.Не очень быстро к сожалению(на работе конец года :) , я на некоторое время буду выпадать в ofline)

the-teacher commented 8 years ago

пытаюсь разобраться с передачей параметров js в node из ruby

все что требуется - составить в ruby строку, которая будет передана system.

options = {}
options[:a] = true
options[:b] = true
options[:c] = true

comm = "var Typograf = require('typograf'),tp = new Typograf({lang: 'ru'});"

comm += "tp.enable('ru/optalign/rule_1');" if options[:a]
comm += "tp.enable('ru/optalign/rule_2');" if options[:b]
comm += "tp.enable('ru/optalign/rule_3');" if options[:c]

comm += "return tp.process('FILE_NAME')"

system(comm)
aleksposte commented 8 years ago

Илья, привет, не было возможности заняться. :( прошу прощения, что все дни ничего не прислал, сегодня только смог сесть заняться.

Добавил правила для дополнительной обработки текста (т.е. есть основные правила обработки, они включены по умолчанию и возможность подключать доп. правила),

Основные правила, которые включены по умолчанию также можно отключить, нужно ли делать возможность их отключения?(это даст больше возможностей и гибкости при использовании).

А каким образом будут условия обработки текста (имя файла, язык и тд) будут попадать в скрипт? или они будут вводиться из консоли? (второй кусок, закомментированный, он как раз позволяет вводить данные из консоли, )


# Ввод параметров в файл:

file_input_text = "tests/test_1.txt" # файл для обработки
file_output_text = "tests/outpout_file.txt" # файл для вывода
lang = "ru" # правила какого языка использовать для обработки (ru, en)

# Добавление дополнительных правил для обработки:

option = {}
option[:num_1] = true   # 1. Расстановка ссылок для эл. почты
option[:num_2] = false  # 2. Экранирование HTML
option[:num_3] = false  # 3. Замена перевода строки на
option[:num_4] = false  # 4. Расстановка тегов p и br
option[:num_5] = false  # 5. Удаление HTML-тегов
option[:num_6] = false  # 6. Расстановка ссылок    1110    
option[:num_7] = false  # 7. Нераз. пробел между числом и словом
option[:num_8] = false  # 8. Удаление пробелов в начале строки
option[:num_9] = false  # 9. 1 руб. → 1 ₽
option[:num_10] = false # 10. Для открывающей скобки
option[:num_11] = false # 11. Для запятой
option[:num_12] = false # 12. Для открывающей кавычки
option[:num_13] = false # 13. Замена заглавной буквы на строчную с добавлением ударения

rule = " "
if option[:num_1]; rule += " -e common/html/e-mail"; end
if option[:num_2]; rule += " -e common/html/escape"; end
if option[:num_3]; rule += " -e common/html/nbr"; end
if option[:num_4]; rule += " -e common/html/nbr"; end
if option[:num_5]; rule += " -e common/html/stripTags"; end
if option[:num_6]; rule += " -e common/html/url"; end
if option[:num_7]; rule += " -e common/nbsp/afterNumber"; end
if option[:num_8]; rule += " -e common/space/delLeadingBlanks"; end
if option[:num_9]; rule += " -e ru/money/ruble"; end
if option[:num_10]; rule += " -e ru/optalign/bracket"; end
if option[:num_11]; rule += " -e ru/optalign/comma"; end
if option[:num_12]; rule += " -e ru/optalign/quote"; end
if option[:num_13]; rule += " -e ru/other/accent"; end

# Отравка параметров в типограф:
all_options = "typograf -l #{lang} #{rule} #{file_input_text} > #{file_output_text}"
#puts all_options
system(all_options)

# # Вариант ввода параметров обработки текса через консоль:

# puts "Укажите файл для обработки (например: tests/test_2.txt)"
# file_input_text = gets.chomp
# puts "Укажите файл для вывода (например: tests/outpout_file.txt)"
# file_output_text = gets.chomp
# puts "Укажите язык обрабатываемого файла (ru, en)"
# lang = gets.chomp

# puts "Добавить правило обработки текста?(yes, no)" # Добавление правила.
# option_rules = gets.chomp

# if option_rules == "yes"
#   puts "правила:" # Правила даны для примера, их больше.
#   puts "1.Расстановка ссылок для эл. почты"
#   puts "2.Экранирование HTML"

#   puts "Укажите номер правила:"
#   num_rule = gets.chomp

#       if num_rule == '1'; rule = "-e common/html/e-mail" ;end
#       if num_rule == '2'; rule = "-e common/html/escape" ;end

# else
#   rule = " "
# end

# # Отравка параметров в типограф:
# #puts "typograf -l #{lang} #{rule} #{file_input_text}" " > " "#{file_output_text}"

# all_options = "typograf -l #{lang} #{rule} #{file_input_text} > #{file_output_text}"

# system(all_options)

# # end
the-teacher commented 8 years ago
 прошу прощения, что все дни ничего не прислал, сегодня только смог сесть заняться.

все ок. Дедлайнов нет. Просто не останавливайся и двигайся к цели.

Чуть позже посмотрю подробнее.

the-teacher commented 8 years ago

@aleksposte я был пьян, счастлив и весел ... продолжаем ...

А каким образом будут условия обработки текста (имя файла, язык и тд) будут попадать в скрипт? или они будут вводиться из консоли? (второй кусок, закомментированный, он как раз позволяет вводить данные из консоли, )

Вот пример работы биндинга Tex для руби. Можно ознакомиться и попробовать ответить на свой вопрос выше.

Попробуй сам предположить как это может работать. А я попробую подкорректировать если что-то пойдет не так

https://github.com/mindpin/tex2png/blob/master/lib/tex2png/converter.rb#L16

the-teacher commented 8 years ago

@LeX1978 Приглашаю к участию

LeX1978 commented 8 years ago

Всем привет. Готов присоединиться и оказать посильную помощь

aleksposte commented 8 years ago

Привет, с праздниками всех :) Алексей - раз знакомству.

Попробуй сам предположить как это может работать

если я правильно понимаю, то он при необходимости должен вызываться из какого-либо файла, наверное как-то так:

# Использование:
# Подключаем:
require "./typograf"

# Указываем файлы для ввода, вывода, язык:
file_input = "tests/test_1.txt"
file_output = "tests/output_file.txt"
lang = "ru"

# Отправляем в файл скрипта:
typograf = Typograf.new(file_input, file_output, lang)

или я не правильно понимаю? сделал для примера usage_typograf

the-teacher commented 8 years ago

@aleksposte я не вижу примера подключения конкретных правил. но в целом да.

Твоя задача

1) сформировать конетнт JS файла, согласно тех аргументов которые есть в руби скрипте 2) записать контент в файл для исполнения 3) выполнить скрипт, получить результат 4) вернуть результат исполнения из руби функции

ты уже готов это сделать или еще что-то нужно? как по мне так все уже готово для получения результата.

aleksposte commented 8 years ago

Илья, привет. Подчистил, дописал readme, посмотри, как в целом? и кажется даже работает :). Могу в скайп тебе писать?

the-teacher commented 8 years ago

@aleksposte ридми по типографу отличное

option[:num_13] буквенно цифровые имена правил в целом меня устраивают, но вообще то принято стараться делать отображение именования из одного инструмента в другой.

те. stripTags в ноде по идее должен быть strip_tags в руби. Но давай это оставим на потом.

Мне важно что бы ты сделал усилие над собой и в ближайшее время собрался с силами и сделал ruby скрипт, который по некоторым заданным парамерам (их можно прописать прямо в скрипте для начала) сформировал тело JS скрипта, оно было записано в файл, было исполнено, и был получен результат, который будет уже доступен в ruby.

Подозреваю у тебя состояние программистского ступора. Когда в целом задача понятна, но внутреннее напряжение не дает получить результат.

Просто прими решение, найди 1-2 часа и сделай это. Я в тебя верю. Пиши в любые чаты. Я доступен, если в сети.

aleksposte commented 8 years ago

на данный момент: typograf.rb - принимает значения и через CLI отправляет их на выполнение и запись результата.

а нужно, чтобы `typograf.rb`` - принимал значения и создавал файл typograf.JS, в котором будут указаны преданные значения, затем записывал данный файл, исполнял его в node, и обратно получил обработанный текст, правильно?

Судя по всему, я не правильно понял задачу :(

the-teacher commented 8 years ago

@aleksposte эээ. конкретная реализация меня не интересует, с файлом. без файла. Пофиг. Без файла еще и лучше.

Те ты хочешь сказать что она работает и его можно погонять? Ну, отлично. Опиши в ридми примеры запуска тестов и что в результате ожидается получить. Я качаю и проверю.

Можно создать папку tests. Там размести руби файлы, которые подключают твой модуль. Передают ему текст на вход и проверяют соответствие ожидаемому тексту.

Пример


require_relative '../lib/typograf.rb'

t_rb = Typograf.new
input_text  = "мама мыла раму - это круто"
output_text = "мама мыла раму -- это круто"

if t_rb.process(input_text) == output_text
    puts "test passed"
else
    puts "test failed"
end

Напиши пару простейших тестов и расскажи в ридми как мне их запустить. Я запущу и проверю.

Если все ок - то начнем вторую итерацию

LeX1978 commented 8 years ago

А чем я могу помочь ? 10 янв. 2016 г. 18:50 пользователь "Ilya N. Zykin" notifications@github.com написал:

@aleksposte https://github.com/aleksposte эээ. конкретная реализация меня не интересует, с файлом. без файла. Пофиг. Без файла еще и лучше.

Те ты хочешь сказать что она работает и его можно погонять? Ну, отлично. Опиши в ридми примеры запуска тестов и что в результате ожидается получить. Я качаю и проверю.

Можно создать папку tests. Там размести руби файлы, которые подключают твой модуль. Передают ему текст на вход и проверяют соответствие ожидаемому тексту.

Пример

require_relative '../lib/typograf.rb'

t_rb = Typograf.new input_text = "мама мыла раму - это круто" output_text = "мама мыла раму -- это круто" if t_rb(input_text) == output_text puts "test passed"else puts "test failed"end

Напиши пару простейших тестов и расскажи в ридми как мне их запустить. Я запущу и проверю.

Если все ок - то начнем вторую итерацию

— Reply to this email directly or view it on GitHub https://github.com/aleksposte/typograf/issues/17#issuecomment-170361452.

the-teacher commented 8 years ago

@aleksposte думаю ты видишь ход процесса. Можно сделать форк и написать пару тестов, например. Заодно и разобраться в текущем коде. Сделать предложения по улучшению. Я вот вижу что есть явные вещи которые надо поправить.

Это опенсорс, предлагай улучшения. Давайте обсуждать.