VDS-Badges: Unterschied zwischen den Versionen

Aus C3D2
Zur Navigation springen Zur Suche springen
(Initial release)
 
(Mit Chaosknoten)
Zeile 1: Zeile 1:
Generiert Schilder zum Umhängen auf der Demo gegen die Vorratsdatenspeicherung. Nutzung:
Generiert Schilder zum Umhängen auf der Demo gegen die Vorratsdatenspeicherung. Nutzung:
  ruby vds-badges.rb 23 > vds-badges.fo && fop -fo vds-badges.fo -pdf vds-badges.pdf
  ruby vds-badges.rb 23 > vds-badges.fo && fop -fo vds-badges.fo -pdf vds-badges.pdf
Dabei sollte ''chaosknoten.jpg'' im Verzeichnis liegen.


<source lang="ruby">
<source lang="ruby">
Zeile 76: Zeile 78:
   def make(text)
   def make(text)
     @fo.page_sequence('master-reference' => 'A4') {
     @fo.page_sequence('master-reference' => 'A4') {
      @fo.static_content('flow-name' => 'xsl-region-after') {
        @fo.block('text-align' => 'right',
                  'margin-right' => '1cm') {
          @fo.external_graphic('src' => 'url("chaosknoten.jpg")',
                              'content-width' => '4cm',
                              'content-height' => '3cm')
        }
      }
       @fo.flow('font-size' => '2.5cm',
       @fo.flow('font-size' => '2.5cm',
               'text-align' => 'center',
               'text-align' => 'center',
Zeile 96: Zeile 106:
         fo.region_body('margin' => '1cm 1cm 1cm 1cm',
         fo.region_body('margin' => '1cm 1cm 1cm 1cm',
                       'display-align' => 'center')
                       'display-align' => 'center')
        fo.region_after('extent' => '4cm',
                        'margin-bottom' => '1cm')
       }
       }
     }
     }

Version vom 4. November 2007, 22:26 Uhr

Generiert Schilder zum Umhängen auf der Demo gegen die Vorratsdatenspeicherung. Nutzung:

ruby vds-badges.rb 23 > vds-badges.fo && fop -fo vds-badges.fo -pdf vds-badges.pdf

Dabei sollte chaosknoten.jpg im Verzeichnis liegen.

#!/usr/bin/env ruby

require 'cgi'

NAMEN = ['Wolfgang Schäuble',
         'Rudolf Seiters',
         'Manfred Kanther',
         'Otto Schily',
         'Wolfgang Schäuble',
         'Heribert Rech',
         'Günther Beckstein',
         'Ehrhart Körting',
         'Jörg Schönbohm',
         'Willi Lemke',
         'Udo Nagel',
         'Volker Bouffier',
         'Lorenz Caffier',
         'Uwe Schünemann',
         'Ingo Wolf',
         'Karl Peter Bruch',
         'Klaus Meiser',
         'Albrecht Buttolo',
         'Holger Hövelmann',
         'Ralf Stegner',
         'Karl Heinz Gasser']
namen1 = NAMEN.collect { |n| n.split(' ')[0..-2].join(' ') }
namen2 = NAMEN.collect { |n| n.split(' ')[-1] }

class Array
  def any_one
    self[(rand * size)]
  end
end

class Symbol
  def u2m
    to_s.gsub('_', '-')
  end
end

class Builder
  def self.print
    puts '<?xml version="1.0" encoding="utf-8"?>'
    yield new($stdout)
    puts
  end

  def initialize(output)
    @o = output
  end

  def method_missing(fname, attrs={})
    @o << "<#{fname.u2m}"
    @o << attrs.collect { |k,v| " #{k}=\"#{CGI::escapeHTML(v)}\"" }.to_s
    if block_given?
      @o << '>'
      @o << yield.to_s
      @o << "</#{fname.u2m}>"
    else
      @o << '/>'
    end

    nil
  end
end

class BadgeMaker
  def initialize(fo)
    @fo = fo
  end

  def make(text)
    @fo.page_sequence('master-reference' => 'A4') {
      @fo.static_content('flow-name' => 'xsl-region-after') {
        @fo.block('text-align' => 'right',
                  'margin-right' => '1cm') {
          @fo.external_graphic('src' => 'url("chaosknoten.jpg")',
                               'content-width' => '4cm',
                               'content-height' => '3cm')
        }
      }
      @fo.flow('font-size' => '2.5cm',
               'text-align' => 'center',
               'flow-name' => 'xsl-region-body') {
        @fo.block { text }
      }
    }
  end
end

n = (ARGV.shift || 1).to_i

XMLNS_FO = 'http://www.w3.org/1999/XSL/Format'
Builder.print { |fo|
  fo.root('xmlns' => XMLNS_FO) {
    fo.layout_master_set {
      fo.simple_page_master('master-name' => 'A4',
                            'page-width' => '297mm',
                            'page-height' => '210mm') {
        fo.region_body('margin' => '1cm 1cm 1cm 1cm',
                       'display-align' => 'center')
        fo.region_after('extent' => '4cm',
                        'margin-bottom' => '1cm')
      }
    }

    n.times {
      name = namen1.any_one + ' ' + namen2.any_one
      datum = ((rand * 29).to_i + 1).to_s + '.' +
              ((rand * 12).to_i + 1).to_s + '.' +
              ((rand * 5).to_i + 2008).to_s
      text = case (rand * 5).to_i
             when 0
               "Hat am #{datum} #{name} angerufen"
             when 1
               "Hat am #{datum} eine E-Mail an #{name} geschrieben"
             when 2
               "Hat am #{datum} das Weblog von #{name} gelesen"
             when 3
               "Hat sich am #{datum} in der Nähe von #{name} aufgehalten"
             when 4
               "Hat am #{datum} eine Kurznachricht an #{name} gesendet"
             end
      BadgeMaker.new(fo).make(text)
    }
  }
}