Open the-teacher opened 8 years ago
Буду отписываться по мере выполнения.
запуск типографа
Установить 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);
работает, читает из первого , преобразует, пишет во второй. Надеюсь сделал корректно.
@aleksposte если результат увидел и он соответствует ожидаениям. Значит все ок.
fs
нужен для чтения и записи файла. Нам это не потребуется, если файл будет читаться в руби.
Ты сделал через ноду. Это хорошо.
А теперь надо ноду вызвать прямо в терминале и передать ей поток. грубо говоря нужно сделать что то такое:
cat text_1.txt >> node -e "tp = new Typograf({lang: 'ru'})"
короч, найди возможность прочитать файл консольными средствами, и вызвать кусок Nodejs кода прямо из терминала. В ноде 100% должна бытьвозможность эвалить код прямо в терминальном окне.
ты админ, ты должен понять о чем я. Если нет спрашивай.
Если я правильно понимаю, то из консоли можно передать в 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.(но сам его даже не читает)
@aleksposte концепт правильный. нужно было просто понять как передавать текст на обработку в терминале.
Возникает другой вопрос. Типограф, как я понимаю, состоит из ряда модулей. Один отвечает за одну обработку текста, другой за другую. Поправь меня если не так.
Как передать в типограф параметры обработки текста?
@aleksposte
system("typograf -l ru tests/test_2.txt > tests/outpout_file.txt")
принципиально верно. Как прочитать в руби файл и поместить контент в файл - наука не великая. Дальше просто сделаешь интерполяцию переменной с текстом вместо tests/test_2.txt
а результат обработки заберешь из system
. В простейшем случае так. Если что то не сработает, то можно будет создать пару временных файлов и передать пути к ним в system
@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: Я хочу понять может ли типограф принимать параметры для формирования правил обработки текста и как мы будем их формировать и передавать типографу. Несомненно руби скрипт должен иметь позможность передавать типографу правила обработки (если у типографа есть вообще какие то опции, ктоме как входной и конечный файл)
Привет, да типограф может принимать параметры для изменения правил обработки, typograf -l ru - русские правила, -l en -английские правила и тд, и также можно включать и выключать различные правила var Typograf = require('typograf'), tp = new Typograf({lang: 'ru'});
tp.enable('ru/optalign/rule');
.пытаюсь разобраться с передачей параметров js в node из ruby.Не очень быстро к сожалению(на работе конец года :) , я на некоторое время буду выпадать в ofline)
пытаюсь разобраться с передачей параметров 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)
Илья, привет, не было возможности заняться. :( прошу прощения, что все дни ничего не прислал, сегодня только смог сесть заняться.
Добавил правила для дополнительной обработки текста (т.е. есть основные правила обработки, они включены по умолчанию и возможность подключать доп. правила),
Основные правила, которые включены по умолчанию также можно отключить, нужно ли делать возможность их отключения?(это даст больше возможностей и гибкости при использовании).
А каким образом будут условия обработки текста (имя файла, язык и тд) будут попадать в скрипт? или они будут вводиться из консоли? (второй кусок, закомментированный, он как раз позволяет вводить данные из консоли, )
# Ввод параметров в файл:
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
прошу прощения, что все дни ничего не прислал, сегодня только смог сесть заняться.
все ок. Дедлайнов нет. Просто не останавливайся и двигайся к цели.
Чуть позже посмотрю подробнее.
@aleksposte я был пьян, счастлив и весел ... продолжаем ...
А каким образом будут условия обработки текста (имя файла, язык и тд) будут попадать в скрипт? или они будут вводиться из консоли? (второй кусок, закомментированный, он как раз позволяет вводить данные из консоли, )
Вот пример работы биндинга Tex для руби. Можно ознакомиться и попробовать ответить на свой вопрос выше.
Попробуй сам предположить как это может работать. А я попробую подкорректировать если что-то пойдет не так
https://github.com/mindpin/tex2png/blob/master/lib/tex2png/converter.rb#L16
@LeX1978 Приглашаю к участию
Всем привет. Готов присоединиться и оказать посильную помощь
Привет, с праздниками всех :) Алексей - раз знакомству.
Попробуй сам предположить как это может работать
если я правильно понимаю, то он при необходимости должен вызываться из какого-либо файла, наверное как-то так:
# Использование:
# Подключаем:
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
@aleksposte я не вижу примера подключения конкретных правил. но в целом да.
Твоя задача
1) сформировать конетнт JS файла, согласно тех аргументов которые есть в руби скрипте 2) записать контент в файл для исполнения 3) выполнить скрипт, получить результат 4) вернуть результат исполнения из руби функции
ты уже готов это сделать или еще что-то нужно? как по мне так все уже готово для получения результата.
Илья, привет. Подчистил, дописал readme
, посмотри, как в целом? и кажется даже работает :). Могу в скайп тебе писать?
@aleksposte ридми по типографу отличное
option[:num_13]
буквенно цифровые имена правил в целом меня устраивают, но вообще то принято стараться делать отображение именования из одного инструмента в другой.
те. stripTags
в ноде по идее должен быть strip_tags
в руби. Но давай это оставим на потом.
Мне важно что бы ты сделал усилие над собой и в ближайшее время собрался с силами и сделал ruby скрипт, который по некоторым заданным парамерам (их можно прописать прямо в скрипте для начала) сформировал тело JS скрипта, оно было записано в файл, было исполнено, и был получен результат, который будет уже доступен в ruby.
Подозреваю у тебя состояние программистского ступора. Когда в целом задача понятна, но внутреннее напряжение не дает получить результат.
Просто прими решение, найди 1-2 часа и сделай это. Я в тебя верю. Пиши в любые чаты. Я доступен, если в сети.
на данный момент:
typograf.rb
- принимает значения и через CLI отправляет их на выполнение и запись результата.
а нужно, чтобы `typograf.rb`` - принимал значения и создавал файл typograf.JS, в котором будут указаны преданные значения, затем записывал данный файл, исполнял его в node, и обратно получил обработанный текст, правильно?
Судя по всему, я не правильно понял задачу :(
@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
Напиши пару простейших тестов и расскажи в ридми как мне их запустить. Я запущу и проверю.
Если все ок - то начнем вторую итерацию
А чем я могу помочь ? 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.
@aleksposte думаю ты видишь ход процесса. Можно сделать форк и написать пару тестов, например. Заодно и разобраться в текущем коде. Сделать предложения по улучшению. Я вот вижу что есть явные вещи которые надо поправить.
Это опенсорс, предлагай улучшения. Давайте обсуждать.
@aleksposte твои задачи