#!/usr/bin/env ruby
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
# 
#  http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

$: << File.join(File.dirname(__FILE__), '..', 'lib')
require 'docs_generator'

generator = DocsGenerator.new

# Can be invoked without any args, or with a specific language/version
# such as "bin/generate en edge" which will build just that one, or
# with the --edge flag to build just en/edge.
if (ARGV[0] && (ARGV[0] == "--edge"))
  generator.run("en", "edge")
elsif (ARGV[0] && ARGV[1])
  generator.run(ARGV[0], ARGV[1])
else
  # build all languages and versions
  generator.run
end

puts " => #{generator.output_directory}"
