blob: 7ca3e0fdb12a2fd2329bb8200fe261c90123e371 [file] [log] [blame]
#!/usr/bin/ruby
# for Ruby 1.9
# Synopsis:
#
# pageNumberLookup.rb filename.html > outputFile.html
#
# This script is used to replace symbolic references to locations in the OpenCL
# specification with page number references. This can be used when you want the
# reference page to refer to section XYZ of the OpenCL spec with a link and have
# the link open the spec document to section XYZ. This approach is based on the
# "named destination" feature for PDF files.
#
# Ideally we wanted to link to the named destinations, but inconsistencies between
# versions of MS Word and other limitations prevent us from doing that at this time.
# So, this is a second-best solution in which we map symbolic names to page
# numbers, then the link will open the spec to the specified page. To use this
# solution, refer to a section in the spec using a symbolic name that you make up
# in a <olink /> element with a uri attribute that is the symbolic name. Then add
# the keyword to the lookup table below with the corresponding page number from
# the Spec.
#
# For example to link to the spec section for gl_sharing, use:
#
# <olink uri="gl_sharing">OpenCL Specification</olink>
#
# The xsltproc program generates a temporary HTML file where the XML line above
# is transformed into a line containing a placeholder URL:
#
# <a href="http://www.khronos.org/registry/cl/specs/opencl-XXX.pdf#namedest=gl_sharing">
# OpenCL Specification</a>
#
# When this lookup program is run on the temporary HTML file, it will look up the
# keyword and replace the placeholder text in the HTML file with the final URL.
# The final URL is specified below in Specnames. This transforms the placeholder
# line into the final form, in this manner:
#
# <a href="http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf#page=279">
# OpenCL Specification</a>
#
# (You can control what the first part of the URL is by modifying the SpecBaseUrl
# variable in the opencl-man.xsl file.)
# Here are the real spec filenames of the OpenCL 1.2 spec documents (see comments above):
Core = "opencl-1.2.pdf"
Ext = "opencl-1.2-extensions.pdf"
###############################################################################
# Spec page number mapping here. First string in quotes. Commas between values.
# The comments are for reference to see where this content can be found in the spec.
#
Pagenums = {
"classDiagram" => [Core, 20], # 2.1 - OpenCL Class Diagram
"clGetPlatformIDs" => [Core, 33], # 4.1 - Querying Platform Info
"clGetPlatformInfo" => [Core, 33], # 4.1 - Querying Platform Info
"clGetDeviceIDs" => [Core, 35], # 4.2 - Querying Devices
"clGetDeviceInfo" => [Core, 37], # 4.2 - Querying Devices
"cl_khr_fp64" => [Core, 46], # 4.2 - Querying Devices
"clCreateSubDevices" => [Core, 49], # 4.3 - Partitioning a Device
"clRetainDevice" => [Core, 52], # 4.3 - Partitioning a Device
"clReleaseDevice" => [Core, 52], # 4.3 - Partitioning a Device
"clCreateContext" => [Core, 54], # 4.4 - Contexts
"clCreateContextFromType" => [Core, 56], # 4.4 - Contexts
"clRetainContext" => [Core, 57], # 4.4 - Contexts
"clReleaseContext" => [Core, 57], # 4.4 - Contexts
"clGetContextInfo" => [Core, 58], # 4.4 - Contexts
"clCreateCommandQueue" => [Core, 61], # 5.1 - Command Queues
"clRetainCommandQueue" => [Core, 62], # 5.1 - Command Queues
"clReleaseCommandQueue" => [Core, 63], # 5.1 - Command Queues
"clGetCommandQueueInfo" => [Core, 63], # 5.1 - Command Queues
"clCreateBuffer" => [Core, 66], # 5.2.1 - Creating Buffer Objects
"clCreateSubBuffer" => [Core, 69], # 5.2.1 - Creating Buffer Objects
"clEnqueueReadBuffer" => [Core, 72], # 5.2.2 - Reading, Writing, Copying Buffer Objects
"clEnqueueWriteBuffer" => [Core, 72], # 5.2.2 - Reading, Writing, Copying Buffer Objects
"clEnqueueReadBufferRect" => [Core, 74], # 5.2.2 - Reading, Writing and Copying Buffer Objects
"clEnqueueWriteBufferRect" => [Core, 75], # 5.2.2 - Reading, Writing and Copying Buffer Objects
"clEnqueueCopyBuffer" => [Core, 79], # 5.2.2 - Reading, Writing, Copying Buffer Objects
"clEnqueueCopyBufferRect" => [Core, 81], # 5.2.2 - Reading, Writing and Copying Buffer Objects
"clEnqueueFillBuffer" => [Core, 84], # 5.2.2 - Reading, Writing and Copying Buffer Objects
"clEnqueueMapBuffer" => [Core, 86], # 5.2.3 - Mapping Buffer Objects
"clCreateImage" => [Core, 90], # 5.3.1 - Creating Image Objects
"cl_image_format" => [Core, 92], # 5.3.1.1 - Image Format Descriptor
"cl_image_desc" => [Core, 95], # 5.3.1.2 - Image Descriptor
"clGetSupportedImageFormats" => [Core, 96], # 5.3.2 - Querying List of Supported Image Formats
"supportedImageFormats" => [Core, 97], # 5.3.2.1 - Supported Image Formats
"clEnqueueReadImage" => [Core, 98], # 5.3.3 - Reading, Writing and Copying Image Objects
"clEnqueueWriteImage" => [Core, 99], # 5.3.3 - Reading, Writing and Copying Image Objects
"clEnqueueCopyImage" => [Core, 104], # 5.3.3 - Reading, Writing and Copying Image Objects
"clEnqueueFillImage" => [Core, 105], # 5.3.3 - Reading, Writing and Copying Image Objects
"clEnqueueCopyImageToBuffer" => [Core, 107], # 5.3.4 - Copying between Image and Buffer Objects
"clEnqueueCopyBufferToImage" => [Core, 110], # 5.3.4 - Copying between Image and Buffer Objects
"clEnqueueMapImage" => [Core, 112], # 5.3.5 - Mapping Image Objects
"clGetImageInfo" => [Core, 116], # 5.3.6 - Image Object Queries
"clRetainMemObject" => [Core, 118], # 5.4.1 - Retaining and Releasing Memory Objects
"clReleaseMemObject" => [Core, 118], # 5.4.1 - Retaining and Releasing Memory Objects
"clSetMemObjectDestructorCallback" => [Core, 119], # 5.4.1 - Retaining and Releasing Memory Objects
"clEnqueueUnmapMemObject" => [Core, 120], # 5.4.2 - Unmapping Mapped Memory Objects
"clEnqueueMigrateMemObjects" => [Core, 123], # 5.4.4 - Migrating Memory Objects
"clGetMemObjectInfo" => [Core, 125], # 5.4.5 - Memory Object Queries
"clCreateSampler" => [Core, 128], # 5.5.1 - Creating Sampler Objects
"clRetainSampler" => [Core, 129], # 5.5.1 - Creating Sampler Objects
"clReleaseSampler" => [Core, 129], # 5.5.1 - Creating Sampler Objects
"clGetSamplerInfo" => [Core, 130], # 5.5.2 - Sampler Object Queries
"clCreateProgramWithSource" => [Core, 132], # 5.6.1 - Creating Program Objects
"clCreateProgramWithBinary" => [Core, 133], # 5.6.1 - Creating Program Objects
"clCreateProgramWithBuiltInKernels" => [Core, 135], # 5.6.1 - Creating Program Objects
"clRetainProgram" => [Core, 136], # 5.6.1 - Creating Program Objects
"clReleaseProgram" => [Core, 136], # 5.6.1 - Creating Program Objects
"clBuildProgram" => [Core, 137], # 5.6.2 - Building Program Executables
"clCompileProgram" => [Core, 139], # 5.6.3 - Separate Compilation and Linking of Programs
"clLinkProgram" => [Core, 142], # 5.6.3 - Separate Compilation and Linking of Programs
"clUnloadPlatformCompiler" => [Core, 149], # 5.6.6 - Unloading the OpenCL Compiler
"clGetProgramInfo" => [Core, 150], # 5.6.7 - Program Object Queries (updated for 1.2 rev 14)
"clGetProgramBuildInfo" => [Core, 153], # 5.6.7 - Program Object Queries
"clCreateKernel" => [Core, 157], # 5.7.1 - Creating Kernel Objects
"clCreateKernelsInProgram" => [Core, 158], # 5.7.1 - Creating Kernel Objects
"clRetainKernel" => [Core, 159], # 5.7.1 - Creating Kernel Objects
"clReleaseKernel" => [Core, 159], # 5.7.1 - Creating Kernel Objects
"clSetKernelArg" => [Core, 160], # 5.7.2 - Setting Kernel Arguments
"clGetKernelInfo" => [Core, 162], # 5.7.3 - Kernel Object Queries (updated for 1.2 rev 14)
"clGetKernelWorkGroupInfo" => [Core, 164], # 5.7.3 - Kernel Object Queries
"clGetKernelArgInfo" => [Core, 166], # 5.7.3 - Kernel Object Queries (updated for 1.2 rev 14)
"clEnqueueNDRangeKernel" => [Core, 169], # 5.8 - Executing Kernels (updated for 1.2 rev 14)
"clEnqueueTask" => [Core, 172], # 5.8 - Executing Kernels (updated for 1.2 rev 14)
"clEnqueueNativeKernel" => [Core, 174], # 5.8 - Executing Kernels (updated for 1.2 rev 14)
"clCreateUserEvent" => [Core, 178], # 5.9 - Event Objects
"clSetUserEventStatus" => [Core, 178], # 5.9 - Event Objects
"clWaitForEvents" => [Core, 179], # 5.9 - Event Objects
"clGetEventInfo" => [Core, 180], # 5.9 - Event Objects
"clSetEventCallback" => [Core, 183], # 5.9 - Event Objects
"clRetainEvent" => [Core, 184], # 5.9 - Event Objects
"clReleaseEvent" => [Core, 185], # 5.9 - Event Objects
"clEnqueueMarkerWithWaitList" => [Core, 186], # 5.10 - Markers, Barriers and Waiting for Events
"clEnqueueBarrierWithWaitList" => [Core, 187], # 5.10 - Markers, Barriers and Waiting for Events
"clGetEventProfilingInfo" => [Core, 190], # 5.12 - Profiling Operations on Memory Objects and Kernels
"clFlush" => [Core, 193], # 5.13 - Flush and Finish
"clFinish" => [Core, 193], # 5.13 - Flush and Finish
"scalarDataTypes" => [Core, 195], # 6.1.1 - Built-in Scalar Data Types
"vectorDataTypes" => [Core, 198], # 6.1.2 - Built-in Vector Data Types
"otherDataTypes" => [Core, 199], # 6.1.3 - Other Built-in Data Types
"reservedDataTypes" => [Core, 200], # 6.1.4 - Reserved Data Types
"convert_T" => [Core, 207], # 6.2.3 - Explicit Conversions
"as_typen" => [Core, 212], # 6.2.4.2 - Reinterpreting Types Using as_typen()
"operators" => [Core, 215], # 6.3 - Operators
"addressSpaceQualifier" => [Core, 222], # 6.5 - Address Space Qualifiers
"accessQualifiers" => [Core, 226], # 6.6 - Access Qualifiers
"functionQualifiers" => [Core, 227], # 6.7 - Function Qualifiers
"storageQualifiers" => [Core, 230], # 6.8 - Storage-class Qualifiers
"restrictions" => [Core, 231], # 6.9 - Restrictions
"preprocessorDirectives" => [Core, 234], # 6.10 - Preprocessor Directives and Macros
"attribute" => [Core, 236], # 6.11. - Attribute Qualifiers
"attributes-types" => [Core, 237], # 6.11.1 - Specifying Attributes of Types
"attributes-variables" => [Core, 239], # 6.11.3 - Specifying Attributes of Variables
"attributes-blocksAndControlFlow" => [Core, 241], # 6.11.4 - Specifying Attributes of Blocks and Control...
"workItemFunctions" => [Core, 242], # 6.12.1 - Work-Item Functions
"mathFunctions" => [Core, 244], # 6.12.2 - Math Functions
"mathConstants" => [Core, 251], # 6.12.2 - Table at end of Math Functions
"FP_CONTRACT" => [Core, 252], # 6.12.2.1 - Floating-point macros and pragmas
"macroLimits" => [Core, 252], # 6.12.2.1 - Floating-point macros and pragmas
"integerFunctions" => [Core, 256], # 6.12.3 - Integer Functions
"commonFunctions" => [Core, 260], # 6.12.4 - Common Functions
"geometricFunctions" => [Core, 262], # 6.12.5 - Geometric Functions
"relationalFunctions" => [Core, 264], # 6.12.6 - Relational Functions
"vectorDataLoadandStoreFunctions" => [Core, 267], # 6.12.7 - Vector Data Load and Store Functions
"synchFunctions" => [Core, 274], # 6.12.8 - Synchronization Functions
"explicitMemoryFenceFunctions" => [Core, 275], # 6.12.9 - Explicit Memory Fence Functions
"asyncCopyFunctions" => [Core, 276], # 6.12.10 - Async Copies from Global to Local Memory...
"atomicFunctions" => [Core, 279], # 6.12.11 - Atomic Functions for 32-bit integers
"miscVectorFunctions" => [Core, 282], # 6.12.12 Miscellaneous Vector Functions
"printfFunction" => [Core, 284], # 6.12.13 - printf
"imageFunctions" => [Core, 292], # 6.12.14 - Image Read and Write Functions
"sampler_t" => [Core, 292], # 6.12.14.1 - Samplers
"imageQueryFunctions" => [Core, 311], # 6.12.14.5 - Built-in Image Query Functions
"imageAddressFiltering" => [Core, 326], # 8 - Image Addressing and Filtering
"referenceWong" => [Core, 355], # 11 - References (to Wong paper)
"deprecated" => [Core, 373], # F - Changes
"EXTENSION" => [Ext, 6], # 9.1 - Compiler Directives for Optional Extensions
"clGetExtensionFunctionAddressForPlatform" => [Ext, 7], # 9.2 - Getting OpenCL API Extension Function Pointers
"cl_khr_int64_base_atomics" => [Ext, 10], # 9.3 - 64-bit Atomics
"cl_khr_int64_extended_atomics" => [Ext, 10], # 9.3 - 64-bit Atomics
"atom_add" => [Ext, 10], # 9.3 - 64-bit Atomics
"imageFunctions3D" => [Ext, 12], # 9.4 - Writing to 3D image memory objects
"cl_khr_3d_image_writes" => [Ext, 12], # 9.4 - Writing to 3D image memory objects
"cl_khr_fp16" => [Ext, 14], # 9.5 - Half Floating-Point
"imageFunctionsHalf" => [Ext, 27], # 9.5.8 - Image Read and Write Functions (half)
"cl_khr_gl_sharing" => [Ext, 39], # 9.6 - Creating CL context from a GL context or share group
"clGetGLContextInfoKHR" => [Ext, 43], # 9.6.5 - Additions to section 9.8 of the...
"clCreateFromGLBuffer" => [Ext, 49], # 9.7.2 - CL Buffer Objects -> GL Buffer Objects
"clCreateFromGLTexture" => [Ext, 50], # 9.7.3 - CL Image Objects -> GL Textures
"clCreateFromGLRenderbuffer" => [Ext, 53], # 9.7.4 - CL Image Objects -> GL Renderbuffers
"clGetGLObjectInfo" => [Ext, 54], # 9.7.5 - Querying GL object information from a CL...
"clGetGLTextureInfo" => [Ext, 55], # 9.7.5 - Querying GL object information from a CL...
"clEnqueueAcquireGLObjects" => [Ext, 56], # 9.7.6 - Sharing memory objects that map to GL objects...
"clEnqueueReleaseGLObjects" => [Ext, 58], # 9.7.6 - Sharing memory objects that map to GL objects...
"cl_khr_gl_event" => [Ext, 61], # 9.8 - Creating CL event objets
"clCreateEventFromGLsyncKHR" => [Ext, 62], # 9.8.4 - Additions to Chapter 5
"cl_khr_d3d10_sharing" => [Ext, 66], # 9.9 - Sharing Memory Objects with Direct3D 10
"clGetDeviceIDsFromD3D10KHR" => [Ext, 71], # 9.9.7.1 - Querying OpenCL Devices Corresponding to... 11...
"clCreateFromD3D10BufferKHR" => [Ext, 73], # 9.9.7.3 - Sharing Direct3D 10 Buffer Resources as OpenCL...
"clCreateFromD3D10Texture2DKHR" => [Ext, 74], # 9.9.7.4 - Sharing Direct3D 10 Texture and Resources...
"clCreateFromD3D10Texture3DKHR" => [Ext, 75], # 9.9.7.4 - Sharing Direct3D 10 Texture and...
"clEnqueueAcquireD3D10ObjectsKHR" => [Ext, 77], # 9.9.7.6 - Sharing memory objects created from Direct3D 10..
"clEnqueueReleaseD3D10ObjectsKHR" => [Ext, 79], # 9.9.7.6 - Sharing memory objects created from...
"cl_khr_dx9_media_sharing" => [Ext, 83], # 9.10 - DX9 Media Surface Sharing
"clGetDeviceIDsFromDX9MediaAdapterKHR" => [Ext, 88], # 9.10.7.1 - Querying OpenCL Devices corresponding....
"clCreateFromDX9MediaSurfaceKHR" => [Ext, 89], # 9.10.7.2 Creating Media Resources as OpenCL Image Objects
"clEnqueueAcquireDX9MediaSurfacesKHR" => [Ext, 92], # 9.10.7.4 - Sharing Memory Objects created from Media Surfaces
"clEnqueueReleaseDX9MediaSurfacesKHR" => [Ext, 93], # 9.10.7.4 - Sharing Memory Objects...
"cl_khr_d3d11_sharing" => [Ext, 97], # 9.11 - Sharing Memory Objects with Direct3D 11
"clGetDeviceIDsFromD3D11KHR" => [Ext, 102], # 9.11.7.1 - Querying OpenCL Devices Corresponding to Direct3D
"clCreateFromD3D11BufferKHR" => [Ext, 104], # 9.11.7.3 - Sharing Direct3D 11 Buffer Resources
"clCreateFromD3D11Texture2DKHR" => [Ext, 105], # 9.11.7.4 - Sharing Direct3D 11 Texture and Resources...
"clCreateFromD3D11Texture3DKHR" => [Ext, 106], # 9.11.7.4 - Sharing Direct3D 11 Texture and Resources....
"clEnqueueAcquireD3D11ObjectsKHR" => [Ext, 108], # 9.11.7.6 - Sharing memory objects created from Direct3D 11...
"clEnqueueReleaseD3D11ObjectsKHR" => [Ext, 110], # 9.11.7.6 - Sharing memory objects created from Direct3D 11...
"cl_khr_icd" => [Ext, 113], # 9.12 - OpenCL Installable Client Driver (ICD)
"clIcdGetPlatformIDsKHR" => [Ext, 116], # 9.12.9 - Additions to chapter 4...
}
###############################################################################
# Copy the specified file to the output, substituting any references to spec page numbers
#
IO.foreach(ARGV[0]) do |line|
if line.match("namedest=")
keyword = line.sub(/^.*namedest=/, "").sub(/\".*$/, "").chomp.rstrip
if Pagenums.has_key?(keyword)
specName = Pagenums.fetch(keyword)[0]
pageNum = Pagenums.fetch(keyword)[1]
#puts "specName=" + specName + ", pageNum=" + pageNum.to_s
puts line.sub(/namedest=[^\s]*\"/, "page=" + pageNum.to_s + '"').sub(/opencl-1.x-latest.pdf/, specName)
else
abort("Spec page number for keyword \"" + keyword + "\" not found in " + $0) + '"'
end
else
puts line
end
end