pango 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. data/ChangeLog +662 -0
  2. data/README +33 -0
  3. data/Rakefile +86 -0
  4. data/extconf.rb +68 -0
  5. data/sample/attribute.rb +82 -0
  6. data/sample/break.rb +26 -0
  7. data/sample/gdk_layout.rb +27 -0
  8. data/sample/glyphstring.rb +61 -0
  9. data/sample/item.rb +35 -0
  10. data/sample/label.rb +23 -0
  11. data/sample/layout.rb +102 -0
  12. data/sample/pango_cairo.rb +66 -0
  13. data/sample/parse.rb +33 -0
  14. data/sample/sample.txt +10 -0
  15. data/sample/script.rb +21 -0
  16. data/src/lib/pango.rb +60 -0
  17. data/src/makeinits.rb +48 -0
  18. data/src/rbpango.c +27 -0
  19. data/src/rbpango.h +97 -0
  20. data/src/rbpangoanalysis.c +197 -0
  21. data/src/rbpangoattribute.c +557 -0
  22. data/src/rbpangoattriterator.c +137 -0
  23. data/src/rbpangoattrlist.c +104 -0
  24. data/src/rbpangocairo.c +229 -0
  25. data/src/rbpangocolor.c +121 -0
  26. data/src/rbpangocontext.c +341 -0
  27. data/src/rbpangocoverage.c +104 -0
  28. data/src/rbpangoengine.c +65 -0
  29. data/src/rbpangofont.c +123 -0
  30. data/src/rbpangofontdescription.c +300 -0
  31. data/src/rbpangofontface.c +71 -0
  32. data/src/rbpangofontfamily.c +74 -0
  33. data/src/rbpangofontmap.c +104 -0
  34. data/src/rbpangofontmetrics.c +85 -0
  35. data/src/rbpangofontset.c +68 -0
  36. data/src/rbpangofontsetsimple.c +53 -0
  37. data/src/rbpangoglyphinfo.c +119 -0
  38. data/src/rbpangoglyphitem.c +129 -0
  39. data/src/rbpangoglyphstring.c +162 -0
  40. data/src/rbpangogravity.c +43 -0
  41. data/src/rbpangoinits.c +71 -0
  42. data/src/rbpangoitem.c +110 -0
  43. data/src/rbpangolanguage.c +88 -0
  44. data/src/rbpangolayout.c +593 -0
  45. data/src/rbpangolayoutiter.c +202 -0
  46. data/src/rbpangolayoutline.c +256 -0
  47. data/src/rbpangologattr.c +107 -0
  48. data/src/rbpangomain.c +213 -0
  49. data/src/rbpangomatrix.c +155 -0
  50. data/src/rbpangorectangle.c +178 -0
  51. data/src/rbpangorenderer.c +204 -0
  52. data/src/rbpangoscript.c +80 -0
  53. data/src/rbpangoscriptiter.c +91 -0
  54. data/src/rbpangotabarray.c +128 -0
  55. data/src/rbpangoversion.h +24 -0
  56. data/test/pango-test-utils.rb +9 -0
  57. data/test/run-test.rb +27 -0
  58. data/test/test-attribute.rb +19 -0
  59. data/test/test-language.rb +7 -0
  60. data/test/test_layout.rb +20 -0
  61. metadata +158 -0
data/README ADDED
@@ -0,0 +1,33 @@
1
+ Ruby/Pango
2
+ ==========
3
+ Ruby/Pango is a Ruby binding of pango-1.x.
4
+
5
+ Requirements
6
+ ------------
7
+ Ruby: http://www.ruby-lang.org/
8
+ GLib: http://www.gtk.org/
9
+ Pango: http://www.pango.org/
10
+ cairo/rcairo: http://cairographics.org/ (optional)
11
+ Ruby/GLib2: http://ruby-gnome2.sourceforge.net/
12
+
13
+ Install
14
+ -------
15
+ 0. install ruby-1.6.x or later, GLib, Pango, Ruby/GLib2, Ruby/GTK2
16
+ (and cairo/rcairo).
17
+ 1. ruby extconf.rb
18
+ (To use rcairo on Win32, set CAIRO_PATH as a environment variable first)
19
+ 2. make
20
+ 3. su
21
+ 4. make install
22
+
23
+ Copying
24
+ -------
25
+ Copyright (c) 2002-2005 Ruby-GNOME2 Project Team
26
+
27
+ This program is free software.
28
+ You can distribute/modify this program under the terms of
29
+ the GNU LESSER GENERAL PUBLIC LICENSE Version 2.1.
30
+
31
+ Project Website
32
+ ---------------
33
+ http://ruby-gnome2.sourceforge.jp/
data/Rakefile ADDED
@@ -0,0 +1,86 @@
1
+ require 'rake/clean'
2
+ CLEAN.include '**/*.o'
3
+ CLEAN.include "**/*.#{Config::MAKEFILE_CONFIG['DLEXT']}"
4
+ CLOBBER.include 'doc'
5
+ CLOBBER.include '**/*.log'
6
+ CLOBBER.include '**/Makefile'
7
+ CLOBBER.include '**/extconf.h'
8
+
9
+ # Determine the current version of the software
10
+ def ruby_pango_version
11
+ buf = File.read('src/rbpango.h')
12
+ if buf =~ /\s*RBPANGO_MAJOR_VERSION\s*(\d.+)/
13
+ major = $1
14
+ else
15
+ major = 0
16
+ end
17
+ if buf =~ /\s*RBPANGO_MINOR_VERSION\s*(\d.+)/
18
+ minor = $1
19
+ else
20
+ minor = 0
21
+ end
22
+ if buf =~ /\s*RBPANGO_MICRO_VERSION\s*(\d.+)/
23
+ micro = $1
24
+ else
25
+ micro = 0
26
+ end
27
+ "#{major}.#{minor}.#{micro}"
28
+ end
29
+
30
+ CURRENT_VERSION = ruby_pango_version
31
+
32
+ desc "Default Task (Test project)"
33
+ task :default => :test
34
+
35
+ # Make tasks -----------------------------------------------------
36
+ make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
37
+ MAKECMD = ENV['MAKE_CMD'] || make_program
38
+ MAKEOPTS = ENV['MAKE_OPTS'] || ''
39
+
40
+ PANGO_SO = "src/pango.#{Config::MAKEFILE_CONFIG['DLEXT']}"
41
+
42
+ file 'Makefile' => 'extconf.rb' do
43
+ sh "ruby extconf.rb #{ENV['EXTCONF_OPTS']}"
44
+ end
45
+
46
+ def make(target = '')
47
+ pid = system("#{MAKECMD} #{MAKEOPTS} #{target}")
48
+ $?.exitstatus
49
+ end
50
+
51
+ # Let make handle dependencies between c/o/so - we'll just run it.
52
+ file PANGO_SO => (['Makefile'] + Dir['src/*.c'] + Dir['src/*.h']) do
53
+ m = make
54
+ fail "Make failed (status #{m})" unless m == 0
55
+ end
56
+
57
+ desc "Configure Pango"
58
+ task :configure => ['Makefile']
59
+
60
+ desc "Compile the shared object"
61
+ task :compile => [PANGO_SO]
62
+
63
+ desc "Run pango tests"
64
+ task :test => :compile do
65
+ sh "ruby test/run-test.rb"
66
+ end
67
+
68
+ desc 'Generate gem specification'
69
+ task :gemspec do
70
+ require 'erb'
71
+ tspec = ERB.new(File.read(File.join(File.dirname(__FILE__),'src','pango.gemspec.erb')))
72
+ File.open(File.join(File.dirname(__FILE__),'pango.gemspec'),'wb') do|f|
73
+ f << tspec.result
74
+ end
75
+ end
76
+
77
+ desc 'Build gem'
78
+ task :package => :gemspec do
79
+ require 'rubygems/specification'
80
+ spec_source = File.read File.join(File.dirname(__FILE__),'pango.gemspec')
81
+ spec = nil
82
+ # see: http://gist.github.com/16215
83
+ Thread.new { spec = eval("$SAFE = 3\n#{spec_source}") }.join
84
+ spec.validate
85
+ Gem::Builder.new(spec).build
86
+ end
data/extconf.rb ADDED
@@ -0,0 +1,68 @@
1
+ =begin
2
+ extconf.rb for Ruby/Pango extention library
3
+ =end
4
+
5
+ PACKAGE_NAME = "pango"
6
+ PACKAGE_ID = "pango"
7
+
8
+ begin
9
+ require 'mkmf-gnome2'
10
+ USE_GLIB_GEM = true
11
+ TOPDIR = File.expand_path(File.dirname(__FILE__) )
12
+ SRCDIR = TOPDIR + '/src'
13
+ require 'glib2'
14
+
15
+ rescue LoadError => e
16
+
17
+ USE_GLIB_GEM = false
18
+
19
+ TOPDIR = File.expand_path(File.dirname(__FILE__) + '/..')
20
+ MKMF_GNOME2_DIR = TOPDIR + '/glib/src/lib'
21
+ SRCDIR = TOPDIR + '/pango/src'
22
+
23
+ $LOAD_PATH.unshift MKMF_GNOME2_DIR
24
+ $LOAD_PATH << "E:\\ruby\\lib\\ruby\\1.8\\i386-mswin32"
25
+
26
+ require 'mkmf-gnome2'
27
+
28
+ end
29
+
30
+ PKGConfig.have_package(PACKAGE_ID) or exit 1
31
+ setup_win32(PACKAGE_NAME)
32
+
33
+ pango_header = "pango/pango.h"
34
+ have_func("pango_layout_iter_get_type", pango_header)
35
+ have_func("pango_layout_set_ellipsize", pango_header)
36
+ have_func("pango_layout_get_font_description", pango_header)
37
+ have_func("pango_render_part_get_type", pango_header)
38
+ have_func("pango_attr_strikethrough_color_new", pango_header)
39
+ have_func("pango_attr_underline_color_new", pango_header)
40
+ have_func("pango_glyph_item_free", pango_header)
41
+ have_func("pango_glyph_item_get_type", pango_header)
42
+ have_func("pango_attr_iterator_get_attrs", pango_header)
43
+ have_func("pango_itemize_with_base_dir", pango_header)
44
+ have_func("pango_font_family_is_monospace", pango_header)
45
+
46
+ if PKGConfig.have_package('pangocairo')
47
+ check_cairo
48
+ end
49
+
50
+ if USE_GLIB_GEM
51
+
52
+ path = File.expand_path(ENV['GEM_HOME'] + "/gems/glib2-#{GLib::BINDING_VERSION.join('.')}/src")
53
+ add_depend_package("glib2", path, '/')
54
+ else
55
+ add_depend_package("glib2", "glib/src", TOPDIR)
56
+ end
57
+
58
+ add_distcleanfile("rbpangoinits.c")
59
+
60
+ make_version_header("PANGO", "pango")
61
+
62
+ create_pkg_config_file("Ruby/Pango", PACKAGE_ID)
63
+ create_makefile_at_srcdir(PACKAGE_NAME, SRCDIR, "-DRUBY_PANGO_COMPILATION") {
64
+ SRCDIR_QUOTED = SRCDIR.gsub(' ', '\ ')
65
+ system("#{$ruby} #{SRCDIR_QUOTED}/makeinits.rb #{SRCDIR_QUOTED}/*.c > rbpangoinits.c")
66
+ }
67
+ create_top_makefile
68
+
@@ -0,0 +1,82 @@
1
+ =begin
2
+ attribute.rb - Ruby/Pango sample script.
3
+
4
+ Copyright (c) 2002,2003 Ruby-GNOME2 Project Team
5
+ This program is licenced under the same licence as Ruby-GNOME2.
6
+
7
+ $Id: attribute.rb,v 1.6 2006/06/17 13:37:01 mutoh Exp $
8
+ =end
9
+
10
+ require 'pango'
11
+
12
+ p a = Pango::AttrSize.new(1)
13
+ puts "value = #{a.value}"
14
+ puts "start_index = #{a.start_index}"
15
+ puts "end_index = #{a.end_index}"
16
+
17
+ p a = Pango::AttrStyle.new(Pango::FontDescription::STYLE_NORMAL)
18
+ puts "value = #{a.value}"
19
+
20
+ p a = Pango::AttrVariant.new(Pango::FontDescription::VARIANT_SMALL_CAPS)
21
+ puts "value = #{a.value}"
22
+
23
+ p a = Pango::AttrStretch.new(Pango::FontDescription::STRETCH_EXPANDED)
24
+ puts "value = #{a.value}"
25
+
26
+ p a = Pango::AttrWeight.new(Pango::FontDescription::WEIGHT_BOLD)
27
+ puts "value = #{a.value}"
28
+
29
+ p a = Pango::AttrRise.new(10)
30
+ puts "value = #{a.value}"
31
+
32
+ p a = Pango::AttrLanguage.new(Pango::Language.new("ja"))
33
+ p a.value
34
+ p a.value.to_str
35
+
36
+ p a = Pango::AttrFamily.new("family")
37
+ p a.value
38
+
39
+ p b = Pango::FontDescription.new
40
+ p b.to_str
41
+ p a = Pango::AttrFontDescription.new(b)
42
+ p a.value
43
+ p a.value.to_str
44
+
45
+ p a = Pango::AttrForeground.new(10, 20, 30)
46
+ p a.value
47
+ p a.value.to_a
48
+
49
+ p a = Pango::AttrBackground.new(20, 30, 40)
50
+ p a.value
51
+ p a.value.to_a
52
+
53
+ p a = Pango::AttrStrikethrough.new(true)
54
+ p a.value
55
+
56
+ p Pango::AttrUnderline::SINGLE
57
+ p a = Pango::AttrUnderline.new(Pango::AttrUnderline::SINGLE)
58
+ p a.value
59
+
60
+ p ink = Pango::Rectangle.new(1, 2, 3, 4)
61
+ p log = Pango::Rectangle.new(5, 6, 7, 8)
62
+ p a = Pango::AttrShape.new(ink, log)
63
+ p a.value[0].to_a
64
+ p a.value[1].to_a
65
+
66
+ p a = Pango::AttrScale.new(2.3)
67
+ p a.value
68
+
69
+ begin
70
+ require 'gtk2'
71
+ rescue
72
+ p "Ruby/GTK2 is not existed."
73
+ exit 0
74
+ end
75
+ p a = Gdk::PangoAttrEmbossed.new(true)
76
+ p a.value
77
+
78
+ mask = Gdk::Pixmap.new(Gtk::Window.new.realize.window, 100, 100, 1)
79
+ p a = Gdk::PangoAttrStipple.new(mask)
80
+ p a.value
81
+
82
+
data/sample/break.rb ADDED
@@ -0,0 +1,26 @@
1
+ =begin
2
+ break.rb - Ruby/Pango sample script.
3
+
4
+ Copyright (c) 2005 Ruby-GNOME2 Project
5
+ This program is licenced under the same licence as Ruby-GNOME2.
6
+
7
+ $Id: break.rb,v 1.1 2005/09/17 17:09:12 mutoh Exp $
8
+ =end
9
+
10
+ require 'pango'
11
+
12
+ attr = Pango.break("Hello Worldです\n2nd line", Pango::Analysis.new)
13
+
14
+ p attr.length
15
+ attr.each do |v|
16
+ print "line_break:#{v.line_break?}"
17
+ print ", mandatory_break:#{v.mandatory_break?}"
18
+ print ", char_break:#{v.char_break?}"
19
+ print ", white:#{v.white?}"
20
+ print ", cursor_position:#{v.cursor_position?}"
21
+ print ", word_start:#{v.word_start?}"
22
+ print ", word_end:#{v.word_end?}"
23
+ print ", sentence_boundary:#{v.sentence_boundary?}"
24
+ print ", sentence_start:#{v.sentence_start?}"
25
+ print ", sentence_end:#{v.sentence_end?}\n"
26
+ end
@@ -0,0 +1,27 @@
1
+ =begin
2
+ gdk_layout.rb - Ruby/Pango sample script.
3
+
4
+ Copyright (c) 2003-2006 Ruby-GNOME2 Project
5
+ This program is licenced under the same licence as Ruby-GNOME2.
6
+
7
+ $Id: gdk_layout.rb,v 1.7 2006/06/17 13:36:11 mutoh Exp $
8
+ =end
9
+
10
+ require 'gtk2'
11
+
12
+ window = Gtk::Window.new("Ruby/Pango sample")
13
+ window.signal_connect("destroy"){Gtk.main_quit}
14
+ window.realize
15
+
16
+ gdkwin = window.window
17
+ gc = Gdk::GC.new(gdkwin)
18
+
19
+ layout = window.create_pango_layout
20
+ layout.set_markup(File.readlines("sample.txt").to_s, "$")
21
+ window.signal_connect("expose_event") do
22
+ gdkwin.draw_layout(gc, 10, 10, layout)
23
+ end
24
+
25
+ window.set_default_size(500,400).show_all
26
+
27
+ Gtk.main
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env ruby
2
+ =begin
3
+ glyphstring.rb - Ruby/Pango sample script.
4
+
5
+ Copyright (c) 2002-2006 Ruby-GNOME2 Project Team
6
+ This program is licenced under the same licence as Ruby-GNOME2.
7
+
8
+ $Id: glyphstring.rb,v 1.3 2006/06/17 14:16:53 ktou Exp $
9
+ =end
10
+
11
+ require 'gtk2'
12
+
13
+ str = "Hello World"
14
+
15
+ lang = Pango::Language.new("ja_JP")
16
+ fd = Pango::FontDescription.new("Sans 18")
17
+
18
+ context = Gdk::Pango.context
19
+ context.language = lang
20
+ context.base_dir = Pango::DIRECTION_LTR
21
+ context.font_description = fd
22
+
23
+ p font = context.load_font(fd)
24
+ family = context.families[10]
25
+ puts "#{family.class}, #{family.name}"
26
+
27
+ family.faces.each do |face|
28
+ puts face.name
29
+ end
30
+
31
+ p fmap = font.font_map
32
+
33
+ p fset = fmap.load_fontset(context, fd, lang)
34
+
35
+
36
+ gs = Pango::GlyphString.new
37
+
38
+ ink_rect, logical_rect = gs.extents(font)
39
+
40
+ p ink_rect.to_a
41
+ p logical_rect.to_a
42
+
43
+ item = Pango::Item.new
44
+ item.analysis.font = font
45
+ item.analysis.shape_engine = font.find_shaper(lang, str[0])
46
+
47
+ gs = Pango.shape(str, item.analysis)
48
+
49
+ ink_rect, logical_rect = gs.extents(font, 0, 11)
50
+
51
+ p ink_rect.to_a
52
+ p logical_rect.to_a
53
+
54
+ gs.glyphs.each do |info, log_clusters|
55
+ puts "Pango::GlyphInfo: log_clusters = #{log_clusters}, glyph = #{info.glyph}, geometry = #{info.geometry.inspect}, cluster_start? = #{info.cluster_start?}"
56
+ end
57
+
58
+ p gs.index_to_x(str, item.analysis, 3, false)
59
+ p gs.x_to_index(str, item.analysis, 103)
60
+
61
+ p logical_widths = gs.get_logical_widths(str, item.analysis.level)
data/sample/item.rb ADDED
@@ -0,0 +1,35 @@
1
+ =begin
2
+ item.rb - Ruby/Pango sample script.
3
+
4
+ Copyright (c) 2005 Ruby-GNOME2 Project
5
+ This program is licenced under the same licence as Ruby-GNOME2.
6
+
7
+ $Id: item.rb,v 1.3 2006/06/17 13:37:01 mutoh Exp $
8
+ =end
9
+
10
+ require 'gtk2'
11
+
12
+ str = "Ruby-GNOME2こんにちわ"
13
+ win = Gtk::Window.new("Ruby/Pango sample")
14
+ win.realize
15
+
16
+ p screen = Gdk::Screen.default
17
+ p context = Gdk::Pango.context(screen)
18
+ p attrlist = Pango::AttrList.new
19
+
20
+ p a = Pango::AttrBackground.new(65535, 0, 0)
21
+
22
+ attrlist.insert(Pango::AttrBackground.new(65535, 0,0))
23
+
24
+ attrs = [Pango::AttrBackground.new(65535, 0,0), Pango::AttrForeground.new(65535, 0,0)]
25
+
26
+ items = context.itemize(Pango::Context::DIRECTION_RTL, str, 0, 40, attrlist)
27
+
28
+ items.each do |v|
29
+ ana = v.analysis
30
+ puts "shape_engine = #{ana.shape_engine}, lang_engine = #{ana.lang_engine}, font = #{ana.font}, level = #{ana.level}"
31
+ puts "language = #{ana.language}"
32
+ p ana.font.get_glyph_extents("a"[0])[0].to_a
33
+ ana.set_extra_attrs(attrs)
34
+ p ana.extra_attrs
35
+ end
data/sample/label.rb ADDED
@@ -0,0 +1,23 @@
1
+ =begin
2
+ label.rb - Ruby/Pango sample script.
3
+
4
+ Copyright (c) 2002,2003 Ruby-GNOME2 Project Team
5
+ This program is licenced under the same licence as Ruby-GNOME2.
6
+
7
+ $Id: label.rb,v 1.4 2006/06/17 13:36:11 mutoh Exp $
8
+ =end
9
+
10
+ require 'gtk2'
11
+
12
+ str = File.readlines("sample.txt").to_s
13
+ attrs, text, accel_char = Pango.parse_markup(str, '$')
14
+
15
+ #This is same as Gtk::Label#set_markup()
16
+ label = Gtk::Label.new(text)
17
+ label.attributes = attrs
18
+
19
+ win = Gtk::Window.new
20
+ win.signal_connect("destroy"){Gtk.main_quit}
21
+ win.add(label).show_all
22
+
23
+ Gtk.main