Хэл Фултон - Программирование на языке Ruby

Здесь есть возможность читать онлайн «Хэл Фултон - Программирование на языке Ruby» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: ДМК Пресс, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Программирование на языке Ruby: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Программирование на языке Ruby»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Ruby — относительно новый объектно-ориентированный язык, разработанный Юкихиро Мацумото в 1995 году и позаимствовавший некоторые особенности у языков LISP, Smalltalk, Perl, CLU и других. Язык активно развивается и применяется в самых разных областях: от системного администрирования до разработки сложных динамических сайтов.
Книга является полноценным руководством по Ruby — ее можно использовать и как учебник, и как справочник, и как сборник ответов на вопросы типа «как сделать то или иное в Ruby». В ней приведено свыше 400 примеров, разбитых по различным аспектам программирования, и к которым автор дает обстоятельные комментарии.
Издание предназначено для программистов самого широкого круга и самой разной квалификации, желающих научиться качественно и профессионально работать на Ruby.

Программирование на языке Ruby — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Программирование на языке Ruby», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать
Листинг 15.10. Метод quadrant

def quadrant(pdf, quad)

raise unless block_given?

mx = pdf.absolute_x_middle

my = pdf.absolute_y_middle

pdf.save_state

case quad

when :ul

pdf.translate_axis(0, my)

when :ur

pdf.translate_axis(mx, my)

when :ll

nil # pdf.translate_axis(0, 0)

when :lr

pdf.translate_axis(mx, 0)

end

pdf.scale_axis(0.5, 0.5)

pdf.у = pdf.page_height

yield

pdf.restore_state

end

Здесь каждая страница целиком строится в отдельном блоке. Таким образом, мы можем изменять масштаб и положение осей, никак не затрагивая код построения страницы. Первым делом мы, конечно, сохраняем текущее состояние. Это позволит нам не восстанавливать вручную масштаб и начало системы координат по завершении работы. Перед тем как приступать к конструированию, мы помещаем начало координат квадранта в нужное место страницы (pdf.translate_axis x, y).

Предположим, что начало координат находится не в точке (0, 0), а в точке (50, 50). Тогда отрезок из точки (15, 20)в точку (35, 40)на самом деле будет соединять точки с координатами (65, 70)и (85, 90). Но код рисования отрезка об этом ничего не знает.

После переноса оси (то есть сдвига начала координат) мы можем изменить масштаб вдоль оси. Чтобы получить четыре квадранта, следует уменьшить вдвое масштаб по осям X и Y ( pdf.scale_axis 0.5, 0.5). Иными словами, если бы сейчас я провел отрезок между точками (0, 0)и (90, 90), то без переноса осей он соединял бы точки с физическими координатами (0, 0)и (45, 45), а с переносом — точки с координатами (90, 90)и (135, 135). В любом случае будет проведена линия вдоль диагонали длиной 90 единиц измерения. Просто из-за масштабирования сами единицы стали в два раза меньше.

Затем мы отдаем управление блоку, а когда он закончит работу, восстанавливаем состояние, вызывая предоставленный библиотекой метод restore_state. Иначе пришлось бы вручную увеличивать масштаб вдвое и переносить ось в обратном направлении.

15.4.2. Пример документа

Для демонстрации рассмотренной выше техники мы создадим четыре страницы в четырех разных квадрантах. Три из них — слегка измененные варианты демонстрационных программ, включённых в дистрибутив PDF::Writer:

demo.rb, квадрант 1

individual-i.rb, квадрант 3

gettysburg.rb, квадрант 4

Четвертая страница (в квадранте 2) не имеет прямого аналога среди демонстрационных программ, она ближе всего к программе chunkybacon.rb.

Весь код приведен в листинге 15.11, а результат показан на рис. 15.4. Пример довольно длинный, мы подробно обсудим его ниже.

Листинг 15.11. Создание демонстрационного документа

require 'rubygems'

require 'pdf/writer'

def quadrant(pdf, quad)

raise unless block_given?

mx = pdf.absolute_x_middle

my = pdf.absolute_y_middle

pdf.save_state

case quad

when :ul

pdf.translate_axis 0, my

when :ur

pdf.translate_axis mx, my

when :ll

nil # no translation needed

when :lr

pdf.translate_axis mx, 0

end

pdf.scale_axis(0.5, 0.5)

pdf.у = pdf.page_height

yield

pdf.restore_state

end

pdf = PDF::Writer.new

pdf.select_font("Times-Roman",

rencoding => "WinAnsiEncoding",

differences => { 0x01 => "lozenge" })

mx = pdf.absolute_x_middle

my = pdf.absolute_y_middle

pdf.line(0, my, pdf.page_width, my).stroke

pdf.line(mx, 0, mx, pdf.page_height).stroke

# Левый верхний: Demo (UL).

quadrant(pdf, :ul) do

x = pdf.absolute_right_margin

r1 = 25

40.step(1, -3) do |xw|

tone = 1.0 - (xw / 40.0) * 0.2

pdf.stroke_style(PDF::Writer::StrokeStyle.new(xw))

pdf.stroke_color(Color::RGB.from_fraction(1, tone, tone))

pdf.line(x, pdf.bottom_margin, x,

pdf.absolute_top_margin).stroke

x -= xw+2

end

40.step(1, -3) do |xw|

tone = 1.0 - (xw / 40.0) * 0.2

pdf.stroke_style(PDF::Writer::StrokeStyle.new(xw))

pdf.stroke_color(Color::RGB.from_fraction(1, tone, tone))

pdf.circle_at(pdf.left_margin + 10, pdf.margin_height - 15,

r1).stroke

r1 += xw

end

pdf.stroke_color(Color::RGB::Black)

x = pdf.absolute_left_margin

y = pdf.absolute_bottom_margin

w = pdf.margin_width

h = pdf.margin_height

pdf.rectangle(x, y, w, h).stroke

text = "The Ruby Way"

y = pdf.absolute_top_margin

50.step(5, -5) do |size|

height = pdf.font_height(size)

y -= height

pdf.add_text(pdf.left_margin + 10, y, text, size)

end

(0...360).step(20) do |angle|

pdf.fill_color(Color::RGB.from_fraction(rand, rand, rand))

pdf.add_text(300 + Math.cos(PDF::Math.deg2rad(angle)) * 40,

300 + Math.sin(PDF::Math.deg2rad(angle)) * 40,

text, 20, angle)

end

end

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Программирование на языке Ruby»

Представляем Вашему вниманию похожие книги на «Программирование на языке Ruby» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Программирование на языке Ruby»

Обсуждение, отзывы о книге «Программирование на языке Ruby» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x