Ребят, статья про метапрограммировние в io обязательно будет, честное слово. У меня сейчас очередной аврал на работе, продолжающийся последний месяц.
split и Importer
Я очень переживаю в данный момент за два непонятных момента в реализации io, кушать не могу даже. 1. Метод String split По сути всё понятно, сплит бьёт строку в список строк, однако если передать split'у примерно нисколько параметров он начинает думать, что строку бить надо по пробелам, а не по символам, в том же руби ситуация выглядит лучше. На днях потребовалось мне разбить строку на символы, и пришлось писать вот такой велосипед."String" foreach(char, list append(char)); return list2. Стандартный дзэнский импортер io (Importer) Я про него писал в одной из статей, он прикольный, но у него выискалось какое-то странное требование. В выходные писал себе фильтр для org-mode (соус ниже), и потребовалось мне на него написать юнит-тесты (благо UnitTest в стандартной поставке), дак вот файл с тестами не хотел импортировать OrgParser до тех пор, пока я не назвал и сам объект и файл его хранящий с большой буквы, много думаю до сих пор, бага или фича. Наколеночный парсер org-mode, выдирает записи оттэганные определённым тэгом и строит «отчёт»:
Using := Object clone do (
show := method(
"""Org parser and report generator.
Created by sdfgh153, 2008-08-10.
Using:
OrgParser.io <orgfile> <tag>""" println
)
)
OrgParser := Object clone do (
parse := method(file, tag,
records := List clone
orgFile := File clone openForReading(file)
orgFile foreachLine(line,
if(line containsSeq(":#{tag}:" interpolate),
records append(
line lstrip("*") rstrip(":#{tag}:" interpolate) strip
)
)
)
orgFile close
return records
)
)
OrgReport := Object clone do (
reportDir := "/home/semka/gtd/"
date := """#{Date now day asString}.
#{Date now month asString}.
#{Date now year asString}""" interpolate
date := date asMutable replaceSeq("\n", "") replaceSeq(" ", "")
lines := List clone
output := "#{reportDir}/#{date}.todo" interpolate
tag := String clone
getHTMLReport := method(
"Todo me" println
return self output
)
getTextReport := method(
out := File with(self output)
if(out exists,
out remove close
)
txtReport := out openForUpdating
txtReport write("\"#{self tag}\" tag summary, #{self date}\n" interpolate)
lines foreach(line,
txtReport write ("- ", "#{line} [ ]" interpolate, "\n")
)
txtReport close
return self output
)
)
if(System args size != 3,
Using show,
OrgReport lines = OrgParser parse(
System args at(1) asString,
System args at(2) asString
)
OrgReport tag = System args at(2)
OrgReport getTextReport print
)
Если кому-то интересно, допилю до вменяемого состояния, сделаю html-репорты, в планах было сделать TeX репорты, но я всё ещё думаю.
Привет.
1 коммент.:
Что то я не понимаю, как импортер этот работает, вот что надо сделать, что б в сборке для винды получить доступ к опен гл?
Отправить комментарий