blob: a508e8f3a5f9c59c706eb6d2188df8fd1682156a [file] [log] [blame] [edit]
#!/usr/bin/env tclsh
###############################################################################
# BRLTTY - A background process providing access to the console screen (when in
# text mode) for a blind person using a refreshable braille display.
#
# Copyright (C) 1995-2023 by The BRLTTY Developers.
#
# BRLTTY comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################
source [file join [file dirname [info script]] .. prologue.tcl]
source [file join $scriptDirectory csv.tcl]
set optionDefinitions {
{test flag "don't update the files"}
}
processProgramArguments optionValues $optionDefinitions
cd [file join $sourceRoot $documentsSubdirectory]
array set tableHeaders {
braille-driver {code name aliases others}
speech-driver {code name aliases}
screen-driver {code name}
text-table {name description}
contraction-table {name description}
attributes-table {name description}
keyboard-table {name description}
}
proc makeLists {file} {
set lists [dict create]
set pattern {^#(\w+-(?:driver|table))\s+([-\w]+)\s*#\s*(.*?)\s*$}
forEachLine line $file {
if {[regexp $pattern $line x directive operand comment]} {
dict lappend lists [string tolower $directive] [linsert [lmap column [split $comment ";"] {string trim $column}] 0 $operand]
}
}
return $lists
}
proc updateTable {lists name} {
global tableHeaders
if {[info exists tableHeaders($name)]} {
set headers $tableHeaders($name)
set rows [csvNormalizeRows [linsert [dict get $lists $name] 0 $headers] [llength $headers]]
if {[regexp {^(.*)-driver$} $name x driverType]} {
set usageColumn [list usage]
set driversDirectory [file join $::sourceRoot $::driversSubdirectory [string totitle $driverType]]
foreach columns [lrange $rows 1 end] {
set driverName [lindex $columns 1]
set makeFile [file join $driversDirectory $driverName Makefile.in]
if {[file exists $makeFile]} {
set driverUsage [getMakeFileProperty $makeFile DRIVER_USAGE]
} else {
set driverUsage ""
}
lappend usageColumn $driverUsage
}
set rows [lmap columns $rows usage $usageColumn {
linsert $columns end $usage
}]
}
if {[updateFile "$name.csv" [csvMakeTable $rows] $::optionValues(test)]} {
return 1
}
} else {
logWarning "table headers not defined: $name"
}
return 0
}
proc updateTables {lists} {
set updated 0
foreach name [dict keys $lists] {
if {[updateTable $lists $name]} {
set updated 1
}
}
return $updated
}
if {![updateTables [makeLists "brltty.conf.in"]]} {
logMessage task "no files updated"
}
exit 0