diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml new file mode 100644 index 0000000..8e2db14 --- /dev/null +++ b/.github/workflows/CI.yml @@ -0,0 +1,43 @@ +name: CI + +on: + push: + branches: + - master + tags: ['*'] + pull_request: + workflow_dispatch: + +jobs: + test: + name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} + runs-on: ${{ matrix.os }} + timeout-minutes: 60 + permissions: # needed to allow julia-actions/cache to proactively delete old caches that it has created + actions: write + contents: read + strategy: + fail-fast: false + matrix: + version: + - '1.6' + - '1' + os: + - ubuntu-latest + - windows-latest + - macos-latest + arch: + - x64 + - x86 + exclude: + - os: macos-latest + arch: x86 + steps: + - uses: actions/checkout@v4 + - uses: julia-actions/setup-julia@v2 + with: + version: ${{ matrix.version }} + arch: ${{ matrix.arch }} + - uses: julia-actions/cache@v2 + - uses: julia-actions/julia-buildpkg@v1 + - uses: julia-actions/julia-runtest@v1 diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..f2f4080 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,32 @@ +name: Documentation + +on: + push: + branches: + - master + tags: ['*'] + pull_request: + + +jobs: + build-docs: + permissions: + contents: write + pull-requests: read + statuses: write + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: julia-actions/setup-julia@v2 + with: + version: '1' + - uses: julia-actions/cache@v2 + + - name: Install dependencies + run: julia --project=docs/ -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()' + + - name: Build and deploy + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # If authenticating with GitHub Actions token + DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} # If authenticating with SSH deploy key + run: julia --project=docs/ docs/make.jl diff --git a/.gitignore b/.gitignore index 3bedd3b..845bd05 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.jl.cov *.jl.mem work/ +Manifest.toml diff --git a/docs/Manifest.toml b/docs/Manifest.toml deleted file mode 100644 index c357e01..0000000 --- a/docs/Manifest.toml +++ /dev/null @@ -1,312 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.10.4" -manifest_format = "2.0" -project_hash = "2efe240228a9e295a93a6d3c8ba998e946100d30" - -[[deps.ANSIColoredPrinters]] -git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c" -uuid = "a4c015fc-c6ff-483c-b24f-f7ea428134e9" -version = "0.0.1" - -[[deps.AbstractTrees]] -git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" -uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" -version = "0.4.5" - -[[deps.ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.1" - -[[deps.Artifacts]] -uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" - -[[deps.Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" - -[[deps.CodecZlib]] -deps = ["TranscodingStreams", "Zlib_jll"] -git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" -uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.7.4" - -[[deps.CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.1.1+0" - -[[deps.Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" - -[[deps.DocStringExtensions]] -deps = ["LibGit2"] -git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" -uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.9.3" - -[[deps.Documenter]] -deps = ["ANSIColoredPrinters", "AbstractTrees", "Base64", "CodecZlib", "Dates", "DocStringExtensions", "Downloads", "Git", "IOCapture", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "MarkdownAST", "Pkg", "PrecompileTools", "REPL", "RegistryInstances", "SHA", "TOML", "Test", "Unicode"] -git-tree-sha1 = "5461b2a67beb9089980e2f8f25145186b6d34f91" -uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4" -version = "1.4.1" - -[[deps.Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] -uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" - -[[deps.Expat_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" -uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.6.2+0" - -[[deps.FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" - -[[deps.Git]] -deps = ["Git_jll"] -git-tree-sha1 = "04eff47b1354d702c3a85e8ab23d539bb7d5957e" -uuid = "d7ba0133-e1db-5d97-8f8c-041e4b3a1eb2" -version = "1.3.1" - -[[deps.Git_jll]] -deps = ["Artifacts", "Expat_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "Libiconv_jll", "OpenSSL_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "d18fb8a1f3609361ebda9bf029b60fd0f120c809" -uuid = "f8c6e375-362e-5223-8a59-34ff63f689eb" -version = "2.44.0+2" - -[[deps.IOCapture]] -deps = ["Logging", "Random"] -git-tree-sha1 = "8b72179abc660bfab5e28472e019392b97d0985c" -uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" -version = "0.2.4" - -[[deps.InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" - -[[deps.JLLWrappers]] -deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" -uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.5.0" - -[[deps.JSON]] -deps = ["Dates", "Mmap", "Parsers", "Unicode"] -git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" -uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "0.21.4" - -[[deps.LazilyInitializedFields]] -git-tree-sha1 = "8f7f3cabab0fd1800699663533b6d5cb3fc0e612" -uuid = "0e77f7df-68c5-4e49-93ce-4cd80f5598bf" -version = "1.2.2" - -[[deps.LibCURL]] -deps = ["LibCURL_jll", "MozillaCACerts_jll"] -uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" -version = "0.6.4" - -[[deps.LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] -uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.4.0+0" - -[[deps.LibGit2]] -deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] -uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" - -[[deps.LibGit2_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] -uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" -version = "1.6.4+0" - -[[deps.LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "MbedTLS_jll"] -uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.11.0+1" - -[[deps.Libdl]] -uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" - -[[deps.Libiconv_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" -uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.17.0+0" - -[[deps.LinearAlgebra]] -deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - -[[deps.Logging]] -uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" - -[[deps.Markdown]] -deps = ["Base64"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" - -[[deps.MarkdownAST]] -deps = ["AbstractTrees", "Markdown"] -git-tree-sha1 = "465a70f0fc7d443a00dcdc3267a497397b8a3899" -uuid = "d0879d2d-cac2-40c8-9cee-1863dc0c7391" -version = "0.1.2" - -[[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.2+1" - -[[deps.Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" - -[[deps.MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2023.1.10" - -[[deps.NetworkOptions]] -uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" - -[[deps.OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.23+4" - -[[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "3da7367955dcc5c54c1ba4d402ccdc09a1a3e046" -uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.0.13+1" - -[[deps.PCRE2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.42.0+1" - -[[deps.Parsers]] -deps = ["Dates", "PrecompileTools", "UUIDs"] -git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" -uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.8.1" - -[[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.10.0" - -[[deps.PrecompileTools]] -deps = ["Preferences"] -git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" -uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.2.1" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.4.3" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[[deps.REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] -uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" - -[[deps.Random]] -deps = ["SHA"] -uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" - -[[deps.RegistryInstances]] -deps = ["LazilyInitializedFields", "Pkg", "TOML", "Tar"] -git-tree-sha1 = "ffd19052caf598b8653b99404058fce14828be51" -uuid = "2792f1a3-b283-48e8-9a74-f99dce5104f3" -version = "0.1.0" - -[[deps.SAOImageDS9]] -deps = ["TwoDimensional", "XPA"] -path = ".." -uuid = "dbce9b26-8eb4-4825-964b-d4940cf8daff" -version = "0.2.0" - -[[deps.SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" -version = "0.7.0" - -[[deps.Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" - -[[deps.Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" - -[[deps.TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.3" - -[[deps.Tar]] -deps = ["ArgTools", "SHA"] -uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.0" - -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[deps.TranscodingStreams]] -git-tree-sha1 = "a947ea21087caba0a798c5e494d0bb78e3a1a3a0" -uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.10.9" -weakdeps = ["Random", "Test"] - - [deps.TranscodingStreams.extensions] - TestExt = ["Test", "Random"] - -[[deps.TwoDimensional]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "11e927e476d669e3039c26bc629cacfbeb4bbf36" -uuid = "1907e7ba-7586-4310-a2ba-dd01462aeb50" -version = "0.2.1" - -[[deps.UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" - -[[deps.Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" - -[[deps.XPA]] -deps = ["XPA_jll"] -git-tree-sha1 = "798c1bf472475e8cc83132a562efa529b7c3cece" -uuid = "d310a076-6a08-52b6-ab78-79baa254182b" -version = "0.2.1" - -[[deps.XPA_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "be95a40dfb1f7ce0f6b045b264bb88bebec79d0a" -uuid = "9dbca590-e19a-5566-89a8-3997bfd21c58" -version = "2.1.21+0" - -[[deps.Zlib_jll]] -deps = ["Libdl"] -uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.13+1" - -[[deps.libblastrampoline_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.8.0+1" - -[[deps.nghttp2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.52.0+1" - -[[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+2" diff --git a/docs/Project.toml b/docs/Project.toml index d7a0285..a293452 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -4,3 +4,6 @@ SAOImageDS9 = "dbce9b26-8eb4-4825-964b-d4940cf8daff" [compat] Documenter = "1" + +[sources.SAOImageDS9] +path = ".." diff --git a/docs/make.jl b/docs/make.jl index d52eefc..783d854 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,21 +1,19 @@ using Documenter using SAOImageDS9 -DEPLOYDOCS = (get(ENV, "CI", nothing) == "true") - include("pages.jl") makedocs( - sitename = "Connecting to SAOImage/DS9", - format = Documenter.HTML( - prettyurls = DEPLOYDOCS, - ), + modules = [SAOImageDS9], + sitename = "SAOImageDS9.jl", + format = Documenter.HTML(), authors = "Éric Thiébaut and contributors", pages = pages, + doctest = true, + checkdocs = :export, ) -if DEPLOYDOCS - deploydocs( - repo = "github.com/JuliaAstro/SAOImageDS9.jl.git", - ) -end +deploydocs( + repo = "github.com/JuliaAstro/SAOImageDS9.jl.git", + push_preview = true, +) diff --git a/docs/pages.jl b/docs/pages.jl index bce4938..117af18 100644 --- a/docs/pages.jl +++ b/docs/pages.jl @@ -1,5 +1,13 @@ -pages = ["index.md", "install.md", "starting.md", "requests.md", - "connect.md", "drawing.md", "examples.md", "library.md"] +pages = [ + "index.md", + "install.md", + "starting.md", + "requests.md", + "connect.md", + "drawing.md", + "examples.md", + "library.md", +] requiredmods = Symbol[] diff --git a/docs/src/index.md b/docs/src/index.md index fd9de0e..8aea0ed 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -10,9 +10,15 @@ Messaging System](https://github.com/ericmandel/xpa). ## Table of contents ```@contents -Pages = ["install.md", "starting.md", "requests.md", - "connect.md", "drawing.md", "examples.md", - "library.md"] +Pages = [ + "install.md", + "starting.md", + "requests.md", + "connect.md", + "drawing.md", + "examples.md", + "library.md", +] ``` diff --git a/docs/src/install.md b/docs/src/install.md index 6d546ef..ffaee63 100644 --- a/docs/src/install.md +++ b/docs/src/install.md @@ -20,7 +20,9 @@ Another possibility from Julia's REPL or in a Julia script: ```julia using Pkg -Pkg.add(PackageSpec(url="https://github.com/JuliaAstro/SAOImageDS9.jl", rev="master")) +Pkg.add("SAOImageDS9") +# or +Pkg.add(PackageSpec(name="SAOImageDS9", rev="master")) ``` See [XPA.jl site](https://github.com/JuliaAstro/XPA.jl) for instructions about diff --git a/src/SAOImageDS9.jl b/src/SAOImageDS9.jl index a0d5772..e8bfcac 100644 --- a/src/SAOImageDS9.jl +++ b/src/SAOImageDS9.jl @@ -13,7 +13,6 @@ module SAOImageDS9 export DS9 - const DS9 = SAOImageDS9 using XPA @@ -73,7 +72,6 @@ name of the access point. To retrieve the name of the current SAOImage/DS9 access point, call the [`SAOImageDS9.accesspoint`](@ref) method. - """ function connect(ident::Union{Regex,AbstractString} = "DS9:*"; kwds...) apt = XPA.find(ident; kwds...) @@ -88,8 +86,7 @@ function connect(ident::Union{Regex,AbstractString} = "DS9:*"; kwds...) return addr end -_warn(args...) = printstyled(stderr, "WARNING: ", args..., "\n"; - color=:yellow) +_warn(args...) = printstyled(stderr, "WARNING: ", args..., "\n"; color=:yellow) """ SAOImageDS9.get([T, [dims,]] args...) @@ -132,13 +129,8 @@ yields the contents of current SAOImage/DS9 frame as an array (or as `nothing` if the frame is empty). Keyword `endian` can be used to specify the byte order of the received values (see [`SAOImageDS9.byte_order`](@ref)). -To retrieve the version of the SAOImage/DS9 program: - - SAOImageDS9.get(VersionNumber) - -See also [`SAOImageDS9.connect`](@ref), [`SAOImageDS9.set`](@ref) and -`XPA.get`. - +# See also +[`SAOImageDS9.connect`](@ref), [`SAOImageDS9.set`](@ref) and `XPA.get`. """ get(args...) = XPA.get(_apt(), join_arguments(args); nmax=1, throwerrors=true) @@ -207,8 +199,7 @@ function _parse(::Type{TupleOf{T}}, return map(s -> _parse(T, s), list) end -function _parse(::Type{TupleOf{T}}, - str::AbstractString) where {T<:Real} +function _parse(::Type{TupleOf{T}}, str::AbstractString) where {T<:Real} return Tuple(map(s -> _parse(T, s), split(str; keepempty=false))) end @@ -219,6 +210,11 @@ function get(::Type{Array}; endian::Union{Symbol,AbstractString}=:native) return get(Array{T}, dims, "array", byte_order(endian)) end +""" + SAOImageDS9.get(VersionNumber) + +Retrieve the version of the SAOImage/DS9 program. +""" function get(::Type{VersionNumber}) str = get(String, "version") m = match(r"^ds9 +([.0-9]+[a-z]*)\s*$", str) @@ -245,7 +241,6 @@ set the contents of the current SAOImage/DS9 frame to be array `arr`. Keyword See also [`SAOImageDS9.connect`](@ref), [`SAOImageDS9.get`](@ref) and `XPA.set`. - """ function set(args...; data=nothing) XPA.set(_apt(), join_arguments(args); nmax=1, throwerrors=true, data=data) @@ -256,10 +251,9 @@ function set(arr::DenseArray{T,N}; endian::Symbol=:native, mask::Bool=false, new::Bool=false) where {T<:PixelTypes,N} - args = String[] - push!(args, "array") - if new; push!(args, "new"); end - if mask; push!(args, "mask"); end + args = String["array"] + new && push!(args, "new") + mask && push!(args, "mask") set(args..., _arraydescriptor(arr; endian=endian); data=arr) end @@ -303,8 +297,8 @@ _arraydescriptor(arr::DenseArray; kdws...) = yields FITS bits-per-pixel (BITPIX) value for `x` which can be an array or a type. A value of 0 is returned if `x` is not of a supported type. -See also [`SAOImageDS9.bitpix_to_type`](@ref). - +# See also +[`SAOImageDS9.bitpix_to_type`](@ref) """ bitpix_of(::DenseArray{T}) where {T} = bitpix_of(T) for T in PIXELTYPES @@ -318,10 +312,10 @@ bitpix_of(::Any) = 0 SAOImageDS9.bitpix_to_type(bp) -> T yields Julia type corresponding to FITS bits-per-pixel (BITPIX) value `bp`. -The value `Nothing` is returned if `bp` is unknown. - -See also [`SAOImageDS9.bitpix_of`](@ref). +The type `Nothing` is returned if `bp` is unknown. +# See also +[`SAOImageDS9.bitpix_of`](@ref) """ bitpix_to_type(bitpix::Int) = (bitpix == 8 ? UInt8 : @@ -341,23 +335,27 @@ Argument can be one of the strings (or the equivalent symbol): `"big"` for most significant byte first, `"little"` for least significant byte first or `"native"` to yield the byte order of the machine. -See also [`SAOImageDS9.get`](@ref), [`SAOImageDS9.set`](@ref). - -""" -byte_order(endian::Symbol) = - (endian == :native ? (ENDIAN_BOM == 0x01020304 ? "big" : - ENDIAN_BOM == 0x04030201 ? "little" : - error("unknown byte order")) : - endian == :big ? "big" : - endian == :little ? "little" : - error("invalid byte order")) - -byte_order(endian::AbstractString) = - (endian == "native" ? (ENDIAN_BOM == 0x01020304 ? "big" : - ENDIAN_BOM == 0x04030201 ? "little" : - error("unknown byte order")) : - endian == "big" || endian == "little" ? endian : - error("invalid byte order")) +# See also +[`SAOImageDS9.get`](@ref), [`SAOImageDS9.set`](@ref). +""" +function byte_order(endian::Symbol) + if endian == :native + if ENDIAN_BOM == 0x01020304 + return "big" + elseif ENDIAN_BOM == 0x04030201 + return "little" + else + error("unknown byte order") + end + elseif endian == :big + return "big" + elseif endian == :little + return "little" + else + error("invalid byte order") + end +end +byte_order(endian::AbstractString) = byte_order(Symbol(endian)) #------------------------------------------------------------------------------ # DRAWING @@ -485,7 +483,6 @@ displays a message dialog with text `msg` in SAOImage/DS9 application referred by `apt` and returns a boolean. If keyword `cancel` is true, a *Cancel* button is added to the dialog and `false` maybe returned if the dialog is not closed by clicking the *OK* button; otherwise `true` is returned. - """ message(msg::AbstractString; kwds...) = message(_apt(), msg; kwds...) function message(apt, msg::AbstractString; cancel::Bool = false) @@ -507,7 +504,6 @@ selected by clicking the first mouse button. The result is either `nothing` `(k,x,y,v)` with `k` the pressed key (an empty string if `key` is false), `(x,y)` are the coordinates of the selected position and `v` is the corresponding value in the data. - """ function select(apt = _apt(); text::AbstractString = "", @@ -539,7 +535,6 @@ double precision floats `(lo,hi)`. If `cmin` is `nothing`, `lo` is the minimal finite value found in `A` and converted to `Cdouble`; otherwise `lo = Cdouble(cmin)`. If `cmax` is `nothing`, `hi` is the maximal finite value found in `A` and converted to `Cdouble`; otherwise `hi = Cdouble(cmax)`. - """ limits(A::AbstractArray{<:Real}, ::Nothing, ::Nothing) = to_limits(finite_extrema(A)) @@ -564,7 +559,6 @@ to_limits(cmin::Real, cmax::Real) = to_limits(convert(Cdouble, cmin), yields the minimum and maximum finite values in array `A`. The result is such that `vmin ≤ vmax` (both values being finite) unless there are no finite values in `A` in which case `vmin > vmax`. - """ finite_extrema(A::AbstractArray{<:Real}) = valid_extrema(isfinite, A) @@ -573,7 +567,6 @@ finite_extrema(A::AbstractArray{<:Real}) = valid_extrema(isfinite, A) yields the minimum finite value in array `A`. The result is never a NaN but may be `typemax(eltype(A))` if there are no finite values in `A`. - """ finite_minimum(A::AbstractArray{<:Real}) = valid_minimum(isfinite, A) @@ -582,7 +575,6 @@ finite_minimum(A::AbstractArray{<:Real}) = valid_minimum(isfinite, A) yields the maximum finite value in array `A`. The result is never a NaN but may be `typemin(eltype(A))` if there are no finite values in `A`. - """ finite_maximum(A::AbstractArray{<:Real}) = valid_maximum(isfinite, A) @@ -594,7 +586,6 @@ those for which predicate `pred` yields `true`. The result is such that `vmin ≤ vmax` (both values being valid) unless there are no valid values in `A` in which case `vmin > vmax`. The predicate function is assumed to take care of NaN's. - """ function valid_extrema(pred, A::AbstractArray{T}) where {T} vmin = typemax(T) @@ -615,7 +606,6 @@ yields the minimum valid value in array `A`. Valid values are those for which predicate `pred` yields `true`. The result is a valid value but may be `typemax(eltype(A))` if there are no valid values in `A`. The predicate function is assumed to take care of NaN's. - """ function valid_minimum(pred, A::AbstractArray{T}) where {T} vmin = typemax(T) @@ -634,7 +624,6 @@ yields the maximum valid value in array `A`. Valid values are those for which predicate `pred` yields `true`. The result is a valid value but may be `typemin(eltype(A))` if there are no valid values in `A`. The predicate function is assumed to take care of NaN's. - """ function valid_maximum(pred, A::AbstractArray{T}) where {T} vmax = typemin(T)