ライブラリ
- ビルトイン (22)
-
cgi
/ util (1) - csv (40)
- fileutils (1)
-
io
/ wait (2) - json (1)
- mkmf (1)
-
net
/ http (1) - openssl (6)
- pathname (5)
-
rexml
/ document (2) - ripper (2)
-
rubygems
/ specification (7) -
rubygems
/ uninstaller (1) - shell (5)
-
shell
/ command-processor (5) -
shell
/ filter (5) - un (1)
-
webrick
/ httpserver (6) -
webrick
/ httpservlet / filehandler (1) -
webrick
/ httpstatus (2) - zlib (1)
クラス
- CGI (1)
- CSV (6)
-
CSV
:: Row (3) -
CSV
:: Table (30) - Class (1)
- Encoding (2)
- File (5)
-
File
:: Stat (5) -
Gem
:: Specification (7) -
Gem
:: Uninstaller (1) - IO (3)
-
OpenSSL
:: ASN1 :: PrintableString (2) - Pathname (5)
-
REXML
:: DocType (1) -
REXML
:: Element (1) - Ripper (2)
-
RubyVM
:: InstructionSequence (3) - Shell (5)
-
Shell
:: CommandProcessor (5) -
Shell
:: Filter (5) -
WEBrick
:: HTTPServer :: MountTable (5) -
WEBrick
:: HTTPServlet :: FileHandler (1)
モジュール
- FileTest (5)
- FileUtils (1)
- Kernel (2)
-
OpenSSL
:: ASN1 (3) -
WEBrick
:: HTTPStatus (1) - Zlib (1)
キーワード
- << (1)
- == (1)
-
BIG5
_ UAO (1) -
Big5
_ UAO (1) -
DEFAULT
_ ENTITIES (1) - HTTPNotAcceptable (1)
- HandlerTable (1)
-
Init
_ var _ tables (1) - MountTable (1)
-
NEWS for Ruby 2
. 2 . 0 (1) - NotAcceptable (1)
-
OPT
_ TABLE (1) -
PARSER
_ EVENT _ TABLE (1) - PRINTABLESTRING (1)
- PrintableString (3)
-
RC
_ NOT _ ACCEPTABLE (1) -
SCANNER
_ EVENT _ TABLE (1) -
TABLE
_ FOR _ ESCAPE _ HTML _ _ (1) - Table (1)
- WaitWritable (1)
- [] (4)
- []= (2)
-
add
_ bindir (1) -
autoload
_ i (1) -
by
_ col (1) -
by
_ col! (1) -
by
_ col _ or _ row (1) -
by
_ col _ or _ row! (1) -
by
_ row (1) -
by
_ row! (1) -
clone
_ method (1) -
crc
_ table (1) -
default
_ executable (1) -
default
_ executable= (1) - delete (2)
-
delete
_ if (2) - disasm (1)
- disassemble (1)
- each (2)
- empty? (1)
- executable (1)
- executable= (1)
- executable? (7)
-
executable
_ real? (7) - executables (1)
- executables= (1)
- fields (1)
-
find
_ executable (1) - gettable (1)
-
givar
_ i (1) - headers (1)
- inspect (1)
-
json
_ creatable? (1) - length (1)
- mode (1)
- new (7)
- push (1)
-
rb
_ generic _ ivar _ table (1) -
rb
_ mark _ hash (1) -
rb
_ mark _ tbl (1) -
rb
_ reserved _ word (1) -
rb
_ thread _ fd _ writable (1) -
rdoc
/ markdown (1) - read (2)
- readlines (2)
- rehash (1)
-
remove
_ executables (1) -
ruby 1
. 8 . 4 feature (1) - scan (1)
- size (1)
-
st
_ add _ direct (1) -
st
_ cleanup _ safe (1) -
st
_ copy (1) -
st
_ delete (1) -
st
_ delete _ safe (1) -
st
_ foreach (1) -
st
_ free _ table (1) -
st
_ init _ numtable (1) -
st
_ init _ numtable _ with _ size (1) -
st
_ init _ strtable (1) -
st
_ init _ strtable _ with _ size (1) -
st
_ init _ table (1) -
st
_ init _ table _ with _ size (1) -
st
_ insert (1) -
st
_ lookup (1) -
sv
_ i (1) -
to
_ a (2) -
to
_ csv (1) -
to
_ s (1) -
values
_ at (2) -
wait
_ writable (3) -
world
_ writable? (7) - writable? (7)
-
writable
_ real? (7) -
write
_ nonblock (1)
検索結果
先頭5件
-
CSV
:: Table # empty? -> bool (9073.0) -
ヘッダーを除いて、データがないときに true を返します。
ヘッダーを除いて、データがないときに true を返します。
Array#empty? に委譲しています。
//emlist[][ruby]{
require 'csv'
csv = CSV.new("a,b\n", headers: true)
table = csv.read
p table.empty? # => true
table << [1, 2]
p table.empty? # => false
//}
@see Array#empty? -
CSV
:: Table # headers -> Array (9055.0) -
自身のヘッダ行を返します。
自身のヘッダ行を返します。
テーブルが空である場合は空の配列を返します。
//emlist[例][ruby]{
require "csv"
row = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"])
table = CSV::Table.new([row])
table.headers # => ["header1", "header2"]
//} -
CSV
:: Table # inspect -> String (9055.0) -
モードとサイズを US-ASCII な文字列で返します。
モードとサイズを US-ASCII な文字列で返します。
//emlist[][ruby]{
require 'csv'
csv = CSV.new("a,b,c\n1,2,3", headers: true)
table = csv.read
p table.inspect # => "#<CSV::Table mode:col_or_row row_count:2>"
//} -
CSV
:: Table # to _ a -> [Array] (9055.0) -
配列の配列を返します。
配列の配列を返します。
一番目の要素はヘッダで、残りの要素はデータを表わします。
//emlist[例][ruby]{
require "csv"
row1 = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"])
row2 = CSV::Row.new(["header1", "header2"], ["row2_1", "row2_2"])
table = CSV::Table.new([row1, row2])
table.to_a # => [["header1", "header2"], ["row1_1", "... -
CSV
:: Table # to _ csv(options = Hash . new) -> String (9055.0) -
CSV の文字列に変換して返します。
CSV の文字列に変換して返します。
ヘッダを一行目に出力します。その後に残りのデータを出力します。
デフォルトでは、ヘッダを出力します。オプションに :write_headers =>
false を指定するとヘッダを出力しません。
//emlist[][ruby]{
require 'csv'
csv = CSV.new("a,b,c\n1,2,3", headers: true)
table = csv.read
p table.to_csv # => "a,b,c\n1,2,3\n"
p table.to_csv(write_head... -
CSV
:: Table # to _ s(options = Hash . new) -> String (9055.0) -
CSV の文字列に変換して返します。
CSV の文字列に変換して返します。
ヘッダを一行目に出力します。その後に残りのデータを出力します。
デフォルトでは、ヘッダを出力します。オプションに :write_headers =>
false を指定するとヘッダを出力しません。
//emlist[][ruby]{
require 'csv'
csv = CSV.new("a,b,c\n1,2,3", headers: true)
table = csv.read
p table.to_csv # => "a,b,c\n1,2,3\n"
p table.to_csv(write_head... -
CSV
:: Table # length -> Integer (9037.0) -
(ヘッダを除く)行数を返します。
(ヘッダを除く)行数を返します。
Array#length, Array#size に委譲しています。
//emlist[][ruby]{
require 'csv'
csv = CSV.new("a,b,c\n1,2,3", headers: true)
table = csv.read
p table.size # => 1
//}
@see Array#length, Array#size -
CSV
:: Table # size -> Integer (9037.0) -
(ヘッダを除く)行数を返します。
(ヘッダを除く)行数を返します。
Array#length, Array#size に委譲しています。
//emlist[][ruby]{
require 'csv'
csv = CSV.new("a,b,c\n1,2,3", headers: true)
table = csv.read
p table.size # => 1
//}
@see Array#length, Array#size -
WEBrick
:: HTTPServer :: MountTable # [](dir) -> WEBrick :: HTTPServlet :: AbstractServlet (9001.0) -
与えられたディレクトリに対応するサーブレットを返します。
与えられたディレクトリに対応するサーブレットを返します。
@param dir ディレクトリを指定します。
@return WEBrick::HTTPServlet::AbstractServlet のサブクラスのインタンスを返します。 -
WEBrick
:: HTTPServer :: MountTable # []=(dir , val) (9001.0) -
与えられたディレクトリに対応するサーブレットを登録します。
与えられたディレクトリに対応するサーブレットを登録します。
@param dir ディレクトリを指定します。
@param val サーブレットを指定します。 -
WEBrick
:: HTTPServer :: MountTable # delete(dir) -> WEBrick :: HTTPServlet :: AbstractServlet (9001.0) -
ディレクトリとサーブレットの対応を削除してサーブレットを返します。
ディレクトリとサーブレットの対応を削除してサーブレットを返します。
@param dir ディレクトリを指定します。
@return WEBrick::HTTPServlet::AbstractServlet のサブクラスのインタンスを返します。 -
WEBrick
:: HTTPServer :: MountTable # scan(path) -> Array (9001.0) -
与えられたパスをスクリプトの名前と PATH_INFO に分割します。
与えられたパスをスクリプトの名前と PATH_INFO に分割します。
@param path パスを指定します。 -
st
_ table * st _ copy(st _ table *old _ table) (997.0) -
Hash#dup の実体。 old_table と同じ内容の st_table を新たに作成して返す。
Hash#dup の実体。
old_table と同じ内容の st_table を新たに作成して返す。 -
int st
_ delete(register st _ table *table , register char **key , char **value) (601.0) -
*key に対応する値をテーブルから削除し、*key、*value に登録時のキーと 値を書きこむ。返り値は削除したかどうか。
*key に対応する値をテーブルから削除し、*key、*value に登録時のキーと
値を書きこむ。返り値は削除したかどうか。 -
int st
_ delete _ safe(register st _ table *table , register char **key , char **value , char *never) (601.0) -
st_delete と似ているが、その場ですぐに削除するのではなく never を 書きこんでおく。st_cleanup_safe() で本当に削除できる。 Ruby では never には Qundef を使う。
st_delete と似ているが、その場ですぐに削除するのではなく never を
書きこんでおく。st_cleanup_safe() で本当に削除できる。
Ruby では never には Qundef を使う。 -
int st
_ insert(register st _ table *table , register char *key , char *value) (601.0) -
ハッシュに key と value の組を追加する。 古いライブラリなので void* のかわりに char* を使っている。
ハッシュに key と value の組を追加する。
古いライブラリなので void* のかわりに char* を使っている。 -
int st
_ lookup(st _ table *table , register char *key , char **value) (601.0) -
key に対応する値をみつけて value にポインタを書きこむ。 返り値は見つかったかどうかの真偽値。
key に対応する値をみつけて value にポインタを書きこむ。
返り値は見つかったかどうかの真偽値。
任意の型ポインタにvoid*でなくchar*を使っているのは
古いライブラリだからだ。ANSI C以前はvoid*の意味に
char*を使っていた。 -
static void rehash(register st
_ table *table) (601.0) -
テーブルの全要素に対しハッシュ値を計算しなおして テーブルを再構成する。エントリに対して要素の数が 増えすぎ、テーブルが狭くなってきたときに発生する。
テーブルの全要素に対しハッシュ値を計算しなおして
テーブルを再構成する。エントリに対して要素の数が
増えすぎ、テーブルが狭くなってきたときに発生する。 -
void st
_ add _ direct(st _ table *table , char *key , char *value) (601.0) -
st_insert() と似ているが、同じハッシュ値を持つエントリーに対する 「同値検査」を省略する。key がまだ登録されていないことがはっきり している場合には、少し高速に登録できる。
st_insert() と似ているが、同じハッシュ値を持つエントリーに対する
「同値検査」を省略する。key がまだ登録されていないことがはっきり
している場合には、少し高速に登録できる。 -
void st
_ cleanup _ safe(st _ table *table , char *never) (601.0) -
never と同じ値を持つエントリーを削除する。
never と同じ値を持つエントリーを削除する。 -
void st
_ foreach(st _ table *table , enum st _ retval (*func)() , char *arg) (601.0) -
Hash#each, delete_if などの実体。ハッシュ内の全てのキーと値、arg を 引数にして、func を実行する。func の返り値 enum st_retval は ST_CONTINUE ST_STOP ST_DELETE のどれか。どれも見ためどおりの働きをする。
Hash#each, delete_if などの実体。ハッシュ内の全てのキーと値、arg を
引数にして、func を実行する。func の返り値 enum st_retval は ST_CONTINUE
ST_STOP ST_DELETE のどれか。どれも見ためどおりの働きをする。 -
CSV
. read(path , options = Hash . new) -> [Array] | CSV :: Table (445.0) -
CSV ファイルを配列の配列にするために使います。 headers オプションに偽でない値を指定した場合は CSV::Table オブジェクトを返します。
CSV ファイルを配列の配列にするために使います。
headers オプションに偽でない値を指定した場合は CSV::Table オブジェクトを返します。
@param path CSV ファイルのパスを指定します。
@param options CSV.new のオプションと同じオプションを指定できます。
:encoding というキーを使用すると入力のエンコーディングを指定することができます。
入力のエンコーディングか Encoding.default_external と異なる場合は
必ず指定... -
CSV
. readlines(path , options = Hash . new) -> [Array] | CSV :: Table (445.0) -
CSV ファイルを配列の配列にするために使います。 headers オプションに偽でない値を指定した場合は CSV::Table オブジェクトを返します。
CSV ファイルを配列の配列にするために使います。
headers オプションに偽でない値を指定した場合は CSV::Table オブジェクトを返します。
@param path CSV ファイルのパスを指定します。
@param options CSV.new のオプションと同じオプションを指定できます。
:encoding というキーを使用すると入力のエンコーディングを指定することができます。
入力のエンコーディングか Encoding.default_external と異なる場合は
必ず指定... -
CSV
# read -> [Array] | CSV :: Table (373.0) -
残りの行を読み込んで配列の配列を返します。 self の生成時に headers オプションに偽でない値が指定されていた場合は CSV::Table オブジェクトを返します。
残りの行を読み込んで配列の配列を返します。
self の生成時に headers オプションに偽でない値が指定されていた場合は CSV::Table オブジェクトを返します。
データソースは読み込み用にオープンされている必要があります。
//emlist[例 headers: false][ruby]{
require "csv"
csv = CSV.new(DATA.read)
csv.read
# => [["header1", "header2"], ["row1_1", "row1_2"], ["row2_1", "row2_2"]]
__END__
header1,head... -
CSV
# readlines -> [Array] | CSV :: Table (373.0) -
残りの行を読み込んで配列の配列を返します。 self の生成時に headers オプションに偽でない値が指定されていた場合は CSV::Table オブジェクトを返します。
残りの行を読み込んで配列の配列を返します。
self の生成時に headers オプションに偽でない値が指定されていた場合は CSV::Table オブジェクトを返します。
データソースは読み込み用にオープンされている必要があります。
//emlist[例 headers: false][ruby]{
require "csv"
csv = CSV.new(DATA.read)
csv.read
# => [["header1", "header2"], ["row1_1", "row1_2"], ["row2_1", "row2_2"]]
__END__
header1,head... -
Gem
:: Specification # add _ bindir(executables) -> Array | nil (301.0) -
実行コマンドの格納場所を返します。
実行コマンドの格納場所を返します。
@param executables 実行コマンド名を格納した配列を指定します。 -
IO
# write _ nonblock(string , exception: true) -> Integer | :wait _ writable (301.0) -
IO をノンブロッキングモードに設定し、string を write(2) システムコールで書き出します。
IO をノンブロッキングモードに設定し、string を write(2) システムコールで書き出します。
write(2) が成功した場合、書き込んだ長さを返します。
EAGAIN, EINTR などは例外 Errno::EXXX として呼出元に報告されます。
書き込んだバイト数(つまり返り値)は String#bytesize の
値より小さい可能性があります。
発生した例外 がErrno::EAGAIN、 Errno::EWOULDBLOCK である場合は、
その例外オブジェクトに IO::WaitWritable が Object#extend
されます。よって IO::Wai... -
static int autoload
_ i(ID key , const char *name , st _ table *tbl) (301.0) -
-
static int clone
_ method(ID mid , NODE *body , st _ table *tbl) (301.0) -
m_tbl 格納形式のメソッド (構文木) をコピーして返します。 ST_CONTINUE を返します。
m_tbl 格納形式のメソッド (構文木) をコピーして返します。
ST_CONTINUE を返します。 -
static int givar
_ i(VALUE obj , st _ table *tbl) (301.0) -
-
static int sv
_ i(ID key , VALUE value , st _ table *tbl) (301.0) -
-
static struct kwtable * rb
_ reserved _ word(const char *str , unsigned int len) (301.0) -
長さ len の文字列 str が予約語であれば そのフラグテーブルを返します。str が予約語でなければ NULL を返します。
長さ len の文字列 str が予約語であれば
そのフラグテーブルを返します。str が予約語でなければ
NULL を返します。
struct kwtable {
char *name; /* 予約語の名前 */
int id[2]; /* 0: 非修飾型シンボル
1: 修飾型シンボル (kIF_MOD など) があれば
それを格納する。なければ id[0]... -
void rb
_ mark _ hash(st _ table *tbl) (301.0) -
-
void rb
_ mark _ tbl(st _ table *tbl) (301.0) -
-
CSV
:: Row . new(headers , fields , header _ row = false) -> CSV :: Row (109.0) -
自身を初期化します。
自身を初期化します。
一方の配列が他方の配列よりも短い場合、不足しているところは nil になります。
@param headers ヘッダの配列を指定します。
@param fields フィールドの配列を指定します。
@param header_row ヘッダ行である場合は真を指定します。そうでない場合は偽を指定します。
デフォルトは偽です。
//emlist[例 header_row = true のケース][ruby]{
require "csv"
header = CSV::Row.new(["header1", "header2"]... -
REXML
:: DocType :: DEFAULT _ ENTITIES -> { String => REXML :: Entity } (49.0) -
XML の仕様上デフォルトで定義されている実体の Hash table。
XML の仕様上デフォルトで定義されている実体の Hash table。
"amp" => REXML::EntityConst::AMP は含まれません。 -
CSV
:: Row # fields(*headers _ and _ or _ indices) -> Array (37.0) -
与えられた引数に対応する値の配列を返します。
与えられた引数に対応する値の配列を返します。
要素の探索に CSV::Row#field を使用しています。
@param headers_and_or_indices ヘッダの名前かインデックスか Range
のインスタンスか第 1 要素がヘッダの名前で
第 2 要素がオフセットになっている 2 要素
の配列をいくつでも指定します。混在するこ
とがで... -
CSV
:: Row # values _ at(*headers _ and _ or _ indices) -> Array (37.0) -
与えられた引数に対応する値の配列を返します。
与えられた引数に対応する値の配列を返します。
要素の探索に CSV::Row#field を使用しています。
@param headers_and_or_indices ヘッダの名前かインデックスか Range
のインスタンスか第 1 要素がヘッダの名前で
第 2 要素がオフセットになっている 2 要素
の配列をいくつでも指定します。混在するこ
とがで... -
RubyVM
:: InstructionSequence . disasm(body) -> String (37.0) -
引数 body で指定したオブジェクトから作成した RubyVM::InstructionSequence オブジェクトを人間が読める形式の文字 列に変換して返します。
引数 body で指定したオブジェクトから作成した
RubyVM::InstructionSequence オブジェクトを人間が読める形式の文字
列に変換して返します。
@param body Proc、Method オブジェクトを指定します。
例1:Proc オブジェクトを指定した場合
# /tmp/proc.rb
p = proc { num = 1 + 2 }
puts RubyVM::InstructionSequence.disasm(p)
出力:
== disasm: <RubyVM::InstructionSequence:block in <main... -
RubyVM
:: InstructionSequence . disassemble(body) -> String (37.0) -
引数 body で指定したオブジェクトから作成した RubyVM::InstructionSequence オブジェクトを人間が読める形式の文字 列に変換して返します。
引数 body で指定したオブジェクトから作成した
RubyVM::InstructionSequence オブジェクトを人間が読める形式の文字
列に変換して返します。
@param body Proc、Method オブジェクトを指定します。
例1:Proc オブジェクトを指定した場合
# /tmp/proc.rb
p = proc { num = 1 + 2 }
puts RubyVM::InstructionSequence.disasm(p)
出力:
== disasm: <RubyVM::InstructionSequence:block in <main... -
rdoc
/ markdown (37.0) -
Markdown 形式で記述されたドキュメントを rdoc 上で解析するための サブライブラリです。
Markdown 形式で記述されたドキュメントを rdoc 上で解析するための
サブライブラリです。
詳しくは以下を参照してください。
* https://daringfireball.net/projects/markdown/syntax
Markdown 形式をデフォルトのフォーマットにする場合は、
lib:rdoc#saved_options を参考に プロジェクトのデフォルトを
.rdoc_options ファイルで設定してください。
=== 拡張
以降の Markdown の拡張は RDoc のパーサ独自にサポートされているも
のです。ただし、全てがデフォルトで有効にな... -
ruby 1
. 8 . 4 feature (37.0) -
ruby 1.8.4 feature ruby 1.8.4 での ruby 1.8.3 からの変更点です。
ruby 1.8.4 feature
ruby 1.8.4 での ruby 1.8.3 からの変更点です。
掲載方針
*バグ修正の影響も含めて動作が変わるものを収録する。
*単にバグを直しただけのものは収録しない。
*ライブラリへの単なる定数の追加は収録しない。
以下は各変更点に付けるべきタグです。
記号について(特に重要なものは大文字(主観))
# * カテゴリ
# * [ruby]: ruby インタプリタの変更
# * [api]: 拡張ライブラリ API
# * [lib]: ライブラリ
* レベル
* [bug]: バグ修正
* [new]: 追加され... -
CSV
. new(data , options = Hash . new) -> CSV (19.0) -
このメソッドは CSV ファイルを読み込んだり、書き出したりするために String か IO のインスタンスをラップします。
このメソッドは CSV ファイルを読み込んだり、書き出したりするために
String か IO のインスタンスをラップします。
ラップされた文字列の先頭から読み込むことになります。
文字列に追記したい場合は CSV.generate を使用してください。
他の位置から処理したい場合はあらかじめそのように設定した StringIO を渡してください。
@param data String か IO のインスタンスを指定します。
String のインスタンスを指定した場合、CSV#string を使用して
後からデータを取り出すことが出来ます。... -
Encoding
:: BIG5 _ UAO -> Encoding (19.0) -
Big5_UAO エンコーディングです。
Big5_UAO エンコーディングです。
Big5 の亜種(非公式的拡張)です。
Unicodeとの対応表が
http://moztw.org/docs/big5/table/big5_2003-b2u.txt
にあります。 -
Encoding
:: Big5 _ UAO -> Encoding (19.0) -
Big5_UAO エンコーディングです。
Big5_UAO エンコーディングです。
Big5 の亜種(非公式的拡張)です。
Unicodeとの対応表が
http://moztw.org/docs/big5/table/big5_2003-b2u.txt
にあります。 -
NEWS for Ruby 2
. 2 . 0 (19.0) -
NEWS for Ruby 2.2.0 このドキュメントは前回リリース以降のバグ修正を除くユーザーに影響のある機能の変更のリストです。
...NEWS for Ruby 2.2.0
このドキュメントは前回リリース以降のバグ修正を除くユーザーに影響のある機能の変更のリストです。
それぞれのエントリーは参照情報があるため短いです。
十分な情報と共に書かれた全ての変更のリス... -
REXML
:: Element . new(arg = UNDEFINED , parent = nil , context = nil) -> REXML :: Element (19.0) -
要素オブジェクトを生成します。
要素オブジェクトを生成します。
arg が文字列の場合、新たな要素の名前は arg に設定されます。
arg が REXML::Element オブジェクトの場合は、
新たな要素の名前、属性、context が arg のもので初期化されます。
parent で親ノードを指定します。
context には hash table で要素のコンテキストを指定します。
基本的には text node (REXML::Text) での特別な文字、特に空白について
の取り扱いを指定できます。
以下の Symbol をハッシュのキーとして使います。
: :respect_whitespace
... -
RubyVM
:: InstructionSequence # to _ a -> Array (19.0) -
self の情報を 14 要素の配列にして返します。
self の情報を 14 要素の配列にして返します。
命令シーケンスを以下の情報で表します。
: magic
データフォーマットを示す文字列。常に
"YARVInstructionSequence/SimpleDataFormat"。
: major_version
命令シーケンスのメジャーバージョン。
: minor_version
命令シーケンスのマイナーバージョン。
: format_type
データフォーマットを示す数値。常に 1。
: misc
以下の要素から構成される Hash オブジェクト。
:arg_size: メソッド、ブ...