Download: XMP Custom Panels b bc September 2003

XMP Custom Panels b bc ADOBE SYSTEMS INCORPORATED Corporate Headquarters 345 Park Avenue San Jose, CA 95110-2704 (408) 536-6000 http://partners.adobe.com September 2003 Copyright 2003 Adobe Systems Incorporated. All rights reserved. NOTICE: All information contained herein is the property of Adobe Systems Incorporated. No part of this publication (whether in hardcopy or electronic form) may be reproduced or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior written consent of the Adobe Systems Incorporated. PostScript is a...
Author: Walton Shared: 7/30/19
Downloads: 142 Views: 4289

Content

XMP Custom Panels

b bc ADOBE SYSTEMS INCORPORATED Corporate Headquarters 345 Park Avenue San Jose, CA 95110-2704 (408) 536-6000 http://partners.adobe.com September 2003, Copyright 2003 Adobe Systems Incorporated. All rights reserved. NOTICE: All information contained herein is the property of Adobe Systems Incorporated. No part of this publication (whether in hardcopy or electronic form) may be reproduced or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior written consent of the Adobe Systems Incorporated. PostScript is a registered trademark of Adobe Systems Incorporated. All instances of the name PostScript in the text are references to the PostScript language as defined by Adobe Systems Incorporated unless otherwise stated. The name PostScript also is used as a product trademark for Adobe Systems’ implementation of the PostScript language interpreter. Except as otherwise stated, any reference to a "PostScript printing device,” "PostScript display device,” or similar item refers to a printing device, display device or item (respectively) that contains PostScript technology created or licensed by Adobe Systems Incorporated and not to devices or items that purport to be merely compatible with the PostScript language. Adobe, the Adobe logo, Acrobat, the Acrobat logo, Acrobat Capture, Distiller, PostScript, the PostScript logo and Reader are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries. Apple, Macintosh, and Power Macintosh are trademarks of Apple Computer, Inc., registered in the United States and other countries. PowerPC is a registered trademark of IBM Corporation in the United States. ActiveX, Microsoft, Windows, and Windows NT are either registered trademarks or trademarks of Microsoft Corporation in the United States and other countries. UNIX is a registered trademark of The Open Group. All other trademarks are the property of their respective owners. This publication and the information herein is furnished AS IS, is subject to change without notice, and should not be construed as a commitment by Adobe Systems Incorporated. Adobe Systems Incorporated assumes no responsibility or liability for any errors or inaccuracies, makes no warranty of any kind (express, implied, or statutory) with respect to this publication, and expressly disclaims any and all warranties of merchantability, fitness for particular purposes, and noninfringement of third party rights.,

Contents XMP Custom File Info Panels .5

Introduction .5 Custom Panel Files .5 Custom Panel Description File Format .5 File Locations .6 Custom Panel Description File Contents .6 Custom Panel Widget Types .7 Container Widgets .7 Leaf Widgets .8 Widget Variables .11 Widget Variable Key-Value Pairs .11 Scoping for Linked Variable Values .12 General Widget Variables .13 Container Widget Variables.15 Dynamic-Value Leaf Widget Variables .19 Type-Specific Leaf Widget Variables .20 ZString .25 The ZString Format .25 ZString Examples .26 Localization Dictionary Files .26 Localization Dictionary File Format .27 Matching ZStrings for Localization .28 Troubleshooting a Custom Panel .28 Additional Documentation.29

Sample Custom Panels .31

Overview of Samples .31 Sample Custom Panel Description Files .31 Example 1: All Widgets .31 Example 2: Document Description Metadata .32

ZString Escape Sequences .37

Backslash Escape Sequences .37 XMP Custom Panels 3,

Contents

Hat Escape Sequences .37 ISO-based Escape Sequences .38 4 XMP Custom Panels,

XMP Custom File Info Panels Introduction

The custom File Info panel for XMP metadata allows you to define, create, and manage custom metadata properties using standard Adobe applications. You can do this by creating a Custom Panel Description file, as described in this document, and placing it in a common location referenced by Adobe applications that support this feature. You can also supply localization dictionary files to localize the contents of your Custom Panel Description files. The resulting custom dialog panel is seen by users when they select the File Info menu option. The File Info panel allows you to support paths to metadata properties which are not defined in default or other standard XMP schemas, but are needed for your application, company, or industry. By using XMP for that metadata, you take advantage of the potential of XMP for interchange and participation in asset management systems, while providing the ability to use standard Adobe applications to manage it.

Custom Panel Files

There are two types of files used in creating a File Info custom panel: ● Panel description files These files directly describe and create the custom panels. See “Custom Panel Description File Format” on page 5 for a complete description. ● Localization dictionary files These optional files localize the panel description file contents to other languages at run time. See “Localization Dictionary Files” on page 26 for a complete description. Adobe applications that support this feature look for these files in the prescribed locations, and add your custom panel or panels to their File Info dialogs in the language of the dialog.

Custom Panel Description File Format

The panel description file is a 7-bit ASCII file in a simple form of XML, containing the user- interface definitions for a panel. See Sample Custom Panels for example of the format. One description file describes exactly one custom file panel; however, you can have as many custom panel files as you wish. The following file creation tools are recommended: ● On Mac OS 9 use SimpleText or a free third-party text editor such as MPW Shell. XMP Custom Panels 5, Introduction ● On Mac OS X use TextEdit and make sure you save the file as type “Plain Text,” not RTF. ● On Windows® use Notepad, and be sure to save the file as type “Plain Text.” Save the file with extension .txt or .xmp.

File Locations

The panel description and localization dictionary files must reside in the following locations for proper use: Mac OS X {Root Volume}/Library/Application Support/Adobe/XMP /Custom File Info Panels {Home Directory}/Library/Application/Adobe/XMP /Custom File Info Panels Windows \Program Files\Common Files\Adobe\XMP \Custom File Info Panels \Documents and Settings\\Application Data\Adobe\XMP \Custom File Info Panels Each time an Adobe application opens the File Info dialog, it scans all the files in these directories and appends them to the file list. If more than one of the description files has the same name, the first one found is added, and others are ignored. Changes to the contents of the directories do not require you to reload an application; changes are automatically reflected in the dialog the next time it is opened.

Custom Panel Description File Contents

Custom Panel descriptions define widgets, which generally represent visual elements displayed on the screen. Custom Panel description files contain only widget definitions; they cannot contain comments. Panel descriptions consist of nested widget definitions. Widgets that contain other widgets are called containers; these do not always have a visual representation. Bottom-level widget definitions are called leaves; these are generally UI controls, such as text boxes and pop-up menus. The nesting of widgets is called the scoping. ● A leaf widget has the following format: widget_type (widget_variables); ● A container widget has the following format: widget_type (widget_variables) { ...nested widgets... } Widget types are defined to represent different kinds of containers and controls. The widget types are listed and described in “Custom Panel Widget Types” on page 7. 6 XMP Custom Panels, Custom Panel Widget Types All widgets can have variables associated with them; a variable consists of a key-value pair (see “Widget Variable Key-Value Pairs” on page 11). The variables affect the layout of the custom panel, the behavior of the widget, and the connection between the controls and XMP properties. All of the variables are described in “Widget Variables” on page 11. ● The values of the widget variables can depend on the scope—that is, the nesting level at which they are specified. See “Scoping for Linked Variable Values” on page 12. ● Widgets contain ZStrings, an Adobe-defined type, to specify displayed text; see “ZString” on page 25. This allows displayed text to be translated to other languages using localization dictionaries. Strings and ZStrings are enclosed in double quotes in the XMP standard, but must be enclosed in single quotes in the widget description language. For example, the following shows how double quotes are used in the XMP headers for the description file, but single quotes are used in the widget descriptions themselves: ... slider(name:'$$$/CustomPanels/Widgets/opt2=Slider', horizontal: align_fill, height : 10, default_value:22, min_value:0, max_value:100, num_tick_marks:6, xmp_path: 'SliderValue', pointing:slider_point_right); ...

Custom Panel Widget Types

Some widget types are containers, and others are leaves. Many widgets share certain variables; in addition, some types have custom variables. Both common and custom variables are described in detail in “Widget Variables” on page 11. To have a dynamic value, a widget must be bound to an XMP property; see “Dynamic Value Variables” on page 19.

Container Widgets

Container widgets have no values or custom variables. The variables that apply to them are described in “Widget Variables” on page 11. Widget type Description group A simple container, with no visual representation. It exists to organize its widget children. Use nested groups to organize the alignments and layouts of the contained leaf widgets. XMP Custom Panels 7, Custom Panel Widget Types cluster A container whose children are enclosed in a graphic box, with a space left for the name of the box in the upper-left corner. ● Specify a margin of at least 15 to allow proper drawing of the graphic box. ● Specify a margin_top of at least 25 if the cluster has a name value set.

Leaf Widgets

The following table summarizes the leaf widget types. The XMP value type is the expected type of an XMP property bound to such a widget. The custom variables are described in “Type-Specific Leaf Widget Variables” on page 20. Widget type Description Custom variables edit_text A text editing field control. password (dynamic-value) You must provide name, seven_bit_ascii XMP value type: string xmp_namespace and xmp_path max_chars values for this widget to supply a restriction dynamic value. v_scroller For details, see “edit_text variables” on page 20 edit_number A numeric text editing field control. format (fixed-text or dynamic-value) Numeric values are formatted. This format_addin XMP value type: string subclass of edit_text inherits all min_value the edit_text custom properties max_value and behavior. precision You must provide name, xmp_namespace and xmp_path For details, see values for this widget to supply a “edit_number variables” dynamic value. on page 21 static_text A single-line, non-editable text field truncate (fixed-text or dynamic-value) control suitable for text display or to For details, see XMP value type: string label another field. “static_text variables” on You must provide name, page 23 xmp_namespace and xmp_path values for this widget to supply a dynamic value. 8 XMP Custom Panels, Custom Panel Widget Types Widget type Description Custom variables static_text_enum A multi-line non-editable text field items (fixed-text or dynamic-value) control. This subclass of For details, see XMP value type: string static_text inherits all the “static_text_enum static_text behavior. variables” on page 23 You must provide name, xmp_namespace and xmp_path values for this widget to supply a dynamic value. cat_container_edit_text An editable text field bound to an preserve_commas XMP value type: none XMP array of type bag or sequence. For details, see Each item in the array of XMP data is “cat_container_edit_text shown, with items separated by variables” on page 24 semicolons or commas (if preserve_commas is false). When the user clicks OK to close the dialog, the values are stored in sequence in the XMP array. popup A pop-up menu control. items (fixed-text or dynamic-value) The value of the selected popup no_checks XMP value type: integer menu item is stored in XMP when For details, see “popup the File Info dialog is closed. variables” on page 20 Setting the font parameter for a popup does not affect the font of the menu items, only the font of the popup menu title. You must provide name, xmp_namespace and xmp_path values for this widget to supply a dynamic value. XMP Custom Panels 9, Custom Panel Widget Types Widget type Description Custom variables mru_popup Most-recently-used popup menu, container_type (dynamic-value) bound to a specific XMP property. For details, see XMP value type: none You must provide name, “mru_popup variables” xmp_namespace and xmp_path on page 24 values for this widget to supply the dynamic values. If this widget is in a custom panel, when the user clicks OK to close the dialog, the application saves the 10 most recently used values for the bound XMP property. These values are then available in this popup menu next time the dialog is opened. Choosing an item from the MRU menu changes the bound property’s value; any other widgets bound that property are also updated. NOTE: On Mac OS, set the property no_checks to false to ensure the proper appearance. check_box A check box control. The value of a initial_value (fixed-text or dynamic-value) dynamic-value check box is true or For details, see XMP value type: boolean false, reflecting whether it is “check_box variables” on checked. page 23 The label (name variable) for the check box is a localizable ZString. You must provide name, xmp_namespace and xmp_path values for this widget to supply a dynamic value. slider A slider control. min_value (dynamic-value) You must provide name, max_value XMP value type: integer xmp_namespace and xmp_path num_tick_marks values for this widget to supply a pointing dynamic value. For details, see “slider variables” on page 23 10 XMP Custom Panels, Widget Variables Widget type Description Custom variables separator A simple horizontal rule. none XMP value type: none Set the horizontal variable to align_fill to make the separator adjust itself to the width of your custom panel. picture An icon or image. none XMP value type: none

Widget Variables

WIdget properties are defined by special variables that control various aspects of the appearance and layout of the panel you are creating. Some variables can be used for all widgets, some apply only to container or leaf widgets, and some are specific to a particular type of widget.

Widget Variable Key-Value Pairs

Widget variables have two parts: the key and the value: ● The key is the identifier or name of the variable. The key is composed of 7-bit ASCII alphanumeric text, and cannot have any whitespace in it. ● The value has one of the following value types: integer A signed 32-bit number, with no delimiting characters. Negative values are not allowed. string A 7-bit ASCII string, enclosed in single quotation marks. zstring An Adobe-defined ZString, enclosed in single quotation marks. See “ZString” on page 25 for details of the format. enumeration A predefined set of constants, or named values, with no delimiting characters. Enumerated values are listed in the variable descriptions below. You cannot define custom enumerations or customize existing enumerated variable values. boolean One of the predefined values true or false. XMP Custom Panels 11, Widget Variables another The key of another variable. The value of this variable is linked to that of variable the variable specified as the value. The variable you are linking to must be previously defined in a containing scope. See Scoping for Linked Variable Values below. The key name of the linked variable is not delimited by any special characters. Note that a variable name used as a value looks like an enumerated value—be careful that you do not skip over a predefined enumeration by declaring a variable whose key is identical to the possible enumeration value.

Scoping for Linked Variable Values

Variables whose values are linked to other variables change value based on the scope they are in. This can be a bit confusing, so here is an example: outer_scope(myvar: 42, name: '$$$/Demo/Greeting=Hello!') { widget1(width: myvar); inner_scope(myvar: 21) { widget2(width: myvar); widget3(myvar: 11, width: myvar); widget4(width: 6); } widget5(width: myvar); } NOTE: These are not valid widget types, but are used only for illustration. In this example, the outer_scope widget has two variable, myvar and name. The initial value of myvar is 42. ● In the first leaf widget, widget1, the value of width is assigned the value of myvar, which at this point is 42, so the first widget is 42 pixels wide: The outer container contains a nested container, inner_scope, which redefines the variable myvar, setting it to the value 21. NOTE: The myvar defined by inner_scope is a new variable with the same name; it does no overwrite the myvar defined in outer_scope. ● The second leaf widget, widget2, is within the scope of inner_scope. It also assigns the value of width to the value of myvar. Within this scope, the value of myvar is 21, so the second widget is 21 pixels wide. ● The third leaf widget, widget3, defines its own myvar, gives it a value (11), and assigns width to myvar. The scope of this definition is the widget itself, so the third widget is 11 pixels wide. Because this is not a container widget, this scope affects only this widget, and the new myvar, with a value of 11, does not propogate any further. 12 XMP Custom Panels, Widget Variables ● The fourth leaf widget, widget4, sets the width directly, rather than linking it to myvar. The fourth widget is 6 pixels wide. At this point, inner_scope closes; the myvar defined in the inner_scope can no longer be referenced. ● The fifth widget, widget5, also assigns the value of width to the value of myvar. This widget is defined outside the scope of inner_scope, but is still within outer_scope. The myvar defined in outer_scope still has the value 42, so the fifth widget is 42 pixels wide. The resulting widgets have the following width values, all from their different sources: widget1: 42 pixels wide widget2: 21 pixels wide widget3: 11 pixels wide widget4: 6 pixels wide widget5: 42 pixels wide

General Widget Variables

These variables can apply to either container or leaf widgets. Some apply only to text widgets. Variable Description height Type: integer (default 0) The minimum height in pixels of the container or widget. The actual height depends on the horizontal and child_horizontal values as well. A container is always large enough to accomodate its contained widgets. width Type: integer (default 0) The minimum width in pixels of the container or widget. The actual width depends on the vertical and child_vertical values as well. A container is always large enough to accomodate its contained widgets. horizontal Type: enumeration align_left (default) align_center align_right align_fill The horizontal alignment of a container within the panel, or of a widget within its container, restricted to the area the container has designated for it. The align_fill value adjusts a widget’s width to fill the allowed area. This value, if set, overrides the container’s child_horizontal value. See also Widget Alignment Notes below. XMP Custom Panels 13, Widget Variables Variable Description vertical Type: enumeration align_top align_center (default) align_bottom align_fill The vertical alignment of a container within the panel, or of a widget within its container, restricted to the area the container has designated for it. The align_fill value adjusts a widget’s height to fill the allowed area. This value, if set, overrides the container’s child_vertical value. See also Widget Alignment Notes below. name Type: ZString For fixed-text widgets such as static_text or cluster, this value labels the widget. NOTE: Applies only to fixed-text widgets. Do not use this variable to change the value or text of the widget at run time. Use xmp_namespace and xmp_path to provide dynamic values. font Type: enumeration font_small font_small_right font_big (default) font_big_right Applies only to text widgets. Specifies the style (size, weight, and right- left alignment) of the displayed text. See also Text Alignment Notes below. locked Type: boolean or the value read_only_aware Optional. Default is false. When true, the widget is dimmed to indicate that it is read-only. For an editable text control, it is not editable, but the user can still select and copy its contents. When read_only_aware, the widget is dimmed only when the application’s ReadOnly flag is set. 14 XMP Custom Panels, Widget Variables Widget Alignment Notes ● A panel with that uses the various horizontal and vertical alignments might look like this: ● The align_fill value for horizontal or vertical adjusts the widget’s width or height to fill the allowed area. For example, if a widget is 100 pixels wide, and its container is 150 pixels wide (and uses “placement: place_column”), setting horizontal: align_fill makes the child widget’s width grow to 150 pixels. Text Alignment Notes ● To maintain colon alignment across multiple labels of text, use font alignment, (font:font_small_right or font:font_small_bold_right), rather than setting horizontal:align_right for the widget. ● If colon alignment is not desired, try setting label to false. ● To center text, you must set horizontal:align_center, as there is no centering value for font.

Container Widget Variables

These variables apply only to container widgets. Variable Description child_horizontal Type: enumeration align_left (default) align_center align_right align_fill The horizontal alignment of all children within the container that do not have an explicit horizontal value set. The align_fill value adjusts the horizontal space between children so that they fill the allowed area. XMP Custom Panels 15, Widget Variables Variable Description child_vertical Type: enumeration align_top align_center (default) align_bottom align_fill The vertical alignment of all children within the container that do not have an explicit vertical value set. The align_fill value adjusts the vertical space between children so that they fill the allowed area. margin Type: integer (default 0) Margins are the padding associated with a given container. A container’s children fit within the bounds of the margin padding and never encroach upon the margin: top m argin container item child item height left m argin right m argin child child item item bottom m argin width The margin value applies to all the margins for a given container (top, left, right and bottom). However, if margin_width is present it overrides margin for the left and right margin values. Further, if margin_left, margin_right, margin_top, margin_bottom is defined, it overrides both margin and margin_width in the given direction. 16 XMP Custom Panels, Widget Variables Variable Description placement Type: enumeration place_column (default) place_row Controls how the children of a container are laid out with respect to one another. ● place_row places the children of a container along a single row. ● place_column places the children in a column. The order of the children on placement is first-to-last in the definition, left-to-right for rows or top-to-bottom for columns. See also Container Size and Placement Notes below. reverse Type: The value rtl_aware Optional. If supplied, items are automatically realigned for left- to-right languages; that is the positions are reversed horizontally. spacing Type: integer (default 0) or enumeration gSpace (10 on Mac OS, 9 on Windows) gMediumSpace (10 on Mac OS, 8 on Windows) gLargeSpace (15 on Mac OS, 15 on Windows) The distance in pixels between children of this container. This does not affect the distance from the top of the container to the first child, nor the distance from the last child to the bottom of the container—those are set by the margin values. Container Size and Placement Notes ● The size of a container is not explicitly set in the Custom File Description file, but is calculated based on the margins and the widths, heights, and spacing of the children of the container. You can set the width or height of a container to the minimum dimension for that container, but it is made larger if needed. XMP Custom Panels 17, Widget Variables ● The placement value lays out the children of a container as a row or column. For example: w1w2w3w1w2w3To make multiple columns of widgets line up in a row with each other, you must nest the containers. For example: group(placement: place_row) { group(placement: place_column) { ...column of widgets 1-3 ... } group(placement: place_column) { ...column of widgets 4-6... } } w1 w4 w2 w5 w3 w6 18 XMP Custom Panels, Widget Variables

Dynamic-Value Leaf Widget Variables

These variables apply only to leaf widgets whose text alignment or values are determined at run time. Dynamic Text Variables Variable Description label Type: boolean When true, this text widget is considered a label of another widget, and is included in calculating colon alignment for labels. It is set to true by default for static_text widgets. When false, the widget is not included in colon-alignment calculations. Dynamic Value Variables For a widget’s value to change at run time, it must get the value from the XML Packet for which this File Info dialog is being loaded. You specify this using both xmp_namespace and xmp_path variables. The xmp_namespace variable is optional, and defaults to xap_ns_xap. For more information on the XMP namespaces, see the XMP—Extensible Metadata Framework document in the XMP SDK. Variable Description xmp_namespace Type: enumeration or string xap_ns_xap (default) xap_ns_rdf xap_ns_xap_g xap_ns_user xap_ns_xap_g_img xap_ns_meta xap_ns_xap_dyn xap_ns_aw xap_ns_xap_dyn_a xap_ns_st_dimensions xap_ns_xap_dyn_v xap_ns_st_resolution xap_ns_xap_t xap_ns_st_track_desc xap_ns_xap_t_pg xap_ns_st_font xap_ns_xap_rights xap_ns_st_resource_ref xap_ns_xap_mm xap_ns_st_version xap_ns_xap_s xap_ns_st_evebt xap_ns_xap_bj xap_ns_st_file_disposition xap_ns_pdf xap_ns_st_job xap_ns_dc xap_ns_st_right photoshop (string) The namespace containing the XMP property whose value the widget displays. XMP Custom Panels 19, Widget Variables Variable Description xmp_path Type: string The hard-coded path of the XMP property whose value the widget displays. You must convert all single-quote characters (') in the xmp_path value to hat characters ( )̂ . The File Info dialog converts them back when it retrieves the property value.

Type-Specific Leaf Widget Variables

These variables are defined only for widgets of specific types. popup variables items Type: ZString Required. A semicolon-delimited list of the items to appear in this popup menu. The first item in the list is selected by default. Each item in the list is a name followed by its keyphrase in curly brackets. This keyphrase must be a 7-bit ASCII alphanumeric value, and must not be localized. The keyphrase is the value stored in the XMP data if the menu item is selected. All names and keyphrases in the list must be unique. You can add a separator by using a dash (-) as a menu item. The separator does not have a keyphrase. For example: $$$/Sample/Menu/Items=First{keyOne};-;Second{keyTwo} A menu can contain any number of items and separators. no_checks Type: boolean Optional. Default is false. This option is available only on Mac OS 9 or X. When true, removes the checkmark column. When false, the column is present and a checkmark is drawn by the currently selected menu item. edit_text variables max_chars Type: integer Optional. Default is the maximum number of characters allowed for a text widget by the operating system. The maximum number of characters to be entered in the text control. If the user exceeds the maximum, the File Info dialog displays an alert message. 20 XMP Custom Panels, Widget Variables password Type: boolean Optional. Default is false. When true, the text control is a password field. Characters entered by the user are displayed as bullets (•). The cleartext is stored in the XMP property. restriction Type: enumeration optional recommended required not_restricted Optional. Default is not_restricted. ● When the value is optional or not_restricted, the dialog does not check the control’s value before closing. ● When the value is restricted or recommended, the user must enter information in the text control before closing the dialog. If the user clicks OK to close the dialog and no value is present, the dialog sends an error to the application, which can handle the error as desired. If you restrict an edit text field, you should prefix both the label of the field and the name of the panel with an asterisk (*). This convention is not is not enforced, but is highly recommended. seven_bit_ascii Type: boolean Optional. Default is false. When true, the text control value can have only 7-bit ASCII characters. v_scroller Type: boolean Optional. Default is false. When true, displays a vertical scroll bar when the height of the text becomes greater than the height of the widget. edit_number variables format Type: enumeration whole decimal fraction ration Optional. Default is whole. The numeric format in which to display the value. Regardless of the display format, the value is stored in the original XMP data format. XMP Custom Panels 21, Widget Variables format_addin Type: ZString Optional. Default is no prefix or suffix. A prefix or suffix to display with the value. For example, the following values specify a suffix of “s” and a prefix of “f”: format_addin: ‘$$$/format/tag=^0s’ format_addin: ‘$$$/format/tag=f^0’ max_value Type: numeric string Optional. Default is no maximum. A maximum value for input. This value must be specified as a string, not an integer. For example: max_value: '10' min_value Type: numeric string Optional. Default is no minimum. A minimum value for input. This value must be specified as a string, not an integer. For example: min_value: '3' precision Type: integer Optional. Default is 1. The number of points of precision for decimal numbers. This applies to both the decimal and fraction formats, as fractional values are stored as decimal. You can specify a precision without specifying minimum or maximum values. A precision of 0 is the same as using the whole number format. If min_value, max_value, and precision are specified using different precisions, the largest precision is applied. For example, when min_value = 0.01, max_value = 3.0, precision=1, and the user enters a value of 2, the field displays 2.00. The value is also stored with the largest precision, if any change is made. If the user does not modify the value, the original XMP value is not changed, regardless of how it is displayed. Example edit_number (format: decimal, precision: 1, format_addin: '$$$/format/tag=^0s', min_value: '0.1', max_value: '250.0'); ● If the user enters 2, it is displayed as 2.0s. ● If the user enters 2.25s, it is displayed as 2.3s. ● If the user enters -1, the following error message is shown and the value is displayed as 0.1s: "A number between 0.1 and 250.0 is required. Closest value inserted." 22 XMP Custom Panels, Widget Variables static_text variables truncate Type: boolean Optional. Default is false. When true, the text is truncated when it is too long to fit into the widget’s width. This can occur with either a static string value or with a dynamic value that is read from an XMP property. static_text_enum variables items Type: ZString Required. A semicolon-delimited list of the items to appear in this static text control. Each item is a name followed by its key phrase in curly brackets. The key phrase must be a 7-bit ASCII alphanumeric value, and must not be localized. This is the value stored in the XMP data. The key phrase value associated with each item must be unique. For example: static_text_enum (items: '$$$/Sample/Items=First{keyOne};Second{keyTwo}', xmp_namespace: photoshop, xmp_path: 'Sample'); check_box variables initial_value Type: boolean Optional. Default is false. When true, the check box control is checked when first displayed. slider variables min_value Type: integer Required. The minimum value of the slider control. num_tick_marks Type: integer Optional. Default is 0. This option is available only on Mac OS 9 or X, for a slider that points to tick marks. Specifies the number of tick marks to display. XMP Custom Panels 23, Widget Variables pointing Type: enumeration slider_point_none slider_point_up slider_point_down Optional. Default is slider_point_none. This option is available only on Mac OS 9 or X, for a slider that points to tick marks. Specifies the direction of the pointer. mru_popup variables container_type Type: enumeration single_value alt_struct bag_struct seq_struct Required. The type of the XMP property bound to this menu. mru_append Type: boolean Optional. Default is false. When true, appends the selected value to the XMP property. When false, replaces the XMP property with the selected value. cat_container_edit_text variables preserve_commas Type: boolean Optional. Default is true. When true, preserves commas in delimited text items. When false, treats commas a delimiting characters. 24 XMP Custom Panels, ZString

Z String

ZStrings are an Adobe convention for defining localization strings, and are used by File Info to assist in the localization process. All strings that are displayed to the user of a custom panel must be formatted as ZStrings. NOTE: Even if you are not interested in localizing your custom panel definition, you must provide ZStrings where they are required.

The ZString Format

The format of a ZString is: $$$/context_path/property=value $$$ The ZString marker is always required to identify a ZString and distinguish it from any other 8-bit ASCII string. contextpath The context path is a series of 7-bit ASCII character strings separated by the slash (/) character. You can use any strings you wish, except that no white space is allowed. The context (rather than the property name and value) distinguishes one ZString from another. For example, $$$/a/b/OK=OK is distinct from $$$/x/y/OK=OK, although both represent the text of an OK button. The context path also shows the context or usage of the ZString in a human-readable format. It is important to use a clear and descriptive context path to identify a property, as comments are not allowed in custom panel files. When localization is performed, the context path helps the localizers know the context of the value (that is, the string) which must be translated. It is very important that the context and path of each ZString be unique, even among different custom panels. If the context and path are not unique, you might end up with the wrong translation. XMP Custom Panels 25, Localization Dictionary Files property=value The last string in the context path is the property name, and is separated from the value by an equal sign (=). The string following the separator (=) is the UI string to use for this ZString. Everything up to the value is stripped off during the localization process. The value is the string displayed to the user, and this is the string that is translated according using any localization dictionary files that you provide. See “Localization Dictionary Files” on page 26. The value can contain special characters indicated by escape sequences, as shown in ZString Escape Sequences. It cannot contain a # character, which is always interpretted as an escape character. The value can contain an ampersand (&) character to indicate an accelerator key on Windows. Mac OS and Unix systems ignore this character.

ZString Examples

$$$/Adobe/Photoshop/Dialogs/XYZDialog/Buttons/OK=OK $$$/Adobe/ImageReady/Dialogs/ABCDialog/Buttons/OK=OK Notice that the context provides much more usage information than a simple property name and value: $$$/OK=OK

Localization Dictionary Files

Localization is the process of translating and otherwise manipulating an interface so that it looks as if it had been originally designed for a particular language. The File Info dialog for which you are writing your custom panel gives you the ability to localize the strings in your panel. The language of the dialog (and panel) is chosen by the application displaying the dialog. To localize you custom panel, you must provide a localization dictionary file for each language, in the same directory as your custom panel description file. The File Info dialog looks for all localization files appropriate to the application language. It uses the set of localization dictionaries to find translations for static ZString values in the panel. It performs the ZString translation when it loads each custom panel. NOTE: Widget values set by means of XMP metadata retrieval cannot be localized. Even if the value is a valid ZString, it is not localized; you will see the raw ZString for the value. To localize XMP metadata, use alt-by-lang containers in your XML; see the XMP SDK documentation for more information. If File Info finds any localization dictionary files in the directory that contains the custom panel definition, it loads the dictionary whose name ends with the locale-string of the language it is looking for, followed by .dat. 26 XMP Custom Panels, Localization Dictionary Files For example, for your custom panel deliverables you might distribute the following files: ● MyCustomPanelFile.xmp (the custom panel definition file) ● MyZStringDict_en-us.dat (United States English localization dictionary file) ● MyZStringDict_fr-fr.dat (French localization dictionary file) ● MyZStringDict_en-uk.dat (United Kingdom English localization dictionary file) ● MyZStringDict_ja-jp.dat (Japanese localization dictionary file) These localization dictionary files have no internal correlation to the related custom panel definition, and the part of the file name before the language code can be anything you choose. You can provide any number of dictionaries for each language. The File Info dialog loads only the dictionary file or files that correspond to the language of the application. For American English, for example, it loads any dictionary ending in “en- us.dat”; for French, any one ending in “fr-fr.dat”, and so on. If there are no localization dictionary files for a custom panel, or if none is found to match the application language, the File Info dialog displays the UI string found in the original ZString.

Localization Dictionary File Format

A localization dictionary file is a collection of ZStrings whose final string values are in the destination language (see “ZString” on page 25). The file must be a UTF-16 (double-byte) file with a UTF-16 byte-order marker (BOM) as the first character. The only things allowed on a line (after the first character) are ZStrings; no newline characters or comments are allowed. The ZStings in this file must all be enclosed with double quotes. The following text editor are recommended for creating these files: ● On Mac OS 9 you must use a third-party application which supports Unicode. ● On Mac OS X simply use TextEdit and make sure you save the file type as “Unicode” (versus UTF-8 or RTF). ● On Windows use Notepad, and be sure to save the file as type “Unicode.” NOTE: TextEdit and Notepad both have menu items that say Unicode and UTF-8 , rather than UTF-16 and UTF-8. You must use UTF-16, which corresponds to the Unicode menu item. The first two bytes of the file must be a byte order marker (BOM): ● 0xFEFF: MSB-first, or big-endian byte order ● 0xFFFE: LSB-first, or little-endian byte order The rest of the file is UTF-16 formatted text with the byte order in accordance to the byte order marker. XMP Custom Panels 27, Troubleshooting a Custom PanelNOTE: For programs like TextEdit on the Macintosh and Notepad on Windows, you do not have to enter the BOM (byte order marker) manually; saving the file as a UTF-16 Unicode file format implicitly adds it. The BOM is discussed here to assist those who do not have a Unicode-aware text editing utility available to them.

Matching ZStrings for Localization

The File Info dialog searches for a ZString translation in all localization dictionaries that have been loaded for the application’s language, not just in the dictionary for your custom panel. More than one localization dictionary can contain a particular ZString, or a dictionary can contain the same ZString more than once. If the File Info dialog finds more than one translation for a ZString in any combination of dictionaries, the last one found is used for the displayed value. ZStrings in your panel can have the same property name and value, as long as they are distinguished by the context. However, another panel might use the same property names, and even define the same contexts. It is particularly important to distinguish contexts sufficiently, as the same property name might be used by another custom panel, and found in another localization dictionary. If the context is not unique, there is no guarantee that the dictionary associated with your custom panel is the last loaded, and that your translation is therefore displayed.

Troubleshooting a Custom Panel

If your custom panel does not appear or does not behave as expected, here are a few issues to consider: ● Check that the localization and custom panel description files are in the proper directory locations. ● Check the file formats. Make sure the panel description file is 7-bit ASCII (single-byte) and the ZString dictionary files are double-byte with a Unicode BOM as the first two bytes of the file. ● Check whether two or more widgets are editing the same XMP property. ● Check the xmp_path and xmp_namespace property values. Try removing numbers and other non-alphanumeric characters from your namespaces and paths to get the values to be retained. Some characters invalidate these paths. ● Check the syntax of the custom panel description. No automatic syntax checking is provided. 28 XMP Custom Panels, Additional Documentation

Additional Documentation

For more information about the XMP format and syntax, see the following documents, which are available as part of the XMP SDK: ● XMP Overview: an overview of how XMP works and how to use it. ● XMP—Extensible Metadata Framework: a complete reference for the XMP specification. XMP Custom Panels 29, Additional Documentation 30 XMP Custom Panels,

Sample Custom Panels Overview of Samples

These sample Custom Panel description files illustrate how to achieve various effects. ● Example 1: All Widgets ● Example 2: Document Description Metadata Check the SDK installation for these and other samples.

Sample Custom Panel Description Files Example 1: All Widgets

This example contains one of each kind of widget, illustrating their variable assignments. The code can be found in the file CustomPanel_allWidgets.txt. group(placement: place_column, spacing: gLargeSpace, horizontal: align_fill, vertical: align_top) { cluster(name: '$$$/CustomPanels/Widgets/widgetName=check box, slider, progress bar', placement: place_column, spacing: gSpace, margin_height:10, horizontal: align_center, vertical: align_top, width : 500, height : 100, child_vertical: align_top) { check_box(name:'$$$/CustomPanels/Widgets/opt1=Check box', initial_value:true, margin_width : 10); slider(name:'$$$/CustomPanels/Widgets/opt2=Slider', horizontal: align_fill, height : 10, default_value:22, min_value:0, max_value:100, num_tick_marks:6, xmp_path: 'SliderValue', pointing:slider_point_right); } cluster(name: '$$$/CustomPanels/Widgets/widgetName=static text, edit text, cat_container text',placement: place_column, spacing: gSpace, margin_height:10, horizontal: align_center, width : 400, height : 100, child_vertical: align_bottom) { XMP Custom Panels 31,

Sample Custom Panels

Sample Custom Panel Description Files static_text(name: '$$$/CustomPanels/Widgets/static_text=Static text:', font: font_small_bold_right, vertical: align_top); edit_text(horizontal: align_fill, font: font_small, xmp_path: 'Title', vertical: align_top); cat_container_edit_text(horizontal: align_fill, height: 54, xmp_path: 'Keywords', v_scroller: true); } cluster (name: '$$$/CustomPanels/Widgets/widgetName=popup,most-recently-used popup,separator', placement: place_column, spacing: gSpace, horizontal: align_center, margin_height:10, width : 300, height : 100, child_vertical: align_center) { mru_popup(xmp_path: 'Authors', container_type: seq_struct, no_check: true, vertical: align_top, mru_append: true); separator(horizontal: align_fill); popup(items: '$$$/CustomPanels/Widgets/Language/PopupItems= Popup 1{1}; Popup 2{2}; Popup 3{3}', xmp_path: 'foo'); } }

Example 2: Document Description Metadata

This example defines a panel that shows the pre-defined Description namespace. The panel contains a set of controls bound to all of the document metadata properties in that namespace. The code can be found in the file Description.txt. group(placement: place_column, spacing: gSpace, horizontal: align_fill, vertical: align_top) { group(placement: place_row, spacing: gSpace, horizontal: align_fill, reverse: rtl_aware) { static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/Title=&Document Title:', vertical: align_center, font: font_big_right); edit_text(horizontal: align_fill, xmp_path: 'Title', container_type: alt_struct); mru_popup(xmp_path: 'Title', container_type: alt_struct, no_check: true, vertical: align_top); } group(placement: place_row, spacing: gSpace, horizontal: align_fill, reverse: rtl_aware) 32 XMP Custom Panels,

Sample Custom Panels

Sample Custom Panel Description Files { static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/Author=&Author:', vertical: align_center, font: font_big_right); cat_container_edit_text(horizontal: align_fill, xmp_path: 'Authors', container_type: seq_struct, preserve_commas: true); mru_popup(xmp_path: 'Authors', container_type: seq_struct, no_check: true, vertical: align_top, mru_append: true); } group(placement: place_row, spacing: gSpace, horizontal: align_fill, reverse: rtl_aware) { static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/Description=De&scription:', vertical: align_top, font: font_big_right); edit_text(horizontal: align_fill, height: 54, xmp_path: 'Description', container_type: alt_struct, v_scroller: true); mru_popup(xmp_path: 'Description', container_type: alt_struct, no_check: true, vertical: align_top); } group(placement: place_row, spacing: gSpace, horizontal: align_fill, reverse: rtl_aware) { static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/DescriptionWriter= D&escription Writer:', vertical: align_center, font: font_big_right); edit_text(horizontal: align_fill, xmp_namespace: photoshop, xmp_path: 'CaptionWriter'); mru_popup(xmp_namespace: photoshop, xmp_path: 'CaptionWriter', no_check: true, vertical: align_top); } group(placement: place_row, spacing: gSpace, horizontal: align_fill, reverse: rtl_aware) { static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/Keywords=Ke&ywords:', vertical: align_top, vertical: align_top, font: font_big_right); group(placement: place_column, spacing: gSpace, horizontal: align_fill) { cat_container_edit_text(horizontal: align_fill, height: 54, xmp_path: 'Keywords', container_type: bag_struct, v_scroller: true); group(placement: place_row, spacing: gSpace, horizontal: align_fill) { icon(builtin_icon:builtin_icon_alert, width: 20, height: 20); static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/KeywordsHint= Commas can be used to separate keywords', vertical: align_center, horizontal: align_fill); } XMP Custom Panels 33,

Sample Custom Panels

Sample Custom Panel Description Files } mru_popup(xmp_path: 'Keywords', container_type: bag_struct, no_check: true, vertical: align_top, mru_append: true); } separator(horizontal: align_fill); group(placement: place_row, spacing: gSpace, horizontal: align_fill, reverse: rtl_aware) { static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/CopyrightState= &Copyright Status:', vertical: align_center, font: font_big_right); popup(items: '$$$/AWS/FileInfoLib/Panels/Description/CopyrightPopupItems= Unknown{};Copyrighted{True};Public Domain{False}', xmp_namespace: xap_ns_xap_rights, xmp_path: 'Marked'); } group(placement: place_row, spacing: gSpace, horizontal: align_fill, reverse: rtl_aware) { static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/CopyrightNotice= C&opyright Notice:', vertical: align_top, font: font_big_right); edit_text(horizontal: align_fill, height: 54, xmp_namespace: xap_ns_xap_rights, xmp_path: 'Copyright', container_type: alt_struct, v_scroller: true); mru_popup(xmp_namespace: xap_ns_xap_rights, xmp_path: 'Copyright', container_type: alt_struct, no_check: true, vertical: align_top); } group(placement: place_column, spacing: gSpace, horizontal: align_fill, vertical: align_top) { group(placement: place_row, spacing: gSpace, horizontal: align_fill, reverse: rtl_aware) { static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/CopyrightInfoURL= Copyright Info URL:', vertical: align_top, font: font_big_right); group(placement: place_column, spacing: gSpace, horizontal: align_fill) { edit_text(horizontal: align_fill, xmp_namespace: xap_ns_xap_rights, xmp_path: 'WebStatement'); button(name: '$$$/AWS/FileInfoLib/Panels/Description/GoToURL= Go To URL...', vertical: align_bottom, horizontal: align_right, label: false); } 34 XMP Custom Panels,

Sample Custom Panels

Sample Custom Panel Description Files mru_popup(xmp_namespace: xap_ns_xap_rights, xmp_path: 'WebStatement', no_check: true, vertical: align_top, visible: false); } } separator(horizontal: align_fill); group(placement: place_row, spacing: gSpace, horizontal: align_fill) { group(placement: place_row, spacing: gSpace, horizontal: align_fill, reverse: rtl_aware) { group(placement: place_column, spacing: 5) { static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/DateCreated=Created:', label: false, horizontal: align_right, vertical: align_top, font: font_big_right); static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/DateModified=Modified:', label: false, horizontal: align_right, vertical: align_bottom, font: font_big_right); } group(placement: place_column, spacing: 5, horizontal: align_fill) { static_text(name: '$$$/AWS/FileInfoLib/Panels/IntentionallyBlank=', xmp_path: 'CreateDate', horizontal: align_fill, vertical: align_top, truncate: true); static_text(name: '$$$/AWS/FileInfoLib/Panels/IntentionallyBlank=', xmp_path: 'ModifyDate', horizontal: align_fill, vertical: align_bottom, truncate: true); } } group(placement: place_row, spacing: gSpace, horizontal: align_fill, reverse: rtl_aware) { group(placement: place_column, spacing: 5) { static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/CreatorApplication= Application:', label: false, horizontal: align_right, vertical: align_top, font: font_big_right); static_text(name: '$$$/AWS/FileInfoLib/Panels/Description/Format=Format:', label: false, horizontal: align_right, vertical: align_bottom, font: font_big_right); } group(placement: place_column, spacing: 5, horizontal: align_fill) XMP Custom Panels 35,

Sample Custom Panels

Sample Custom Panel Description Files { static_text(name: '$$$/AWS/FileInfoLib/Panels/IntentionallyBlank=', xmp_path: 'CreatorTool', horizontal: align_fill, vertical: align_top, truncate: true); <> static_text(name: '$$$/AWS/FileInfoLib/Panels/IntentionallyBlank=', xmp_path: 'Format', horizontal: align_fill, vertical: align_bottom, truncate: true); } } } }
36 XMP Custom Panels,

ZString Escape Sequences

Strings used in ZString values must use escape sequences to indicate certain characters. The following tables summarize the required escape sequences.

Backslash Escape Sequences

To include the backslash character itself in a string, use the sequence “\\”. Sequence Glyph Unicode Unicode name Alternate Unicode names \ "" U+0022 QUOTATION MARK APL quote \n [LF] U+000A LINE FEED \r [CR] U+000D CARRIAGE RETURN \t [HT] U+0009 HORIZONTAL

TABULATION

\b [BS] U+0008 BACK SPACE

Hat Escape Sequences

To include the hat character itself in a string, use the sequence “^^”. Sequence Glyph Unicode Unicode name Alternate Unicode names ^Q " U+0022 QUOTATION MARK APL quote ^[ “ U+201C LEFT DOUBLE QUOTATION DOUBLE TURNED COMMA QUOTATION MARK MARK ^] ” U+201D RIGHT DOUBLE DOUBLE COMMA QUOTATOIN MARK QUOTATION MARK ^{ ‘ U+2018 LEFT SINGLE QUOTATION SINGLE TURNED COMMA QUOTATION MARK MARK ^} ’ U+2019 RIGHT SINGLE QUOTATION SINGLE COMMA QUOTATION MARK

MARK

^C © U+00A9 COPYRIGHT SIGN XMP Custom Panels 37,

ZString Escape Sequences

Sequence Glyph Unicode Unicode name Alternate Unicode names ^R ® U+00AE REGISTERED SIGN REGISTERED TRADE MARK SIGN ^T ™ U+2122 TRADEMARK SIGN ^D ° U+00B0 DEGREE SIGN ^B • U+2022 BULLET black small circle ^# ? U+2318 PLACE OF INTEREST SIGN COMMAND KEY ^! ¬ U+00AC NOT SIGN ^I ? U+2206 INCREMENT Laplace operator forward difference ^S ? U+2211 N-ARY SUMMATION summation sign

ISO-based Escape Sequences

Sequence Glyph Unicode Description #{endl} *1 *1 Platform dependent end-of-line This is translated into CR+LF on Windows, CR on MacOS Carbon and LF on Unix. #{tab} [HT] U+0009 horizontal tabulation #{cr} [CR] U+000D carriage return #{lf } [LF] U+000A line feed #{nbsp} U+00A0 no-break space = non-breaking space #{iexcl} ¡ U+00A1 inverted exclamation mark #{cent} ¢ U+00A2 cent sign #{pound} £ U+00A3 pound sign #{curren} ¤ U+00A4 currency sign #{yen} ¥ U+00A5 yen sign = yuan sign #{brvbar} ¦ U+00A6 broken bar = broken vertical bar #{sect} § U+00A7 section sign #{uml} ¨ U+00A8 diaeresis = spacing diaeresis #{copy} © U+00A9 copyright sign #{ordf } ª U+00AA feminine ordinal indicator 38 XMP Custom Panels,

ZString Escape Sequences

Sequence Glyph Unicode Description #{laquo} « U+00AB left-pointing double angle quotation mark #{not} ¬ U+00AC not sign #{shy} - U+00AD soft hyphen = discretionary hyphen #{reg} ® U+00AE registered sign = registered trade mark sign #{macr} ¯ U+00AF macron = spacing macron = overline #{deg} ° U+00B0 degree sign #{plusmn} ± U+00B1 plus-minus sign = plus-or-minus sign #{sup2} ² U+00B2 superscript two = superscript digit two #{sup3} ³ U+00B3 superscript three = superscript digit three #{acute} ´ U+00B4 acute accent = spacing acute #{micro} µ U+00B5 micro sign #{para} ¶ U+00B6 pilcrow sign = paragraph sign #{middot} · U+00B7 middle dot = Georgian comma #{cedil} ¸ U+00B8 cedilla = spacing cedilla #{sup1} ¹ U+00B9 superscript one = superscript digit one #{ordm} º U+00BA masculine ordinal indicator #{raquo} » U+00BB right-pointing double angle quotation mark #{frac14} ¼ U+00BC vulgar fraction one quarter #{frac12} ½ U+00BD vulgar fraction one half #{frac34} ¾ U+00BE vulgar fraction three quarters #{iquest} ¿ U+00BF inverted question mark #{Agrave} À U+00C0 latin capital letter A with grave = latin capital letter A grave #{Aacute} Á U+00C1 latin capital letter A with acute #{Acirc} Â U+00C2 latin capital letter A with circumflex #{Atilde} Ã U+00C3 latin capital letter A with tilde #{Auml} Ä U+00C4 latin capital letter A with diaeresis #{Aring} Å U+00C5 latin capital letter A with ring above = latin capital letter A ring #{AElig} Æ U+00C6 latin capital letter AE = latin capital ligature AE XMP Custom Panels 39,

ZString Escape Sequences

Sequence Glyph Unicode Description #{Ccedil} Ç U+00C7 latin capital letter C with cedilla #{Egrave} È U+00C8 latin capital letter E with grave #{Eacute} É U+00C9 latin capital letter E with acute #{Ecirc} Ê U+00CA latin capital letter E with circumflex #{Euml} Ë U+00CB latin capital letter E with diaeresis #{Igrave} Ì U+00CC latin capital letter I with grave #{Iacute} Í U+00CD latin capital letter I with acute #{Icirc} Î U+00CE latin capital letter I with circumflex #{Iuml} Ï U+00CF latin capital letter I with diaeresis #{ETH} Ð U+00D0 latin capital letter ETH #{Ntilde} Ñ U+00D1 latin capital letter N with tilde #{Ograve} Ò U+00D2 latin capital letter O with grave #{Oacute} Ó U+00D3 latin capital letter O with acute #{Ocirc} Ô U+00D4 latin capital letter O with circumflex #{Otilde} Õ U+00D5 latin capital letter O with tilde #{Ouml} Ö U+00D6 latin capital letter O with diaeresis #{times} × U+00D7 multiplication sign #{Oslash} Ø U+00D8 latin capital letter O with stroke = latin capital letter O slash #{Ugrave} Ù U+00D9 latin capital letter U with grave #{Uacute} Ú U+00DA latin capital letter U with acute #{Ucirc} Û U+00DB latin capital letter U with circumflex #{Uuml} Ü U+00DC latin capital letter U with diaeresis #{Yacute} Ý U+00DD latin capital letter Y with acute #{THORN} Þ U+00DE latin capital letter THORN #{szlig} ß U+00DF latin small letter sharp s = ess-zed #{agrave} à U+00E0 latin small letter a with grave = latin small letter a grave #{aacute} á U+00E1 latin small letter a with acute #{acirc} â U+00E2 latin small letter a with circumflex 40 XMP Custom Panels,

ZString Escape Sequences

Sequence Glyph Unicode Description #{atilde} ã U+00E3 latin small letter a with tilde #{auml} ä U+00E4 latin small letter a with diaeresis #{aring} å U+00E5 latin small letter a with ring above = latin small letter a ring #{aelig} æ U+00E6 latin small letter ae = latin small ligature ae #{ccedil} ç U+00E7 latin small letter c with cedilla #{egrave} è U+00E8 latin small letter e with grave #{eacute} é U+00E9 latin small letter e with acute #{ecirc} ê U+00EA latin small letter e with circumflex #{euml} ë U+00EB latin small letter e with diaeresis #{igrave} ì U+00EC latin small letter i with grave #{iacute} í U+00ED latin small letter i with acute #{icirc} î U+00EE latin small letter i with circumflex #{iuml} ï U+00EF latin small letter i with diaeresis #{eth} ð U+00F0 latin small letter eth #{ntilde} ñ U+00F1 latin small letter n with tilde #{ograve} ò U+00F2 latin small letter o with grave #{oacute} ó U+00F3 latin small letter o with acute #{ocirc} ô U+00F4 latin small letter o with circumflex #{otilde} õ U+00F5 latin small letter o with tilde #{ouml} ö U+00F6 latin small letter o with diaeresis #{divide} ÷ U+00F7 division sign #{oslash} ø U+00F8 latin small letter o with stroke, = latin small letter o slash #{ugrave} ù U+00F9 latin small letter u with grave #{uacute} ú U+00FA latin small letter u with acute #{ucirc} û U+00FB latin small letter u with circumflex #{uuml} ü U+00FC latin small letter u with diaeresis #{yacute} ý U+00FD latin small letter y with acute #{thorn} þ U+00FE latin small letter thorn XMP Custom Panels 41,

ZString Escape Sequences

Sequence Glyph Unicode Description #{yuml} ÿ U+00FF latin small letter y with diaeresis #{quot} "U+0022 quotation mark = APL quote #{amp} & U+0026 ampersand #{lt} < U+003C less-than sign #{gt} > U+003E greater-than sign #{OElig} Œ U+0152 latin capital ligature OE #{oelig} œ U+0153 latin small ligature oe #{Scaron} Š U+0160 latin capital letter S with caron #{scaron} š U+0161 latin small letter s with caron #{Yuml} Ÿ U+0178 latin capital letter Y with diaeresis #{circ} ˆ U+02C6 modifier letter circumflex accent #{tilde} ˜ U+02DC small tilde #{ensp} U+2002 en space #{emsp} U+2003 em space #{thinsp} ? U+2009 thin space #{zwnj} ? U+200C zero width non-joiner #{zwj} ? U+200D zero width joiner #{lrm} ? U+200E left-to-right mark #{rlm} ? U+200F right-to-left mark #{ndash} – U+2013 en dash #{mdash} — U+2014 em dash #{lsquo} ‘ U+2018 left single quotation mark #{rsquo} ’ U+2019 right single quotation mark #{sbquo} ‚ U+201A single low-9 quotation mark #{ldquo} “ U+201C left double quotation mark #{rdquo} ” U+201D right double quotation mark #{bdquo} „ U+201E double low-9 quotation mark #{dagger} † U+2020 dagger #{Dagger} ‡ U+2021 double dagger 42 XMP Custom Panels,

ZString Escape Sequences

Sequence Glyph Unicode Description #{permil} ‰ U+2030 per mille sign #{lsaquo} ‹ U+2039 single left-pointing angle quotation mark #{rsaquo} › U+203A single right-pointing angle quotation mark #{euro} € U+20AC euro sign XMP Custom Panels 43, ZString Escape Sequences 44 XMP Custom Panels]
15

Similar documents

Beginning ASP.NET 1.1 with Visual C#® .NET 2003 Chris Ullman John Kauffman Chris Hart Dave Sussman Daniel Maharry Wiley Publishing, Inc.
Beginning ASP.NET 1.1 with Visual C#® .NET 2003 Chris Ullman John Kauffman Chris Hart Dave Sussman Daniel Maharry Wiley Publishing, Inc. Beginning ASP.NET 1.1 with Visual C#® .NET 2003 Beginning ASP.NET 1.1 with Visual C#® .NET 2003 Chris Ullman John Kauffman Chris Hart Dave Sussman Daniel Maharry W
Powered by TCPDF (www.tcpdf.org)
Powered by TCPDF (www.tcpdf.org)
XMPP: The Definitive Guide
XMPP: The Definitive Guide XMPP: The Definitive Guide Building Real-Time Applications with Jabber Technologies Peter Saint-Andre, Kevin Smith, and Remko Tronçon Beijing • Cambridge • Farnham • Köln • Sebastopol • Taipei • Tokyo XMPP: The Definitive Guide by Peter Saint-Andre, Kevin Smith, and Remko
Writ for Habeas Corpus
Dave Thomas c/o 45 Main Anytown, Utah state non domestic united States of America without the UNITED STATES/STATE OF UTAH Fifth District Court sitting in Washington and Iron county, Utah state Writ for Habeas Corpus In re: Restraint of Liberty by James L. Jones and Bill Smith, d/b/a JUDGE JONES and
OPTIMIZING THE DESKTOP USING SUN™ XVM VIRTUALBOX Ulrich Möller, VirtualBox Software Team Sun BluePrints™ Online
OPTIMIZING THE DESKTOP USING SUN™ XVM VIRTUALBOX Ulrich Möller, VirtualBox Software Team Sun BluePrints™ Online Part No 820-7121-10 Revision 1.0, 11/25/08 Sun Microsystems, Inc. Table of Contents Optimizing the Desktop Using Sun™ xVM VirtualBox ..1 Sun xVM VirtualBox and Desktop Virtualization .1 Ea
MICROSOFT WEB SERVICES ENHANCEMENTS 2.0 SP3 RUNTIME
MICROSOFT WEB SERVICES ENHANCEMENTS 2.0 SP3 RUNTIME END-USER LICENSE AGREEMENT FOR MICROSOFT SOFTWARE IMPORTANT—READ CAREFULLY: This End-User License Agreement (“EULA”) is a legal agreement between you (either an individual or a single entity) and Microsoft Corporation (“Microsoft”) for the Microsof
ProductK009166 DATA Trailer Information Module (TIM G2)
ProductK009166 DATA Trailer Information Module (TIM G2) Function The Trailer Information Module (TIM G2) is a trailer mounted display for direct reading of diagnostic and trailer related information. It may also be used as a hand held diagnostic tool. It enables access to information available withi
Yammer Starter
Yammer Starter A concise, enjoyable look at using Yammer, the secure, fun-to-use private social network for your company, now from Microsoft Ralph Roberts BIRMINGHAM - MUMBAI Yammer Starter Copyright © 2012 Packt Publishing All rights reserved. No part of this book may be reproduced, stored in a ret
You Taste Like Sugar
You Taste Like Sugar Count: 64 Wall: 4 Level: Improver Choreographer: Wil Bos – Dec. 2015 Music: "Expandable Time" by Danny Vera (album: Expandable Time) 120 bpm Intro: 16 counts S1: Dorothy x2, Pivot ½ L, ¼ L Chassé 1-2& RF step right forward, LF lock behind, RF step forward 3-4& LF step left forwa
XZ Utils
XZ Utils XZ Utils is free general-purpose data compression software with high compression ratio. XZ Utils were written for POSIX-like systems, but also work on some not-so-POSIX systems. XZ Utils are the successor to LZMA Utils. The core of the XZ Utils compression code is based on LZMA SDK, but it
www.it-ebooks.info
Yii Rapid Application Development Hotsh t Become a RAD hotshot with Yii, the world's most popular PHP framework Lauren J. O'Meara James R. Hamilton III BIRMINGHAM - MUMBAI Yii Rapid Application Development Hotsh t Copyright © 2012 Packt Publishing All rights reserved. No part of this book may be rep
www.it-ebooks.info
01_598007 ffirs.qxd 8/25/05 8:35 PM Page iii Yahoo!® SiteBuilder FOR ‰ DUMmIES Richard Wagner 01_598007 ffirs.qxd 8/25/05 8:35 PM Page ii 01_598007 ffirs.qxd 8/25/05 8:35 PM Page i Yahoo!® SiteBuilder FOR ‰ DUMmIES 01_598007 ffirs.qxd 8/25/05 8:35 PM Page ii 01_598007 ffirs.qxd 8/25/05 8:35 PM Page
Mark Lauren is a certified Military Physical Training Specialist, Special Op- erations Combat Controller, triathlete, and champion Thai boxer. He has ef-
Mark Lauren is a certified Military Physical Training Specialist, Special Op- erations Combat Controller, triathlete, and champion Thai boxer. He has ef- fectively prepared nearly a thousand trainees for the extreme demands of the most elite levels of the Special Operations community. As an experien
Ilyushin 76 T
About the aircraft: This aircraft is built to be as close to the real thing both in performance and look. The performance was designed using the original Pilot’s Handbook which can be found at http://www.il76.boom.ru. The real aircraft is still handles a little better at high weights which I am not
InterBase 6 Getting Started Installation and Migration Borland/INPRISE
InterBase 6 Getting Started Installation and Migration Borland/INPRISE 100 Enterprise Way, Scotts Valley, CA 95066 http://www.interbase.com November 12, 1999 (D:\60DocSet\Doc\GetStart\GetStartedTitle.fm5) Inprise/Borland may have patents and/or pending patent applications covering subject matter in
The Virevent is both complex and simple to make. Center frequency shift with change in wires
The Virevent is both complex and simple to make. Center frequency shift with change in wires diameter, so dimensions cannot be a simple Freq./x.xx equation. There's a mathematical equation that can take wire diameter into account, but the goal of this tutorial is to be simple. Let's use 0.8mm copper
䄀. 䅀䍐䏐䏐䎀䏐䌰. ActiveX 䍀䎰䓰 䏰䐀䏠䑀䍐䐐䐐䎀䏠䏐䌀䎰䏠䌠 ActiveX 䍀䎰䓰 䏰䐀䏠䑀䍐䐐䐐䎀䏠䏐䌀䎰䏠䌠 䈐䏠䍀䍐䐀䍠䌀䏐䎀䍐 䇰䐀䍐䍀䎀䐐䎰䏠䌠䎀䍐 䄠䒰䐀䌀䍠䍐䏐䎀䍐 䏰䐀䎀䍰䏐䌀䐠䍐䎰䓀䏐䏠䐐䐠䎀 䄠䌠䍐䍀䍐䏐䎀䍐 䇠 䎠䏐䎀䌰䍐 䅀䎰䓰 䎠䏠䌰䏠 䏐䌀䏰䎀䐐䌀䏐䌀 䓐䐠䌀 䎠䏐䎀䌰䌀?
䄀. 䅀䍐䏐䏐䎀䏐䌰. ActiveX 䍀䎰䓰 䏰䐀䏠䑀䍐䐐䐐䎀䏠䏐䌀䎰䏠䌠 ActiveX 䍀䎰䓰 䏰䐀䏠䑀䍐䐐䐐䎀䏠䏐䌀䎰䏠䌠 䈐䏠䍀䍐䐀䍠䌀䏐䎀䍐 䇰䐀䍐䍀䎀䐐䎰䏠䌠䎀䍐 䄠䒰䐀䌀䍠䍐䏐䎀䍐 䏰䐀䎀䍰䏐䌀䐠䍐䎰䓀䏐䏠䐐䐠䎀 䄠䌠䍐䍀䍐䏐䎀䍐 䇠 䎠䏐䎀䌰䍐 䅀䎰䓰 䎠䏠䌰䏠 䏐䌀䏰䎀䐐䌀䏐䌀 䓐䐠䌀 䎠䏐䎀䌰䌀? 䇐䌀䑰䌀䎰䓀䏐䒰䍐 䐠䐀䍐䌐䏠䌠䌀䏐䎀䓰 䈀䌀䌐䏠䐠䌀 䐐 䐐䏠䏰䐀䏠䌠䏠䍀䎀䐠䍐䎰䓀䏐䒰䏀 CD-ROM 䈐䐠䎀䎰䓀 䏰䐀䏠䌰䐀䌀䏀䏀䎀䐀䏠䌠䌀䏐䎀䓰 䇐䍐䎠䏠䐠䏠䐀䒰䍐 䏠䌐䒐䎀䍐 䍰䌀䏀䍐䑰䌀䏐䎀䓰 䉰䌀䐐䐠䓀 I. 䄠䐐䐠䐰䏰䎰䍐䏐䎀䍐 䄰䎰䌀䌠䌀 1 «䆠䏠䏀䏰䏠䏐䍐
O6qecreo c orpaHil.{eHFofi oTBercrBeH4gqTbq (KoHca4rrFroPar fpvnna l,lHlgaqnrr,rp
O6qecreo c orpaHil.{eHFofi oTBercrBeH4gqTbq (KoHca4rrFroPar fpvnna l,lHlgaqnrr,rp Aapqc: 9441:12. r.9Mcf. v+. Fvnu,eap ApxrrerrgpoBr a,4.,nou,1, l. rqn.8 (381) 248-71-07. flonyvarenu UHH 5507248880 Knn550701 001 p/cver Ne 4070281 0004000009327 OOO (Kf Hnrencnrn> 6anr nonyvarenn 514K 045004816 Cu6rpc
Amazing Sex
Amazing Sex by Sari Locker A Division of Macmillan General Reference A Pearson Education Macmillan Company 1633 Broadway, New York, NY 10019-6785 Page ii Copyright © 1999 by Sari Locker All rights reserved. No part of this book shall be reproduced, stored in a retrieval system, or transmitted by any
Radlagersätze Lenkungsteile Stoßdämpfer Bremssysteme Wheel Bearing Kits Steering and Suspension Parts Shock Absorbers Brake Systems Kits de Roulements de Roues Pièces de Direction et Suspension Amortisseurs Systèmes de Freinage
Radlagersätze Lenkungsteile Stoßdämpfer Bremssysteme Wheel Bearing Kits Steering and Suspension Parts Shock Absorbers Brake Systems Kits de Roulements de Roues Pièces de Direction et Suspension Amortisseurs Systèmes de Freinage Zestawy łożyskowe do kół Elementy zawieszenia Amortyzatory Systemy hamul
BABOTbr O ffiTIBHI,I HAPOIA,
BABOTbr O ffiTIBHI,I HAPOIA, EOJIETIIE BHtrMAHr{,fl METO,4AU PABOT.6I" (PZ nmoa,pa tr934. ao|a') * tr[a aanttootumertbH,oeo cnoea moeapuu+d Mao llae-lyua na II Bcenumaficrou czeade pa- 6ortux u npecrnb&Hctiufr 1engmamoe, cocnxoee- urc.u,ca s e. )Itgilt4euue npoauHyuu lleaucu e rlHldpe 1934 eo?a, lBa
Ta 6Au~a KaAop JiOCmu OC1-l061-lblX Coaep>Kauue
Ta 6Au~a KaAop JiOCmu OC1-l061-lblX Coaep>Kauue npooyKm numaHufl IIep6bte 6;uooa Kl1PHM 490 Xap.,0. ... 9 KapTocpeAbHaJJ 3aneKaHKa c MJJCOM ... 24 CBttHttHa He>KttpHM 355 y xa Vl3 AOCOOI ... 10 TeAJITttHa rrapHM ( ¢l1Ae) 158 Aecepmbt u 6btnettKa MoAO'IHbIH cyn c nep Ml1IUeAhJ0 ... 10 lJbIIIA5!Ta 6po
1 2 There is one musical contribution to The Dark Knight Rises that clearly demonstrates the amongst others- Hans sets creative goals for a project
There is one musical contribution to The Dark Knight Rises that clearly demonstrates the amongst others- Hans sets creative goals for a project higher than you ever thought possible or importance of Hans Zimmer as a creative collaborator. It explains why, eight years ago, as a first practical. He to
The MathWorks MATLAB® and Adobe® Photoshop® Read Me
The MathWorks MATLAB® and Adobe® Photoshop® Read Me The MATLAB files in this folder create a Photoshop Toolbox in MATLAB. This toolbox creates an easy to use workflow for scientist and researchers using MATLAB and Photoshop in combination. This is a set of MATLAB m files that expand MATLAB functions
И.В. орловская, Л.С. Самсонова, А.И. Скубриева Учебник английского языка ДЛЯ технических университетов и вузов Издание шестое, стереотипное Допущено Учебно-методическим объединением вузов
И.В. орловская, Л.С. Самсонова, А.И. Скубриева Учебник английского языка ДЛЯ технических университетов и вузов Издание шестое, стереотипное Допущено Учебно-методическим объединением вузов по машиностроительным и приборостроительным специальностям в качестве учебника для студентов технических универс
PROFORMA INVOICE
PROFORMA INVOICE Invoice No.:DG-RU0145 Date: 22 SEP, 2017 From: Changchun Weihong Dongguang Electronics Equipment Co., Ltd.(State-own 793 Factory) To: Address: No.215 Chuangxin Street High-Tech Saint Petersburg Factory Industrial Development Zone Changchun City Jilin Province 130012 P.R. CHINA TEL:
Министерство образования Республики Беларусь
Министерство образования Республики Беларусь УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ «ГРОДНЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМЕНИ ЯНКИ КУПАЛЫ» Учебное издание Калита Елена Владимировна Черниговская Анжелика Игоревна ENGLISH GRAMMAR IN PRACTICE Саввова Раиса Николаевна Карпюк Инна Владимировна ПРАКТИЧЕСКАЯ ГРАММАТИ
a NffArt flporo xol paccMorpeHlrr, o UeHKH H corrocraBneHr,r, 3afl BoK IPOTOKOJI J\t 37 (r,rrOfOBbII,I) l. 3arasqux 2. HannreuosaHrre H cfloco6 flpoBeAerrur 3aryrrKrr
..: AO . 2. HannreuosaHrre H cfloco6 flpoBeAerrur 3aryrrKrr CocrqsarerbHar 3aKynra Ha npaBo 3aKJrrorreHr{s AoroBopa noAprAa Ha BbrnonHeHr.re pa6or tro peMoHTy KpoBnr.r Ha3IiaHuu TexHr.rqecKr{x cnyx6 c noABiuIoM. 3. CneAenug o rpeAMere AoroBopa (c yrasaHrreM o6rervra BbrnoJrHfleMbrx pa6or), qeHe rr c
Piezoelectric Vibrating Gyroscopes (GYROSTARr) 1 Piezoelectric Vibrating Gyroscopes (GYROSTARr)
sales repres•e Tnthaisti vceast aolor gp rhoadsu cotn elyn tgyipniecearl ss pbeecfoifricea otirodnesr ibnegc. ause there is no space for detailed specifications. Therefore, please approve our product specifications or transact the approval sheet for product specifications before ordering. Piezoelect
Installation Back-UPS™ when the Back-UPS is switched Off. Connect a Wall Outletcomputer, monitor, and external disk or CD-ROM CS drive to these outlets.
Installation 1 Placement / Power 2 Connect Equipment 3 Connect the Phone Avoid placing the Back-UPS in: to the Back-UPS Line to Surge Protection ® • Direct sunlight The rear panel of the Back-UPS consists of the The telephone ports provide lightning surge • Excessive heat following elements: protect