US6639611B1 - System and method for efficient layout of a display table - Google Patents
System and method for efficient layout of a display table Download PDFInfo
- Publication number
- US6639611B1 US6639611B1 US09/461,896 US46189699A US6639611B1 US 6639611 B1 US6639611 B1 US 6639611B1 US 46189699 A US46189699 A US 46189699A US 6639611 B1 US6639611 B1 US 6639611B1
- Authority
- US
- United States
- Prior art keywords
- display table
- cell
- display
- column
- minimum
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/177—Editing, e.g. inserting or deleting of tables; using ruled lines
Definitions
- the present invention relates to the field of display tables, such as HTML tables. More particularly, the invention relates to a system and method for efficient layout of a display table.
- Display tables are commonly used in many types of software applications.
- a display table may comprise rows and columns that define cells.
- Each of the cells may comprise some type of cell content.
- HTML hypertext markup language
- many current web page documents include hypertext markup language (HTML) tables with cells that may include content such as text or images.
- word processor applications often enable authors to create tables for display in a document.
- Display tables are typically described in some format that a software application must process in order to display the table correctly.
- a markup language table may be described in a text format by various markup language tags that are processed and used to create data structures representing the table.
- Small footprint devices offer one example of an environment in which it is often necessary or desirable to pay particular attention to software efficiency.
- the field of “smart” small footprint devices is growing and changing rapidly.
- Small footprint devices include handheld computers, personal data assistants (PDAs), cellular phones, global positioning system (GPS) receivers, game consoles, set-top boxes, and many more such devices.
- Small footprint devices are becoming increasingly powerful and enabled to run software applications or services historically associated with general computing devices, such as desktop computers.
- Small footprint devices may have very strong resource constraints, such as the amount of memory and the processing power available. Thus, it is often necessary or desirable to design optimized software that performs well in the environment of a small footprint device. Providing an efficient layout method for a display table is one example of a software optimization that may significantly benefit small footprint device users. For example, many small footprint devices are now able to run web browser applications, which often process web pages comprising markup language tables, such as HTML tables, as described above.
- the problems outlined above may in large part be solved by a system and method for efficient layout of a display table, as described herein.
- a description of a table such as a markup language description
- the table description may be parsed and data structures representing the table description may be created.
- the table description data structures may then be “inspected”, in order to determine the possible size of the table.
- the process of table inspection may involve determining the minimum and maximum possible widths for each table cell, and then determining the minimum and maximum possible widths for each table column, based on the individual cell values.
- the minimum and maximum possible table widths may then be calculated from the possible table column widths.
- the table coordinates may then be “normalized”, which may involve converting relative table coordinates into absolute coordinates.
- FIG. 1 is a block diagram illustrating one embodiment of a system supporting a method for efficiently laying out a display table
- FIG. 2 is a flowchart diagram illustrating an overview of one embodiment of a layout method for a display table
- FIG. 3 is a flowchart diagram illustrating an overview of one embodiment of a process of performing display table inspection
- FIGS. 4-6 are flowchart diagrams illustrating one embodiment of a process of calculating the minimum and maximum possible column widths for a table
- FIG. 7 is an example of an HTML table comprising a column-spanning cell
- FIG. 8 is a flowchart diagram illustrating an overview of one embodiment of a process of performing display table apportioning
- FIG. 9 is a flowchart diagram illustrating one embodiment of a process of assigning a width to each column of a display table
- FIGS. 10 and 11 are flowchart diagrams illustrating one embodiment of a process of a height to each row of a display table
- FIG. 12 is an example of a nested HTML table
- FIG. 13 illustrates an example of resulting method invocations when an HTML table with one cell is layed out
- FIG. 14 illustrates an example of resulting method invocations when an HTML table with one cell that includes a nested table with one cell is layed out.
- FIG. 1 A first figure.
- FIG. 1 is a block diagram illustrating one embodiment of a system 720 supporting a method for efficiently laying out a display table.
- the system 720 may be employed in any of various types of computing devices, such as desktop computers or workstations, small footprint devices, etc.
- the system 720 may include a processor 710 .
- the processor 710 may be any of various types, including an x86 processor, e.g., a Pentium class, a PowerPC processor, a CPU from the SPARC family of RISC processors, as well as others.
- the processor 710 may be a less powerful processor than those listed above or may be a processor developed specifically for a small footprint device, such as a digital signal processor (DSP).
- DSP digital signal processor
- the processor 710 may have various clock speeds, including clock speeds similar to those found in desktop computer-class processors, as well as lower speeds such as 16 MHz.
- the system 720 also includes a memory 712 coupled to the processor 710 .
- the memory 712 may comprise any of various types of memory, including DRAM, SRAM, EDO RAM, etc., or a non-volatile memory such as a magnetic media, e.g., a hard drive, or optical storage.
- the memory 712 may comprise other types of memory as well, or combinations thereof.
- the memory 712 may have a very small storage capacity compared to a typical desktop computer system.
- the memory 712 may store an application program 718 .
- the application program 718 may be any of various types of application programs that utilize display tables.
- the application program 718 may be a web browser application that displays markup language tables, such as HTML or XML-derived tables
- the application program 718 may be a word processor program that displays tables described in word processor documents, etc.
- the application program may be configured to efficiently lay out display tables, as described below.
- the system 720 may also comprise a display 716 .
- the display 716 may be any of various types, such as an LCD (liquid crystal display), a CRT (cathode ray tube) display, etc. It is noted that the display for a typical small footprint device, such as a smart cellular phone, may be small compared to the display of a desktop computer system.
- FIG. 1 illustrates a graphical representation of a tabl 722 displayed on the display 716 .
- the processor 710 executing code and data from the memory 712 provides a means for laying out and displaying the table.
- the system 720 may also comprise an input mechanism 714 .
- the input mechanism 714 may be any of various types, as appropriate for a particular system.
- the input mechanism may be a keyboard, mouse, trackball, touch pen, microphone, modem, infrared receiver, etc.
- the system 720 may be illustrative of a small footprint device.
- a small footprint device is a hardware device comprising computing resources such as a processor and a system memory, but having significantly greater constraints on one or more of these resources than a typical desktop computer has.
- a typical small footprint device may have two megabytes of memory or less, whereas a typical desktop system may have 64 megabytes or more.
- a typical small footprint device may have significantly less processing power than a typical desktop computing system, either in terms of processor type, or processor speed, or both.
- a particular personal data assistant device may have a 16 MHz processor, whereas a typical desktop system may have a processor speed of 100 MHz or higher.
- a typical small footprint device may have a display size significantly smaller than the display screen of a desktop computing system.
- the display screen of a handheld computer is typically small compared to the display screen of a desktop monitor. It is noted that the specific numbers given above are exemplary only and are used for comparison purposes.
- Small footprint devices may also have constraints on other resource types compared to typical desktop computing systems, besides the memory, processor, and display size resources described above.
- a typical small footprint device may not have a hard disk, may not have a network connection, or may have an intermittent network connection, or may have a wireless network connection, etc.
- small footprint devices are portable and/or are small compared to desktop computers, but are not necessarily so. Also, many small footprint devices are primarily or exclusively battery-operated. Also, small footprint devices may typically have a more limited or narrow range of usage possibilities than a typical desktop computing system.
- the system illustrated in FIG. 1 is illustrative of, but is not limited to, any one of the following: handheld computers, wearable devices (e.g., wristwatch computers), personal data assistants (PDAs), “smart” cellular telephones, set-top boxes, game consoles, global positioning system (GPS) units, electronic textbook devices, etc. Since new classes of consumer devices are rapidly emerging, it is not possible to provide an exhaustive list of small footprint devices. However, the term “small footprint device” is intended to include such devices as may reasonably be included within the spirit and scope of the term as described above.
- system and method described herein may also be employed in a general-purpose computer system, such as a desktop PC or mainframe computer.
- FIG. 2 is a flowchart diagram illustrating an overview of one embodiment of a layout method for a display table.
- Display tables may be described in any of various ways, as appropriate for a particular type of table or application.
- a markup language table such as an HTML table
- Other types of display tables may be described differently, e.g., in a binary format.
- the display table description may include various types of information regarding the table, such as row and column definitions, the preferred size of the table, the content for each table cell, etc.
- the display table description may be parsed and data structures representing the table description may be created and stored in system memory.
- the table description data structures may be created and stored using any of various well-known methods, as appropriate for a particular type of table or application. For example, a web browser application parsing an HTML table may create a set of objects related to each other as specified by the standard Document Object Model (DOM).
- DOM Document Object Model
- the table data structures created in step 500 may be “inspected”.
- various factors may affect layout of a display table, such as the desired, dimensions indicated by the table author, the available display device area for displaying the table, the minimum cell size necessary to display the content of each cell, the number of columns or rows spanned by particular cells, etc.
- display table layout involves a negotiation between determining the possible size of a table, based on minimum and maximum dimensions of table cells, and assigning final dimensions to the table rows and columns, based on the possible size of the table and the available display area for the table.
- table inspection involves determining the possible size of the table, and is discussed in detail below.
- step 504 the table may be “apportioned”, based on the results of step 502 . That is, final dimensions may be assigned to the table and to each of the table rows and columns. Step 504 , table apportioning, is discussed in detail below.
- the table coordinates are “normalized”.
- the final position of the cell is not yet known.
- each object in the cell is assigned a position relative to the top corner of the cell.
- these relative positions may be converted into absolute coordinates, which is referred to as normalization.
- the normalization process may be delayed until the absolute coordinates of the outermost table are known.
- the outermost table may then be traversed recursively to normalize coordinates for any nested tables. By delaying the normalization process until the coordinates of the outermost table are known, repetition of the normalization process can be avoided.
- FIG. 3 is a flowchart diagram illustrating an overview of one embodiment of table inspection (step 502 of FIG. 2 ).
- step 600 the number of rows in the table is determined.
- step 602 the number of columns in the table is determined.
- the table may be parsed, and data structures representing the table description may be created.
- Each table description data structure may comprise information regarding which type of table element the data structure represents, such as a table row, a table cell, etc.
- steps 600 and 602 may simply involve traversing through the table description data structures and counting the number of table rows and columns.
- the number of table rows and columns may have been recorded as the table description was parsed, making steps 600 and 602 simply a matter of obtaining the recorded information.
- step 604 the data structures representing the table description are mapped to a table data structure suitable for efficiently accessing individual table cells, such as a two-dimensional array, using the number of rows and columns determined in steps 600 and 602 as the array dimensions.
- the mapping of step 604 may be unnecessary if the data structures representing the table description already make it possible to efficiently traverse the table elements, quickly access individual cells, etc.
- the minimum and maximum possible widths for each table cell are determined.
- the minimum and maximum possible cell widths may be calculated in various ways. These calculations may depend on cell content. While certain types of cell content, such as images, may be associated with only one possible defined width, other types of cell content may be associated with various possible defined widths. For example, text may be displayable in various possible ways, such as being displayed in a single line, or being displayed in multiple lines in a wraparound fashion. As another example, a cell may include content such as a nested table having one or more cells containing text or other content displayable in different widths.
- the calculations may also use information comprised in the table description itself.
- an author of a table contained in a word processor document may set a table attribute which specifies the type of wrapping to apply to a cell.
- an HTML author may request that a cell be set to a certain width by using a WIDTH attribute.
- such information may be ignored when calculating the minimum cell widths.
- HTML tables are typically designed with a desktop computer display screen in mind. However, these tables often do not display well on a small footprint device with a small display screen.
- WIDTH attributes may be ignored, and the minimum cell width may instead be based on cell content, which minimizes the display space consumed by a table.
- table cells may comprise nested tables.
- the inner table calculation may be performed recursively, or may be performed using well-known methods to avoid recursion, such as tree traversal algorithms.
- step 608 the minimum and maximum possible widths for each column in the table are determined, based on the minimum and maximum possible cell widths.
- some types of tables such as HTML tables, may allow cells to span multiple columns. Cells that span multiple columns may affect the widths of the spanned columns.
- Step 608 involves processing each cell of each column and tracking the minimum/maximum cell widths and also tracking which multiple-column-spanning cell (if there are any) has the largest maximum width. Step 608 is illustrated in more detail in FIGS. 4-6.
- step 610 the minimum and maximum possible widths for the display table are determined, based on the minimum and maximum possible column widths.
- step 608 of FIG. 4 the minimum and maximum possible widths for each column are determined.
- FIGS. 4-6 are flowchart diagrams illustrating one embodiment of step 608 in more detail.
- HTML code gives an example of an HTML table comprising a multiple column-spanning cell:
- FIG. 7 illustrates how this table may look when displayed.
- the cells of the table are labeled with their corresponding row and column numbers.
- the second cell of the middle row (row 1) of the table has a “COLSPAN” attribute which specifies that the cell spans two columns. Although this cell spans two columns, it is represented by a single entry in the table data structure created in step 604 of FIG. 3 .
- the cell is a member of the middle column, column 1, and there is no row 1 cell for the right-most column, column 2.
- a cell which spans multiple columns may be said to be a member of the left-most column which it spans.
- each column of the table is traversed. For each column, all the cells of the column are processed in order to find the minimum/maximum possible cell widths.
- the column cell with the largest minimum possible width determines the minimum possible width for the column
- the column cell with the largest maximum possible width determines the maximum possible width for the column. Since any cells in the table which span multiple columns are members of the left-most column which they span, the columns are traversed in a right-to-left order. This allows the calculation of the minimum/maximum possible column widths to take place in a single pass through the table columns. If the columns were traversed in a left-to-right order then the minimum/maximum width values could not be determined for columns having a column-spanning cell on the first pass through, since the factors determining the width of the column-spanning cell would not yet be known.
- a similar process as described above may be implemented for an embodiment in which multiple column-spanning cells are considered to be members of the right-most column which they span.
- the columns may be traversed in a left-to-right order instead of a right-to-left order.
- the column index is set to the index of the right-most column in step 620 of FIG. 4 .
- the column index loop control variable is tested to make sure it is within range. If all the columns have been processed then the execution illustrated in FIG. 4 completes. Otherwise, in step 624 certain variables are initialized in preparation for an iteration through the column-processing loop. The use of these variables is described below. It is noted that the use of variables such as these represents one embodiment of the table layout method, and other embodiments are possible. For example, information may be recorded in the table data structure itself instead of in variables.
- step 626 each cell of the column specified by the column index is processed. Step 626 is illustrated in more detail in the flowchart diagram of FIG. 5 .
- the row index is set to 0.
- the row index loop control variable is tested to make it is within range. If the index is out of range, then all the cells of the current column have been processed, and the execution illustrated in FIG. 5 completes.
- step 646 the current cell, i.e., the cell specified by the current columnIndex and rowIndex, is checked to see whether it spans multiple columns. If the cell does not span multiple columns, then execution proceeds to step 648 .
- step 648 the minimum possible width for the cell is obtained, using information stored in step 606 of FIG. 3 . If this width is greater than the current minimum possible width recorded for the column, then the minimum possible column width is set to the minimum possible width for the cell. (The minimum possible width for each column is initialized to zero.)
- Steps 652 and 654 are similar to steps 648 and 650 . The maximum possible width for the cell is obtained in step 652 . The current maximum possible width for the column is updated to this value in step 654 if necessary. Execution proceeds from step 654 to step 674 .
- step 646 If it is determined in step 646 that the cell does span multiple columns, then execution proceeds to step 660 .
- step 660 the minimum possible width for the cell is obtained, using information stored in step 606 of FIG. 3 . This step is identical to step 648 .
- step 662 the minimum cell width is compared to the colspanMinimumWidth variable.
- a column may have more than one cell which spans multiple columns.
- the colspanMinimumWidth variable tracks the largest minimum width value of all these cells. If the minimum width value for the current cell is not greater than the colspanMinimumWidth value already recorded, then the current cell is ignored, and execution proceeds to step 674 .
- the colspanMinimumWidth variable is used to adjust the minimum widths of the columns spanned by the cell, if necessary. For this adjustment, it is only necessary to track the largest minimum possible cell width of all the spanning cells.
- the colspanMinimumWidth variable is updated in step 664 .
- the maximum possible width for the cell is calculated.
- the colspanMaximumWidth variable is set to this maximum possible cell width.
- the thisColumnsColspan variable is set to the number of columns spanned by the cell. The use of the colspanMinimumWidth, colspanMaximumWidth, and thisColumnsColspan variables is discussed below for FIG. 6 .
- step 674 is reached from step 654 , step 662 , or step 670 .
- the cell referenced by the current column and row indices has been processed, and the next cell in the current column will be processed.
- the rowIndex variable is incremented, and execution loops back to step 642 .
- step 642 another loop iteration through steps 646 - 674 occurs, or the loop ends, as appropriate.
- step 626 of FIG. 4 is complete, and execution proceeds to step 628 of FIG. 4 .
- the cells of the current column have been processed to determine the minimum/maximum possible widths for the column.
- the colspanMinimumWidth and colspanMaximumWidth variables may be set in step 626 .
- these values are used to adjust the minimum and maximum possible column widths of columns spanned by a cell in the current column, if necessary. Step 628 is described in more detail below with reference to FIG. 6 .
- the columnIndex loop control variable is decremented in step 630 so that it references the next column to the left in the table. From step 630 execution proceeds to step 622 , where the loop ends if the column index is out of range, or another loop iteration is performed, as appropriate.
- FIG. 6 is a flowchart diagram illustrating step 628 of FIG. 4 in more detail.
- the steps of FIG. 6 utilize the variables colspanMinimumWidth, colspanMaximumWidth, and thisColumnsColspan which were set while processing the current column in the steps of FIG. 5 .
- information for only one of a column's multiple column-spanning cells is tracked (the one with the largest minimum possible width). This cell is referred to below as the “largest spanning cell”.
- the thisColumnsColspan variable indicates the number of columns spanned by the largest spanning cell.
- the thisColumnsColspan variable is checked to see whether it is greater than 1. This variable is initialized to 1 in step 624 at the beginning of each iteration through the column-processing loop. If thisColumnsColspan is not greater than 1, then no cells spanning multiple columns were found in step 626 , and execution returns to step 630 of FIG. 4 . Otherwise, execution proceeds to step 682 of FIG. 6 .
- the minSpannedColumnWidth variable is calculated by summing up the minimum possible width values recorded for each of the columns spanned by the largest spanning cell. Since the table columns are traversed in a right-to-left order, each of these values is already known.
- the maxSpannedColumnWidth variable is calculated by summing up the maximum possible width values recorded for each of the columns spanned by the largest spanning cell.
- step 686 the colspanMinimumWidth variable is compared to the minSpannedColumnWidth variable. If colspanMinimumWidth is less than or equal to minSpannedColumnWidth, then the minimum possible widths of the spanned columns are already sufficiently large to hold the minimum possible width of the largest spanning cell. In this case, execution proceeds to step 690 . However, if colspanMinimumWidth is greater than minSpannedColumnWidth, then one or more of the minimum possible width values of the spanned columns must be adjusted in order to hold the largest spanning cell.
- a factor based on colspanMinimumWidth—minSpannedColumnWidth may be calculated, and the minimum possible width value for each of the spanned columns may be scaled upward.
- Other adjustment methods may be used in other embodiments.
- Steps 690 and 692 are similar to steps 686 and 688 . If colspanMaximumWidth is greater than maxSpannedColumnWidth, then one or more of the maximum possible width values of the spanned columns are increased in step 692 so that the maximum possible column widths are large enough to hold the maximum possible width of the largest spanning cell.
- FIG. 8 is a flowchart diagram illustrating an overview of one embodiment of table apportioning (step 504 of FIG. 2 ).
- step 550 the minimum/maximum possible column widths determined during the table inspection process are considered along with the available space for the table in order to assign a width to each table column. Step 550 is illustrated in more detail in FIG. 9 .
- step 552 the width of the table is calculated, e.g., by summing up the column widths assigned in step 550 .
- Cell heights may be somewhat determined by cell widths. Few constraints are placed on cell height, since it is usually more visually appealing to display a table of a width that fits on a display screen, rather than to control the cell heights and have the table width overflow.
- Step 554 is illustrated in more detail in FIGS. 10 and 12.
- step 556 the height of the table is calculated, e.g., by summing up the row heights assigned in step 554 .
- FIG. 9 is a flowchart diagram illustrating step 550 of FIG. 8 in more detail.
- step 700 the minimum table width is calculated and compared to the available display space for the table.
- the minimum table width may be calculated by summing the minimum possible column widths for each column in the table, which were determined during the table inspection process described above.
- the available display space may be determined in various ways. For example, the available space value may be passed as a parameter to a table apportioning method or function. If the minimum table width is too large to fit into the available display space, i.e., the table width must overflow the available display space, then the minimum table width is used, and in step 702 the final column width for each column is set to its minimum possible value.
- step 704 If the minimum table width is small enough to fit into the available space, then execution proceeds to step 704 . If no preferred width for the table was specified, then the maximum table width is calculated. Otherwise, execution proceeds to step 708 .
- the maximum table width may be calculated by summing the maximum possible column widths for each column in the table. If the maximum table value is small enough to fit into the available space, then the maximum table width is used, and in step 706 the final column width for each column is set to its maximum value.
- each column may be scaled with an equation such as:
- colWidth minColWidth + ((maxColWidth ⁇ minColWidth) * (availableSpace ⁇ minTableWidth) / (maxTableWidth - minTableWidth))
- scaling methods may be applied in other embodiments.
- individual scaling factors may be applied to different columns, depending on each column's content.
- step 554 of FIG. 8 a height is assigned to each table row.
- FIGS. 10 and 11 are flowchart diagrams illustrating step 554 in detail.
- table cells may span multiple columns, they may also span multiple rows.
- the below description accounts for cells that span multiple rows by processing rows in a bottom-to-top order, for reasons similar to the right-to-left column processing order described above.
- the row index is set to the index of the bottom-most column in step 720 of FIG. 10 .
- the row index loop control variable is tested to make it is within range. If all the rows have been processed then the execution illustrated in FIG. 10 completes. Otherwise, in step 724 certain variables are initialized in preparation for an iteration through the row-processing loop. The use of these variables is described below. It is noted that the use of variables such as these represents one embodiment of the table layout method, and other embodiments are possible. For example, information may be recorded in the table data structure itself instead of in variables.
- step 726 each cell of the row specified by the row index is processed. Step 726 is illustrated in more detail in the flowchart diagram of FIG. 11 .
- the column index is set to 0.
- the column index loop control variable is tested to make sure it is within range. If the index is out of range, then all the cells of the current row have been processed, and the execution illustrated in FIG. 11 completes.
- step 744 the contents of the current cell, i.e., the cell referenced by the current row index and column index, are layed out.
- the cell contents are layed out according to the cell width, which is determined from the assigned column widths as described above. Once the cell contents are layed out, the height of the cell is known.
- step 746 the cell is checked to see whether it spans multiple rows. If the cell does not span multiple rows, then execution proceeds to step 748 .
- step 748 the cell height is compared to the current height recorded for the row. (The height for each row is initialized to zero.) If the cell height is greater than the row height, then the height of the current row is set to the cell height. Execution proceeds from step 748 to step 760 .
- step 750 the number of rows spanned by the current cell is compared to the thisRowsRowspan variable value. If the current cell spans more rows than the value of thisRowsRowspan, then execution proceeds to step 756 , where the value of the rowSpanHeight variable is set to the height of the current cell. The rowSpanHeight variable indicates the maximum height spanned by a row-spanning cell of the current row. Execution proceeds from step 756 to step 758 , where the thisRowsRowspan value is updated to the number of rows spanned by the current cell. Execution proceeds from step 758 to step 760 .
- step 750 if the current cell does not span more rows than the value of thisRowsRowspan, then execution proceeds to step 752 .
- step 752 the number of rows spanned by the current cell is again compared to the thisRowsRowspan variable value. If the two values are equal, then in step 754 the current cell height is checked to see if it is greater than the current value of rowSpanHeight. If so, then rowSpanHeight is updated to the height of the current cell, and execution proceeds to step 760 . If the number of rows spanned by the current cell is not equal to thisRowsRowspan in the comparison of step 752 , then execution proceeds to step 760 .
- step 760 the current cell has been processed to determine how its height or other characteristics, such as the number of rows it spans, affect the calculation of the height of the current row.
- the column index is incremented to reference the next column in the row, and execution loops back to step 742 . From step 742 , another loop iteration may be performed, or if all of the row's cells have been processed, then the row processing illustrated in FIG. 11 for step 726 of FIG. 10 may end.
- step 728 the heights of the rows spanned by the largest spanning cell of the current row may be adjusted, if necessary.
- the row heights of these rows may be summed. If this sum is less than the height of the largest spanning cell (indicated by the rowSpanHeight variable), then the row heights may be adjusted.
- the row height adjustment may be performed using any of various methods.
- step 728 the row index is decremented in step 730 to refer to the next highest row in the table, and execution loops back to step 722 . From step 722 , another loop iteration may be performed, or the execution illustrated in the flowchart diagram of FIG. 10 may end if all the table rows have already been processed.
- HTML tables may be nested.
- the following HTML code shows an example of a nested HTML table:
- FIG. 12 illustrates what this table may look like when displayed.
- a display table layout method may be desirable for efficiently handle nested tables.
- nested HTML tables are commonly found in web pages. Maximizing layout performance improvement may be especially important in laying out tables for small footprint devices, since these devices may have very little processing power. Also, the situations and environments in which these devices are used may make it especially important to layout tables quickly. For example, a user of a web browser application running in a cellular phone may need to quickly view a web page including nested tables in order to obtain an important phone number needed for an immediate situation, whereas a desktop computer user may typically browse the web in a more leisurely manner.
- data structures representing the table description may be created and stored in system memory.
- the table description may be stored as objects comprising methods such as Inspect( ), Apportion( ), Normalize( ), etc. that correspond to the processes described above.
- the display table layout method may traverse through the table, invoking these methods and controlling the recursion process to efficiently handle nested tables.
- HTML code describes a simple HTML table with one cell:
- FIG. 13 illustrates the resulting method invocations when this HTML table is processed.
- the method invocation trace shown in FIG. 13 follows the general process described above for laying out a display table.
- the display table is first inspected. Inspecting the table comprises inspecting each table cell. (In this example there is only one cell.) After the table is inspected, the table is then apportioned and normalized as described above and shown in FIG. 13 .
- HTML code describes a simple HTML table with one cell that includes a nested table with one cell:
- FIG. 14 illustrates the resulting method invocations when this HTML table is processed.
- the method invocation trace shown in FIG. 14 is similar to that in FIG. 13 .
- the inspection process for the cell of the outer table results in a second inspection process being initiated for the nested table included in the cell of the outer table.
- the nested table is inspected before minimum and maximum possible widths are assigned to the outer table cell.
- the apportioning process for the cell of the outer table results in a second apportioning process being initiated for the nested table included in the cell of the outer table.
- the method invocation trace of FIG. 14 illustrates a single method invocation controlling the overall layout process for the outer table, i.e., the “Layout (Body)” method invocation.
- the “Layout (Body)” method invocation Note that when the cell of the outer table is layed out, (shown by the “Layout (Cell1)” method call) there is no such method invocation to layout the nested table included in the cell of the outer table.
- the nested table is identical to the table processed in FIG. 13 .
- invoking the “Layout(Body)” method on the inner table would result in the FIG. 13 method invocation trace being included under the “Layout (Cell1)” method invocation in FIG. 14 .
- each of the FIG. 13 method invocations are already performed in the FIG. 14 method invocation trace.
- the layout method described herein is able to avoid the duplication of processing.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- User Interface Of Digital Computer (AREA)
- Document Processing Apparatus (AREA)
Abstract
A system and method for efficient layout of a display table. Given a description of a table, such as a markup language description, the table description may be parsed and data structures representing the table description may be created. The table description data structures may then be “inspected”, in order to determine the possible size of the table. Once the table has been inspected, the table may then be “apportioned”, based on the results of the inspection step. That is, final dimensions may be assigned to the table. The table coordinates may then be “normalized”, which may involve converting relative table coordinates into absolute coordinates. Table layout optimizations are described, e.g., in order to efficiently handle various aspects of table layout, such as table cells that span multiple columns or rows, table cells that include nested tables, etc. Thus, the table layout method described herein may be well-suited for use in an environment in which software optimizations are necessary or desirable, such as within a resource-constrained small footprint device.
Description
1. Field of the Invention
The present invention relates to the field of display tables, such as HTML tables. More particularly, the invention relates to a system and method for efficient layout of a display table.
2. Description of the Related Art
Display tables are commonly used in many types of software applications. A display table may comprise rows and columns that define cells. Each of the cells may comprise some type of cell content. For example, many current web page documents include hypertext markup language (HTML) tables with cells that may include content such as text or images. As another example, word processor applications often enable authors to create tables for display in a document.
Display tables are typically described in some format that a software application must process in order to display the table correctly. For example, a markup language table may be described in a text format by various markup language tags that are processed and used to create data structures representing the table.
When processing a table description, many factors may be involved in correctly determining the dimensions for the rows and columns of the table, such as the desired dimensions indicated by the table author, the available display device area for displaying the table, the minimum cell size necessary to display the content of each cell, the number of columns or rows spanned by particular cells, the determination of row and column dimensions for any nested tables included in the table, etc. The process of determining the row and column dimensions for a table, assigning coordinates to the table, and positioning the cell content within each cell of the table is referred to herein as “laying out” the table.
In many cases, it is of course not only desirable to correctly lay out display tables, but to do so efficiently. Designing an efficient table layout method may be difficult. One source of difficulty lies in dealing with nested tables, i.e., a table with one or more cells comprising another table. If the table layout method is not designed carefully, the method may scale exponentially with increasing table nesting complexity.
Although some current table layout methods do succeed in avoiding exponential scaling with increased nesting complexity, it appears, based on the results of benchmark tests, that they do not perform other possible optimizations. Although thorough optimization of a table layout method may not be very important in some contexts or environments, in others it can be important.
Small footprint devices offer one example of an environment in which it is often necessary or desirable to pay particular attention to software efficiency. The field of “smart” small footprint devices is growing and changing rapidly. Small footprint devices include handheld computers, personal data assistants (PDAs), cellular phones, global positioning system (GPS) receivers, game consoles, set-top boxes, and many more such devices. Small footprint devices are becoming increasingly powerful and enabled to run software applications or services historically associated with general computing devices, such as desktop computers.
Small footprint devices may have very strong resource constraints, such as the amount of memory and the processing power available. Thus, it is often necessary or desirable to design optimized software that performs well in the environment of a small footprint device. Providing an efficient layout method for a display table is one example of a software optimization that may significantly benefit small footprint device users. For example, many small footprint devices are now able to run web browser applications, which often process web pages comprising markup language tables, such as HTML tables, as described above.
The problems outlined above may in large part be solved by a system and method for efficient layout of a display table, as described herein. Given a description of a table, such as a markup language description, the table description may be parsed and data structures representing the table description may be created.
The table description data structures may then be “inspected”, in order to determine the possible size of the table. The process of table inspection may involve determining the minimum and maximum possible widths for each table cell, and then determining the minimum and maximum possible widths for each table column, based on the individual cell values. The minimum and maximum possible table widths may then be calculated from the possible table column widths.
Once the table has been inspected, the table may then be “apportioned”, based on the results of the inspection step. That is, final dimensions may be assigned to the table. The process of table apportioning may involve assigning a width to each table column and a height to each table row.
The table coordinates may then be “normalized”, which may involve converting relative table coordinates into absolute coordinates.
Table layout optimizations are described, e.g., in order to efficiently handle various aspects of table layout, such as table cells that span multiple columns or rows, table cells that include nested tables, etc. Thus, the table layout method described herein may be well-suited for use in an environment in which software optimizations are necessary or desirable, such as within a resource-constrained small footprint device.
Other objects and advantages of the invention will become apparent upon reading the following detailed description and upon reference to the accompanying drawings in which:
FIG. 1 is a block diagram illustrating one embodiment of a system supporting a method for efficiently laying out a display table;
FIG. 2 is a flowchart diagram illustrating an overview of one embodiment of a layout method for a display table;
FIG. 3 is a flowchart diagram illustrating an overview of one embodiment of a process of performing display table inspection;
FIGS. 4-6 are flowchart diagrams illustrating one embodiment of a process of calculating the minimum and maximum possible column widths for a table;
FIG. 7 is an example of an HTML table comprising a column-spanning cell;
FIG. 8 is a flowchart diagram illustrating an overview of one embodiment of a process of performing display table apportioning;
FIG. 9 is a flowchart diagram illustrating one embodiment of a process of assigning a width to each column of a display table;
FIGS. 10 and 11 are flowchart diagrams illustrating one embodiment of a process of a height to each row of a display table;
FIG. 12 is an example of a nested HTML table;
FIG. 13 illustrates an example of resulting method invocations when an HTML table with one cell is layed out; and
FIG. 14 illustrates an example of resulting method invocations when an HTML table with one cell that includes a nested table with one cell is layed out.
While the invention is susceptible to various modifications and alternative forms, specific embodiments thereof are shown by way of example in the drawings and are herein described in detail. It should be understood, however, that the drawings and detailed description thereto are not intended to limit the invention to the particular form disclosed, but on the contrary, the intention is to cover all modifications, equivalents and alternatives falling within the spirit and scope of the present invention as defined by the appended claims.
FIG. 1 is a block diagram illustrating one embodiment of a system 720 supporting a method for efficiently laying out a display table. The system 720 may be employed in any of various types of computing devices, such as desktop computers or workstations, small footprint devices, etc.
As shown in FIG. 1, the system 720 may include a processor 710. The processor 710 may be any of various types, including an x86 processor, e.g., a Pentium class, a PowerPC processor, a CPU from the SPARC family of RISC processors, as well as others. In various embodiments, such as an embodiment in which the system 720 illustrates a small footprint device, the processor 710 may be a less powerful processor than those listed above or may be a processor developed specifically for a small footprint device, such as a digital signal processor (DSP). The processor 710 may have various clock speeds, including clock speeds similar to those found in desktop computer-class processors, as well as lower speeds such as 16 MHz.
The system 720 also includes a memory 712 coupled to the processor 710. The memory 712 may comprise any of various types of memory, including DRAM, SRAM, EDO RAM, etc., or a non-volatile memory such as a magnetic media, e.g., a hard drive, or optical storage. The memory 712 may comprise other types of memory as well, or combinations thereof. For an embodiment in which the system 720 illustrates a small footprint device, the memory 712 may have a very small storage capacity compared to a typical desktop computer system.
As shown in FIG. 1, the memory 712 may store an application program 718. The application program 718 may be any of various types of application programs that utilize display tables. For example the application program 718 may be a web browser application that displays markup language tables, such as HTML or XML-derived tables, the application program 718 may be a word processor program that displays tables described in word processor documents, etc. The application program may be configured to efficiently lay out display tables, as described below.
As shown in FIG. 1, the system 720 may also comprise a display 716. The display 716 may be any of various types, such as an LCD (liquid crystal display), a CRT (cathode ray tube) display, etc. It is noted that the display for a typical small footprint device, such as a smart cellular phone, may be small compared to the display of a desktop computer system. FIG. 1 illustrates a graphical representation of a tabl 722 displayed on the display 716. The processor 710 executing code and data from the memory 712 provides a means for laying out and displaying the table.
As shown in FIG. 1, the system 720 may also comprise an input mechanism 714. The input mechanism 714 may be any of various types, as appropriate for a particular system. For example, the input mechanism may be a keyboard, mouse, trackball, touch pen, microphone, modem, infrared receiver, etc.
As noted above, in various embodiments, the system 720 may be illustrative of a small footprint device. As used herein, a small footprint device is a hardware device comprising computing resources such as a processor and a system memory, but having significantly greater constraints on one or more of these resources than a typical desktop computer has. For example, a typical small footprint device may have two megabytes of memory or less, whereas a typical desktop system may have 64 megabytes or more. Also a typical small footprint device may have significantly less processing power than a typical desktop computing system, either in terms of processor type, or processor speed, or both. For example, a particular personal data assistant device may have a 16 MHz processor, whereas a typical desktop system may have a processor speed of 100 MHz or higher. Also, a typical small footprint device may have a display size significantly smaller than the display screen of a desktop computing system. For example, the display screen of a handheld computer is typically small compared to the display screen of a desktop monitor. It is noted that the specific numbers given above are exemplary only and are used for comparison purposes.
Small footprint devices may also have constraints on other resource types compared to typical desktop computing systems, besides the memory, processor, and display size resources described above. For example, a typical small footprint device may not have a hard disk, may not have a network connection, or may have an intermittent network connection, or may have a wireless network connection, etc.
Many small footprint devices are portable and/or are small compared to desktop computers, but are not necessarily so. Also, many small footprint devices are primarily or exclusively battery-operated. Also, small footprint devices may typically have a more limited or narrow range of usage possibilities than a typical desktop computing system. Thus, in various embodiments, the system illustrated in FIG. 1 is illustrative of, but is not limited to, any one of the following: handheld computers, wearable devices (e.g., wristwatch computers), personal data assistants (PDAs), “smart” cellular telephones, set-top boxes, game consoles, global positioning system (GPS) units, electronic textbook devices, etc. Since new classes of consumer devices are rapidly emerging, it is not possible to provide an exhaustive list of small footprint devices. However, the term “small footprint device” is intended to include such devices as may reasonably be included within the spirit and scope of the term as described above.
It is noted that in various embodiments the system and method described herein may also be employed in a general-purpose computer system, such as a desktop PC or mainframe computer.
FIG. 2 is a flowchart diagram illustrating an overview of one embodiment of a layout method for a display table.
Display tables may be described in any of various ways, as appropriate for a particular type of table or application. For example, a markup language table, such as an HTML table, may be described in a textual format, via the use of markup language tags. Other types of display tables may be described differently, e.g., in a binary format. Depending on the particular type of table or application, the display table description may include various types of information regarding the table, such as row and column definitions, the preferred size of the table, the content for each table cell, etc.
In step 500, the display table description may be parsed and data structures representing the table description may be created and stored in system memory. The table description data structures may be created and stored using any of various well-known methods, as appropriate for a particular type of table or application. For example, a web browser application parsing an HTML table may create a set of objects related to each other as specified by the standard Document Object Model (DOM).
In step 502, the table data structures created in step 500 may be “inspected”. As discussed above, various factors may affect layout of a display table, such as the desired, dimensions indicated by the table author, the available display device area for displaying the table, the minimum cell size necessary to display the content of each cell, the number of columns or rows spanned by particular cells, etc. Thus, display table layout involves a negotiation between determining the possible size of a table, based on minimum and maximum dimensions of table cells, and assigning final dimensions to the table rows and columns, based on the possible size of the table and the available display area for the table. Step 502, table inspection, involves determining the possible size of the table, and is discussed in detail below.
In step 504, the table may be “apportioned”, based on the results of step 502. That is, final dimensions may be assigned to the table and to each of the table rows and columns. Step 504, table apportioning, is discussed in detail below.
In step 506, the table coordinates are “normalized”. When laying out a cell, the final position of the cell is not yet known. Thus, each object in the cell is assigned a position relative to the top corner of the cell. Once a table's X,Y position has been set, these relative positions may be converted into absolute coordinates, which is referred to as normalization.
In order to maximize efficiency when processing nested tables, the normalization process may be delayed until the absolute coordinates of the outermost table are known. The outermost table may then be traversed recursively to normalize coordinates for any nested tables. By delaying the normalization process until the coordinates of the outermost table are known, repetition of the normalization process can be avoided.
FIG. 3 is a flowchart diagram illustrating an overview of one embodiment of table inspection (step 502 of FIG. 2).
In step 600, the number of rows in the table is determined. In step 602, the number of columns in the table is determined. As discussed above with reference to step 500 of FIG. 2, the table may be parsed, and data structures representing the table description may be created. Each table description data structure may comprise information regarding which type of table element the data structure represents, such as a table row, a table cell, etc. Thus, steps 600 and 602 may simply involve traversing through the table description data structures and counting the number of table rows and columns. In an alternative embodiment, the number of table rows and columns may have been recorded as the table description was parsed, making steps 600 and 602 simply a matter of obtaining the recorded information.
In step 604, the data structures representing the table description are mapped to a table data structure suitable for efficiently accessing individual table cells, such as a two-dimensional array, using the number of rows and columns determined in steps 600 and 602 as the array dimensions. In another embodiment, the mapping of step 604 may be unnecessary if the data structures representing the table description already make it possible to efficiently traverse the table elements, quickly access individual cells, etc.
In step 606, the minimum and maximum possible widths for each table cell are determined. The minimum and maximum possible cell widths may be calculated in various ways. These calculations may depend on cell content. While certain types of cell content, such as images, may be associated with only one possible defined width, other types of cell content may be associated with various possible defined widths. For example, text may be displayable in various possible ways, such as being displayed in a single line, or being displayed in multiple lines in a wraparound fashion. As another example, a cell may include content such as a nested table having one or more cells containing text or other content displayable in different widths.
The calculations may also use information comprised in the table description itself. For example, an author of a table contained in a word processor document may set a table attribute which specifies the type of wrapping to apply to a cell. As another example, an HTML author may request that a cell be set to a certain width by using a WIDTH attribute.
However, in some embodiments, such information may be ignored when calculating the minimum cell widths. For example, HTML tables are typically designed with a desktop computer display screen in mind. However, these tables often do not display well on a small footprint device with a small display screen. When the present method is applied to render tables for a small footprint device, information such as WIDTH attributes may be ignored, and the minimum cell width may instead be based on cell content, which minimizes the display space consumed by a table.
As discussed above, table cells may comprise nested tables. In this case, in order to perform step 606, it may be necessary to first layout a cell's nested table(s), in order to determine the minimum and maximum possible widths for the inner tables. The inner table calculation may be performed recursively, or may be performed using well-known methods to avoid recursion, such as tree traversal algorithms.
In step 608, the minimum and maximum possible widths for each column in the table are determined, based on the minimum and maximum possible cell widths. Note that some types of tables, such as HTML tables, may allow cells to span multiple columns. Cells that span multiple columns may affect the widths of the spanned columns. Step 608 involves processing each cell of each column and tracking the minimum/maximum cell widths and also tracking which multiple-column-spanning cell (if there are any) has the largest maximum width. Step 608 is illustrated in more detail in FIGS. 4-6.
In step 610, the minimum and maximum possible widths for the display table are determined, based on the minimum and maximum possible column widths.
In step 608 of FIG. 4, the minimum and maximum possible widths for each column are determined. FIGS. 4-6 are flowchart diagrams illustrating one embodiment of step 608 in more detail.
As discussed above, some table cells may span multiple columns. The following HTML code gives an example of an HTML table comprising a multiple column-spanning cell:
<TABLE> |
<TR><TD> |
<TR><TD> |
<TR><TD> |
</TABLE> |
FIG. 7 illustrates how this table may look when displayed. The cells of the table are labeled with their corresponding row and column numbers. The second cell of the middle row (row 1) of the table has a “COLSPAN” attribute which specifies that the cell spans two columns. Although this cell spans two columns, it is represented by a single entry in the table data structure created in step 604 of FIG. 3. In that table data structure, the cell is a member of the middle column, column 1, and there is no row 1 cell for the right-most column, column 2. Thus, in this example, a cell which spans multiple columns may be said to be a member of the left-most column which it spans.
In the steps illustrated in FIG. 4, each column of the table is traversed. For each column, all the cells of the column are processed in order to find the minimum/maximum possible cell widths. The column cell with the largest minimum possible width determines the minimum possible width for the column, and the column cell with the largest maximum possible width determines the maximum possible width for the column. Since any cells in the table which span multiple columns are members of the left-most column which they span, the columns are traversed in a right-to-left order. This allows the calculation of the minimum/maximum possible column widths to take place in a single pass through the table columns. If the columns were traversed in a left-to-right order then the minimum/maximum width values could not be determined for columns having a column-spanning cell on the first pass through, since the factors determining the width of the column-spanning cell would not yet be known.
A similar process as described above may be implemented for an embodiment in which multiple column-spanning cells are considered to be members of the right-most column which they span. In such an embodiment, the columns may be traversed in a left-to-right order instead of a right-to-left order.
To set up the right-to-left column traversal, the column index is set to the index of the right-most column in step 620 of FIG. 4. In step 622 the column index loop control variable is tested to make sure it is within range. If all the columns have been processed then the execution illustrated in FIG. 4 completes. Otherwise, in step 624 certain variables are initialized in preparation for an iteration through the column-processing loop. The use of these variables is described below. It is noted that the use of variables such as these represents one embodiment of the table layout method, and other embodiments are possible. For example, information may be recorded in the table data structure itself instead of in variables.
In step 626, each cell of the column specified by the column index is processed. Step 626 is illustrated in more detail in the flowchart diagram of FIG. 5. In step 640 of FIG. 5, the row index is set to 0. In step 642 the row index loop control variable is tested to make it is within range. If the index is out of range, then all the cells of the current column have been processed, and the execution illustrated in FIG. 5 completes.
Otherwise, in step 646, the current cell, i.e., the cell specified by the current columnIndex and rowIndex, is checked to see whether it spans multiple columns. If the cell does not span multiple columns, then execution proceeds to step 648. In step 648, the minimum possible width for the cell is obtained, using information stored in step 606 of FIG. 3. If this width is greater than the current minimum possible width recorded for the column, then the minimum possible column width is set to the minimum possible width for the cell. (The minimum possible width for each column is initialized to zero.) Steps 652 and 654 are similar to steps 648 and 650. The maximum possible width for the cell is obtained in step 652. The current maximum possible width for the column is updated to this value in step 654 if necessary. Execution proceeds from step 654 to step 674.
If it is determined in step 646 that the cell does span multiple columns, then execution proceeds to step 660. In step 660, the minimum possible width for the cell is obtained, using information stored in step 606 of FIG. 3. This step is identical to step 648. In step 662, the minimum cell width is compared to the colspanMinimumWidth variable. A column may have more than one cell which spans multiple columns. The colspanMinimumWidth variable tracks the largest minimum width value of all these cells. If the minimum width value for the current cell is not greater than the colspanMinimumWidth value already recorded, then the current cell is ignored, and execution proceeds to step 674. As described below, the colspanMinimumWidth variable is used to adjust the minimum widths of the columns spanned by the cell, if necessary. For this adjustment, it is only necessary to track the largest minimum possible cell width of all the spanning cells.
If the minimum width value for the current cell is greater than the colspanMinimumWidth value already recorded, then the colspanMinimumWidth variable is updated in step 664. In step 666 the maximum possible width for the cell is calculated. In step 668 the colspanMaximumWidth variable is set to this maximum possible cell width. In step 670, the thisColumnsColspan variable is set to the number of columns spanned by the cell. The use of the colspanMinimumWidth, colspanMaximumWidth, and thisColumnsColspan variables is discussed below for FIG. 6.
As shown in FIG. 5, step 674 is reached from step 654, step 662, or step 670. At this point, the cell referenced by the current column and row indices has been processed, and the next cell in the current column will be processed. Thus, the rowIndex variable is incremented, and execution loops back to step 642. From step 642, another loop iteration through steps 646-674 occurs, or the loop ends, as appropriate. Once the loop of FIG. 5 ends, step 626 of FIG. 4 is complete, and execution proceeds to step 628 of FIG. 4. At this point, the cells of the current column have been processed to determine the minimum/maximum possible widths for the column. As described previously, the colspanMinimumWidth and colspanMaximumWidth variables may be set in step 626. In step 628, these values are used to adjust the minimum and maximum possible column widths of columns spanned by a cell in the current column, if necessary. Step 628 is described in more detail below with reference to FIG. 6. Once step 628 is complete, the current column has been processed. The columnIndex loop control variable is decremented in step 630 so that it references the next column to the left in the table. From step 630 execution proceeds to step 622, where the loop ends if the column index is out of range, or another loop iteration is performed, as appropriate.
FIG. 6 is a flowchart diagram illustrating step 628 of FIG. 4 in more detail. The steps of FIG. 6 utilize the variables colspanMinimumWidth, colspanMaximumWidth, and thisColumnsColspan which were set while processing the current column in the steps of FIG. 5. As described above, information for only one of a column's multiple column-spanning cells is tracked (the one with the largest minimum possible width). This cell is referred to below as the “largest spanning cell”.
The thisColumnsColspan variable indicates the number of columns spanned by the largest spanning cell. In step 680 the thisColumnsColspan variable is checked to see whether it is greater than 1. This variable is initialized to 1 in step 624 at the beginning of each iteration through the column-processing loop. If thisColumnsColspan is not greater than 1, then no cells spanning multiple columns were found in step 626, and execution returns to step 630 of FIG. 4. Otherwise, execution proceeds to step 682 of FIG. 6.
In step 682, the minSpannedColumnWidth variable is calculated by summing up the minimum possible width values recorded for each of the columns spanned by the largest spanning cell. Since the table columns are traversed in a right-to-left order, each of these values is already known. In step 684 the maxSpannedColumnWidth variable is calculated by summing up the maximum possible width values recorded for each of the columns spanned by the largest spanning cell.
In step 686, the colspanMinimumWidth variable is compared to the minSpannedColumnWidth variable. If colspanMinimumWidth is less than or equal to minSpannedColumnWidth, then the minimum possible widths of the spanned columns are already sufficiently large to hold the minimum possible width of the largest spanning cell. In this case, execution proceeds to step 690. However, if colspanMinimumWidth is greater than minSpannedColumnWidth, then one or more of the minimum possible width values of the spanned columns must be adjusted in order to hold the largest spanning cell. As shown in step 688, in one embodiment, a factor based on colspanMinimumWidth—minSpannedColumnWidth may be calculated, and the minimum possible width value for each of the spanned columns may be scaled upward. Other adjustment methods may be used in other embodiments.
The processes described above of course represent one embodiment, and various steps may be added, omitted, combined, altered, performed in different orders, etc. For example, the processes are discussed in terms of initializing an index to 0, etc. However, any of various well-known techniques for properly controlling iteration may be used.
As described above, once a table has been inspected, it can be apportioned, i.e., final dimensions may be assigned to the table and to each of the table rows and columns. FIG. 8 is a flowchart diagram illustrating an overview of one embodiment of table apportioning (step 504 of FIG. 2).
In step 550, the minimum/maximum possible column widths determined during the table inspection process are considered along with the available space for the table in order to assign a width to each table column. Step 550 is illustrated in more detail in FIG. 9.
In step 552, the width of the table is calculated, e.g., by summing up the column widths assigned in step 550.
Cell heights may be somewhat determined by cell widths. Few constraints are placed on cell height, since it is usually more visually appealing to display a table of a width that fits on a display screen, rather than to control the cell heights and have the table width overflow.
Thus, once the table columns have been assigned widths in step 550, a height may be assigned to each table row in step 554. Step 554 is illustrated in more detail in FIGS. 10 and 12.
In step 556, the height of the table is calculated, e.g., by summing up the row heights assigned in step 554.
FIG. 9 is a flowchart diagram illustrating step 550 of FIG. 8 in more detail. As shown in FIG. 9, there are three basic cases. In step 700 the minimum table width is calculated and compared to the available display space for the table. The minimum table width may be calculated by summing the minimum possible column widths for each column in the table, which were determined during the table inspection process described above. The available display space may be determined in various ways. For example, the available space value may be passed as a parameter to a table apportioning method or function. If the minimum table width is too large to fit into the available display space, i.e., the table width must overflow the available display space, then the minimum table width is used, and in step 702 the final column width for each column is set to its minimum possible value.
If the minimum table width is small enough to fit into the available space, then execution proceeds to step 704. If no preferred width for the table was specified, then the maximum table width is calculated. Otherwise, execution proceeds to step 708. The maximum table width may be calculated by summing the maximum possible column widths for each column in the table. If the maximum table value is small enough to fit into the available space, then the maximum table width is used, and in step 706 the final column width for each column is set to its maximum value.
If neither of the conditions in step 700 or 704 are met, then the table columns are scaled to make the table width be a particular value in step 708. If a preferred width for the table is specified, then the columns are scaled to match this preferred table width value. If no preferred table width is specified and the maximum table width is too large for the available space, then the columns are scaled to match the available space value. Any of various heuristics or algorithms may be applied for the scaling. For example, each column may be scaled with an equation such as:
colWidth = minColWidth + ((maxColWidth − minColWidth) * |
(availableSpace − minTableWidth) / | ||
(maxTableWidth - minTableWidth)) | ||
Other scaling methods may be applied in other embodiments. For example, individual scaling factors may be applied to different columns, depending on each column's content.
In step 554 of FIG. 8, a height is assigned to each table row. FIGS. 10 and 11 are flowchart diagrams illustrating step 554 in detail.
Just as table cells may span multiple columns, they may also span multiple rows. The below description accounts for cells that span multiple rows by processing rows in a bottom-to-top order, for reasons similar to the right-to-left column processing order described above.
To set up the bottom-to-top row traversal, the row index is set to the index of the bottom-most column in step 720 of FIG. 10. In step 722 the row index loop control variable is tested to make it is within range. If all the rows have been processed then the execution illustrated in FIG. 10 completes. Otherwise, in step 724 certain variables are initialized in preparation for an iteration through the row-processing loop. The use of these variables is described below. It is noted that the use of variables such as these represents one embodiment of the table layout method, and other embodiments are possible. For example, information may be recorded in the table data structure itself instead of in variables.
In step 726 each cell of the row specified by the row index is processed. Step 726 is illustrated in more detail in the flowchart diagram of FIG. 11. In step 740 of FIG. 11, the column index is set to 0. In step 742 the column index loop control variable is tested to make sure it is within range. If the index is out of range, then all the cells of the current row have been processed, and the execution illustrated in FIG. 11 completes.
Otherwise, in step 744, the contents of the current cell, i.e., the cell referenced by the current row index and column index, are layed out. The cell contents are layed out according to the cell width, which is determined from the assigned column widths as described above. Once the cell contents are layed out, the height of the cell is known.
In step 746, the cell is checked to see whether it spans multiple rows. If the cell does not span multiple rows, then execution proceeds to step 748. In step 748, the cell height is compared to the current height recorded for the row. (The height for each row is initialized to zero.) If the cell height is greater than the row height, then the height of the current row is set to the cell height. Execution proceeds from step 748 to step 760.
If the current cell does span multiple rows then execution proceeds from step 746 to step 750. In step 750 the number of rows spanned by the current cell is compared to the thisRowsRowspan variable value. If the current cell spans more rows than the value of thisRowsRowspan, then execution proceeds to step 756, where the value of the rowSpanHeight variable is set to the height of the current cell. The rowSpanHeight variable indicates the maximum height spanned by a row-spanning cell of the current row. Execution proceeds from step 756 to step 758, where the thisRowsRowspan value is updated to the number of rows spanned by the current cell. Execution proceeds from step 758 to step 760.
In step 750, if the current cell does not span more rows than the value of thisRowsRowspan, then execution proceeds to step 752. In step 752, the number of rows spanned by the current cell is again compared to the thisRowsRowspan variable value. If the two values are equal, then in step 754 the current cell height is checked to see if it is greater than the current value of rowSpanHeight. If so, then rowSpanHeight is updated to the height of the current cell, and execution proceeds to step 760. If the number of rows spanned by the current cell is not equal to thisRowsRowspan in the comparison of step 752, then execution proceeds to step 760.
Once step 760 is reached from step 748, 752, or 754, the current cell has been processed to determine how its height or other characteristics, such as the number of rows it spans, affect the calculation of the height of the current row. In step 760, the column index is incremented to reference the next column in the row, and execution loops back to step 742. From step 742, another loop iteration may be performed, or if all of the row's cells have been processed, then the row processing illustrated in FIG. 11 for step 726 of FIG. 10 may end.
Once the cells of the current row have been processed in step 726, execution proceeds to step 728 of FIG. 10. In step 728, the heights of the rows spanned by the largest spanning cell of the current row may be adjusted, if necessary. The row heights of these rows may be summed. If this sum is less than the height of the largest spanning cell (indicated by the rowSpanHeight variable), then the row heights may be adjusted. As discussed above for column width adjustment, the row height adjustment may be performed using any of various methods.
Once any necessary row height adjustments are made in step 728, the row index is decremented in step 730 to refer to the next highest row in the table, and execution loops back to step 722. From step 722, another loop iteration may be performed, or the execution illustrated in the flowchart diagram of FIG. 10 may end if all the table rows have already been processed.
The processes described above of course represent one embodiment, and various steps may be added, omitted, combined, altered, performed in different orders, etc. For example, the processes are discussed in terms of initializing an index to 0, etc. However, any of various well-known techniques for properly controlling iteration may be used.
As noted previously, some types of tables allow table nesting. For example, HTML tables may be nested. The following HTML code shows an example of a nested HTML table:
<TABLE> |
<TR><TD> |
<TR><TD> |
<BR>Nested table: | |
<TABLE BORDER=“1”> | |
<TR><TD> |
|
<TD> |
|
<TR><TD> |
|
<TD> |
|
</TABLE> |
<TR><TD> |
</TABLE> |
FIG. 12 illustrates what this table may look like when displayed.
In many cases, it may be desirable for a display table layout method to efficiently handle nested tables. For example, nested HTML tables are commonly found in web pages. Maximizing layout performance improvement may be especially important in laying out tables for small footprint devices, since these devices may have very little processing power. Also, the situations and environments in which these devices are used may make it especially important to layout tables quickly. For example, a user of a web browser application running in a cellular phone may need to quickly view a web page including nested tables in order to obtain an important phone number needed for an immediate situation, whereas a desktop computer user may typically browse the web in a more leisurely manner.
As discussed above, when a table description is parsed, data structures representing the table description may be created and stored in system memory. In one embodiment, the table description may be stored as objects comprising methods such as Inspect( ), Apportion( ), Normalize( ), etc. that correspond to the processes described above. The display table layout method may traverse through the table, invoking these methods and controlling the recursion process to efficiently handle nested tables.
The following HTML code describes a simple HTML table with one cell:
<table> | ||
<tr> | ||
<td>cell data | ||
</table> | ||
FIG. 13 illustrates the resulting method invocations when this HTML table is processed. The method invocation trace shown in FIG. 13 follows the general process described above for laying out a display table. As shown, the display table is first inspected. Inspecting the table comprises inspecting each table cell. (In this example there is only one cell.) After the table is inspected, the table is then apportioned and normalized as described above and shown in FIG. 13.
The following HTML code describes a simple HTML table with one cell that includes a nested table with one cell:
<table>table1 | ||
<tr> | ||
<td>cell <table> <tr><td>nested cell </table> | ||
</table> | ||
FIG. 14 illustrates the resulting method invocations when this HTML table is processed. The method invocation trace shown in FIG. 14 is similar to that in FIG. 13. However, as shown in FIG. 14, the inspection process for the cell of the outer table results in a second inspection process being initiated for the nested table included in the cell of the outer table. As shown in the figure, the nested table is inspected before minimum and maximum possible widths are assigned to the outer table cell. Similarly the apportioning process for the cell of the outer table results in a second apportioning process being initiated for the nested table included in the cell of the outer table.
The method invocation trace of FIG. 14 illustrates a single method invocation controlling the overall layout process for the outer table, i.e., the “Layout (Body)” method invocation. Note that when the cell of the outer table is layed out, (shown by the “Layout (Cell1)” method call) there is no such method invocation to layout the nested table included in the cell of the outer table. The nested table is identical to the table processed in FIG. 13. Thus, invoking the “Layout(Body)” method on the inner table would result in the FIG. 13 method invocation trace being included under the “Layout (Cell1)” method invocation in FIG. 14. As shown in FIG. 14, each of the FIG. 13 method invocations are already performed in the FIG. 14 method invocation trace. Thus, the layout method described herein is able to avoid the duplication of processing.
Although the embodiments above have been described in considerable detail, numerous variations and modifications will become apparent to those skilled in the art once the above disclosure is fully appreciated. It is intended that the following claims be interpreted to embrace all such variations and modifications.
Claims (36)
1. A method for efficiently laying out a display table specified by a display table description, wherein the display table comprises rows and columns, wherein the rows and columns define cells, the method comprising:
inspecting the display table description, wherein said inspecting comprises determining the minimum and maximum possible widths for each cell of the display table and using the minimum and maximum possible widths for each cell to determine the minimum and maximum possible widths for each column of the display table;
apportioning the display table, wherein said apportioning comprises using the minimum and maximum possible widths for each column of the display table to assign a width to each column of the display table and determining the resulting height of each table cell based on the assigned column widths, and using the cell height information to assign a height to each row of the display table.
2. The method of claim 1 , further comprising:
normalizing the display table, wherein said normalizing comprises determining absolute table coordinates from relative table coordinates, wherein said apportioning the display table comprises determining the relative table coordinates.
3. The method of claim 1 ,
wherein the display table comprises a plurality of rows and columns;
wherein the display table includes a cell that spans at least two columns.
4. The method of claim 1 ,
wherein the display table includes a cell comprising a nested table.
5. The method of claim 1 ,
wherein the display table is represented in memory as an object.
6. The method of claim 5 ,
wherein the display table object comprises an “inspect” method and an “apportion” method;
wherein said inspecting the display table comprises invoking the “inspect” method of the display table object;
wherein said apportioning the display table comprises invoking the “apportion” method of the display table object.
7. The method of claim 1 ,
wherein said determining the minimum and maximum possible widths for each cell of the display table is dependent upon a content of said each cell.
8. The method of claim 5 ,
wherein the content in a particular cell includes text, and wherein the text is displayable in a first width and a second width.
9. The method of claim 8 ,
wherein the first width and the second width represent the minimum and maximum possible widths for said particular cell.
10. The method of claim 1 ,
wherein the display table description comprises a markup language table description.
11. The method of claim 1 ,
wherein the display table description comprises a hypertext markup language (HTML) table description.
12. The method of claim 1 ,
wherein s aid inspecting and said apportioning are implemented in a small footprint device.
13. A system comprising:
a processing unit;
memory coupled to the processing unit;
a program stored in the memory, wherein the program is executable to lay out a display table specified by a display table description, wherein the display table comprises rows and columns, wherein the rows and columns define cells;
wherein said laying out a display table comprises:
inspecting the display table description, wherein said inspecting comprises determining the minimum and maximum possible widths for each cell of the display table and using the minimum and maximum possible widths for each cell to determine the minimum and maximum possible widths for each column of the display table;
apportioning the display table, wherein said apportioning comprises using the minimum and maximum possible widths for each column of the display table to assign a width to each column of the display table and determining the resulting height of each table cell based on the assigned column widths, and using the cell height information to assign a height to each row of the display table.
14. The system of claim 13 , wherein said laying out a display table further comprises:
normalizing the display table, wherein said normalizing comprises determining absolute table coordinates from relative table coordinates, wherein said apportioning the display table comprises determining the relative table coordinates.
15. The system of claim 13 ,
wherein the display table comprises a plurality of rows and columns;
wherein the display table includes a cell that spans at least two columns.
16. The system of claim 13 ,
wherein the display table includes a cell comprising a nested table.
17. The system of claim 13 ,
wherein the display table is represented in the memory as an object.
18. The system of claim 17 ,
wherein the display table object comprises an “inspect” method and an “apportion” method;
wherein said inspecting the display table comprises invoking the “inspect” method of the display table object;
wherein said apportioning the display table comprises invoking the “apportion” method of the display table object.
19. The system of claim 13 ,
wherein said determining the minimum and maximum possible widths for each cell of the display table is dependent upon a content of said each cell.
20. The system of claim 19 ,
wherein the content in a particular cell includes text, and wherein the text is displayable in a first width and a second width.
21. The system of claim 20 ,
wherein the first width and the second width represent the minimum and maximum possible widths for said particular cell.
22. The system of claim 13 ,
wherein the display table description comprises a markup language table description.
23. The system of claim 13 ,
wherein the display table description comprises a hypertext markup language (HTML) table description.
24. The system of claim 13 ,
wherein the processing unit and memory are included within a small footprint device.
25. A memory medium comprising program instructions which implement laying out a display table specified by a display table description, wherein the display table comprises rows and columns, wherein the rows and columns define cells, wherein said laying out the display table comprises:
inspecting the display table description, wherein said inspecting comprises determining the minimum and maximum possible widths for each cell of the display table and using the minimum and maximum possible widths for each cell to determine the minimum and maximum possible widths for each column of the display table;
apportioning the display table, wherein said apportioning comprises using the minimum and maximum possible widths for each column of the display table to assign a width to each column of the display table and determining the resulting height of each table cell based on the assigned column widths, and using the cell height information to assign a height to each row of the display table.
26. The memory medium of claim 25 , wherein said laying out the display table further comprises:
normalizing the display table, wherein said normalizing comprises determining absolute table coordinates from relative table coordinates, wherein said apportioning the display table comprises determining the relative table coordinates.
27. The memory medium of claim 25 ,
wherein the display table comprises a plurality of rows and columns;
wherein the display table includes a cell that spans at least two columns.
28. The memory medium of claim 25 ,
wherein the display table includes a cell comprising a nested table.
29. The memory medium of claim 25 ,
wherein the display table is represented in memory as an object.
30. The memory medium of claim 29 ,
wherein the display table object comprises an “inspect” method and an “apportion” method;
wherein said inspecting the display table comprises invoking the “inspect” method of the display table object;
wherein said apportioning the display table comprises invoking the “apportion” method of the display table object.
31. The memory medium of claim 25 ,
wherein said determining the minimum and maximum possible widths for each cell of the display table is dependent upon a content of said each cell.
32. The memory medium of claim 31 ,
wherein the content in a particular cell includes text, and wherein the text is displayable in a first width and a second width.
33. The memory medium of claim 32 ,
wherein the first width and the second width represent the minimum and maximum possible widths for said particular cell.
34. The memory medium of claim 25 ,
wherein the display table description comprises a markup language table description.
35. The memory medium of claim 25 ,
wherein the display table description comprises a hypertext markup language (HTML) table description.
36. The memory medium of claim 25 ,
wherein said inspecting and said apportioning are implemented in a small footprint device.
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/461,896 US6639611B1 (en) | 1999-12-15 | 1999-12-15 | System and method for efficient layout of a display table |
EP00986403A EP1238346A1 (en) | 1999-12-15 | 2000-12-15 | System and method for efficient layout of a display table |
JP2001546005A JP2003517685A (en) | 1999-12-15 | 2000-12-15 | System and method for efficiently laying out a display table |
PCT/US2000/033968 WO2001044983A1 (en) | 1999-12-15 | 2000-12-15 | System and method for efficient layout of a display table |
AU22647/01A AU2264701A (en) | 1999-12-15 | 2000-12-15 | System and method for efficient layout of a display table |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/461,896 US6639611B1 (en) | 1999-12-15 | 1999-12-15 | System and method for efficient layout of a display table |
Publications (1)
Publication Number | Publication Date |
---|---|
US6639611B1 true US6639611B1 (en) | 2003-10-28 |
Family
ID=23834385
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/461,896 Expired - Lifetime US6639611B1 (en) | 1999-12-15 | 1999-12-15 | System and method for efficient layout of a display table |
Country Status (5)
Country | Link |
---|---|
US (1) | US6639611B1 (en) |
EP (1) | EP1238346A1 (en) |
JP (1) | JP2003517685A (en) |
AU (1) | AU2264701A (en) |
WO (1) | WO2001044983A1 (en) |
Cited By (63)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020011970A1 (en) * | 2000-06-19 | 2002-01-31 | Hewlett-Packard Company | Process for automatically displaying graphical objects such as buttons in a web page |
US20020013165A1 (en) * | 2000-05-26 | 2002-01-31 | Christian Ostergaard | Displaying a table |
US20020069226A1 (en) * | 2000-07-28 | 2002-06-06 | Thierschmidt Klaus Peter | Method and apparatus for outputting a table |
US20020103830A1 (en) * | 2001-01-31 | 2002-08-01 | Hamaide Fabrice C. | Method for controlling the presentation of multimedia content on an internet web page |
US20030107594A1 (en) * | 2001-12-12 | 2003-06-12 | International Business Machines Corporation | Method for mapping screen display objects with spatial coordinates into an HTML table |
US20030221168A1 (en) * | 2002-04-24 | 2003-11-27 | Canon Kabushiki Kaisha | Markup-language document formatting in memory-constrained environment |
US20040061717A1 (en) * | 2002-09-30 | 2004-04-01 | Menon Rama R. | Mechanism for voice-enabling legacy internet content for use with multi-modal browsers |
US20050086586A1 (en) * | 2003-10-21 | 2005-04-21 | Kim Steven P. | System and method to display table data residing in columns outside the viewable area of a window |
US20050183008A1 (en) * | 2004-02-17 | 2005-08-18 | Crider Michael P. | Method and system for separation of content and layout definitions in a display description |
US6981209B1 (en) * | 2000-09-26 | 2005-12-27 | Microsoft Corporation | Automatic layout of vertical flow oriented characters within a defined area |
US20060026512A1 (en) * | 2004-07-30 | 2006-02-02 | Microsoft Corporation | Systems and methods for pagination using variable page dimensions |
US20060036955A1 (en) * | 2004-08-12 | 2006-02-16 | Microsoft Corporation | System and method of displaying content on small screen computing devices |
US7065704B1 (en) * | 2002-07-18 | 2006-06-20 | Embedded Internet Solutions, Inc. | Methods for fast HTML rendering |
US20060136811A1 (en) * | 2004-12-20 | 2006-06-22 | Microsoft Corporation | Method and computer-readable medium for generating a multiple column layout |
US20070055685A1 (en) * | 2005-08-18 | 2007-03-08 | Avaya Technology Corp. | Telecommunications terminal with multiple display modes |
US20070118795A1 (en) * | 2005-11-23 | 2007-05-24 | Peter Noyes | A Method of Processing Annotations Using an Editable Multi-Dimensional Catalog |
US20070136655A1 (en) * | 2005-12-12 | 2007-06-14 | Peters Johan C | Method and system for linearly resizing columns in a table |
US20070136654A1 (en) * | 2005-12-12 | 2007-06-14 | Peters Johan C | Method and system for ordered resizing columns in a table |
US20080012859A1 (en) * | 2006-03-10 | 2008-01-17 | International Business Machines Corporation | Relayout of all or part of a graph in association with a change in state of a graph element |
US7366978B1 (en) * | 2003-02-13 | 2008-04-29 | Microsoft Corporation | Method and system for creating a grid-like coordinate system for addressing data contained in an irregular computer-generated table |
US20080120536A1 (en) * | 2006-11-17 | 2008-05-22 | Canon Kabushiki Kaisha | Information processing apparatus, control method, and computer-readable medium |
US20080147712A1 (en) * | 2006-12-14 | 2008-06-19 | Ianywhere Solutions, Inc. | Table synthesis from raw data |
US7421649B1 (en) * | 2003-04-28 | 2008-09-02 | Adobe Systems Incorporated | Enhanced visual table editing |
US20080282189A1 (en) * | 2007-05-09 | 2008-11-13 | Sap Ag | System and method for simultaneous display of multiple tables |
US20090083614A1 (en) * | 2007-09-26 | 2009-03-26 | Xerox Corporation | System and method for optimizing information display in spreadsheets and tables |
US20090085921A1 (en) * | 2007-10-01 | 2009-04-02 | Lydia Mai Do | Populate Web-Based Content Based on Space Availability |
US7549116B1 (en) | 2008-03-31 | 2009-06-16 | International Business Machines Corporation | Computer program product for displaying multiple row layouts in a table |
US20090183065A1 (en) * | 2003-02-14 | 2009-07-16 | Access Co., Ltd. | Browser program for performing table-layout |
US20100083092A1 (en) * | 2008-09-30 | 2010-04-01 | Apple Inc. | Dynamic Schema Creation |
US20100185974A1 (en) * | 2007-07-02 | 2010-07-22 | Koninklijke Philips Electronics N.V. | Method of presenting a schedule of events |
US20100287467A1 (en) * | 2005-03-30 | 2010-11-11 | Research In Motion Limited | Method for requesting and viewing a preview of a table attachment on a mobile communication device |
US8001476B2 (en) | 2004-11-16 | 2011-08-16 | Open Text Inc. | Cellular user interface |
US8122338B2 (en) | 2003-09-11 | 2012-02-21 | Opera Software Asa | Distinguishing and displaying tables in documents |
US8255828B2 (en) | 2004-08-16 | 2012-08-28 | Microsoft Corporation | Command user interface for displaying selectable software functionality controls |
CN102693217A (en) * | 2012-05-15 | 2012-09-26 | 中国人民解放军91550部队 | Automatic layout method by table font and paper size analysis |
US20120259714A1 (en) * | 2011-04-11 | 2012-10-11 | Toshiba Tec Kabushiki Kaisha | Allocation apparatus and allocation method |
US8429566B2 (en) | 2010-11-09 | 2013-04-23 | Honeywell International Inc. | Programmable HVAC controller with cross column selection on a touch screen interface |
US20130275864A1 (en) * | 2012-04-13 | 2013-10-17 | John Alex William | Rendering digital report elements using a layout optimization tool |
US8707159B1 (en) * | 2001-07-06 | 2014-04-22 | Qualcomm Incorporated | Translating tabular data formatted for one display device to a format for display on other display device |
US8793604B2 (en) | 2004-11-16 | 2014-07-29 | Open Text S.A. | Spatially driven content presentation in a cellular environment |
US20150006135A1 (en) * | 2013-06-28 | 2015-01-01 | Suparna Deb | Layout algorithm for entity relation model diagram |
US9015621B2 (en) | 2004-08-16 | 2015-04-21 | Microsoft Technology Licensing, Llc | Command user interface for displaying multiple sections of software functionality controls |
US20150142781A1 (en) * | 2013-11-21 | 2015-05-21 | Amit Nigam | Interacting with resources exchanged using open data protocol |
US20150347370A1 (en) * | 2013-02-21 | 2015-12-03 | International Business Machines Corporation | Optimizing rendering of data tables |
US20160026616A1 (en) * | 2014-07-28 | 2016-01-28 | Microsoft Corporation | Presenting dataset of spreadsheet in form based view |
US20160306778A1 (en) * | 2015-03-09 | 2016-10-20 | Vinyl Development LLC | Adaptive Column Selection |
US9588781B2 (en) | 2008-03-31 | 2017-03-07 | Microsoft Technology Licensing, Llc | Associating command surfaces with multiple active components |
US9619116B2 (en) | 2007-06-29 | 2017-04-11 | Microsoft Technology Licensing, Llc | Communication between a document editor in-space user interface and a document editor out-space user interface |
US9645698B2 (en) | 2004-08-16 | 2017-05-09 | Microsoft Technology Licensing, Llc | User interface for displaying a gallery of formatting options applicable to a selected object |
US9665850B2 (en) | 2008-06-20 | 2017-05-30 | Microsoft Technology Licensing, Llc | Synchronized conversation-centric message list and message reading pane |
US9690448B2 (en) | 2004-08-16 | 2017-06-27 | Microsoft Corporation | User interface for displaying selectable software functionality controls that are relevant to a selected object |
US9715678B2 (en) | 2003-06-26 | 2017-07-25 | Microsoft Technology Licensing, Llc | Side-by-side shared calendars |
US9727989B2 (en) | 2006-06-01 | 2017-08-08 | Microsoft Technology Licensing, Llc | Modifying and formatting a chart using pictorially provided chart elements |
US9875009B2 (en) | 2009-05-12 | 2018-01-23 | Microsoft Technology Licensing, Llc | Hierarchically-organized control galleries |
US10248687B2 (en) | 2005-09-12 | 2019-04-02 | Microsoft Technology Licensing, Llc | Expanded search and find user interface |
US10366114B2 (en) | 2015-11-15 | 2019-07-30 | Microsoft Technology Licensing, Llc | Providing data presentation functionality associated with collaboration database |
US10482429B2 (en) | 2003-07-01 | 2019-11-19 | Microsoft Technology Licensing, Llc | Automatic grouping of electronic mail |
US10521073B2 (en) | 2007-06-29 | 2019-12-31 | Microsoft Technology Licensing, Llc | Exposing non-authoring features through document status information in an out-space user interface |
US10558742B2 (en) | 2015-03-09 | 2020-02-11 | Vinyl Development LLC | Responsive user interface system |
US10769826B2 (en) * | 2014-12-31 | 2020-09-08 | Servicenow, Inc. | Visual task board visualization |
US20210110100A1 (en) * | 2016-06-10 | 2021-04-15 | ProntoForms Corporatioin | Flexible online form display |
US11003847B1 (en) * | 2019-11-05 | 2021-05-11 | Sap Se | Smart dynamic column sizing |
US11496435B2 (en) * | 2016-10-28 | 2022-11-08 | The Nielsen Company (Us), Llc | Systems, methods, and apparatus to facilitate mapping a device name to a hardware address |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2957431A1 (en) * | 2010-03-11 | 2011-09-16 | Ormetis | Data table displaying method, involves executing action to adjust sizes of visible cell in window based on content of cell, and repositioning object in position before action is executed |
WO2011130283A1 (en) | 2010-04-12 | 2011-10-20 | Google Inc. | Row heights in electronic documents |
JP5634140B2 (en) * | 2010-06-23 | 2014-12-03 | キヤノン株式会社 | Information processing apparatus, display method, and program |
US9864732B2 (en) * | 2016-05-02 | 2018-01-09 | Google Inc. | User interfaces that facilitate management of formatting of digital content |
Citations (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0440496A2 (en) | 1990-02-01 | 1991-08-07 | Brother Kogyo Kabushiki Kaisha | Layout display control system for document processing apparatus |
US5379372A (en) * | 1990-09-13 | 1995-01-03 | Wu; William C. | Apparatus and method for designing a form structure using column and row rules |
US5425138A (en) | 1991-12-26 | 1995-06-13 | Casio Computer Co., Ltd. | Apparatus and method for automatically editing documents including text data and table data with ruled lines |
US5588099A (en) * | 1994-09-01 | 1996-12-24 | Microsoft Corporation | Method and system for automatically resizing tables |
US5768606A (en) * | 1995-08-31 | 1998-06-16 | International Business Machines Corporation | Method, system, computer program product and program storage device for declaring column widths of matrices |
US5808914A (en) | 1994-04-11 | 1998-09-15 | Fuji Xerox Co., Ltd. | Table allocating apparatus and method |
US5812131A (en) * | 1997-03-07 | 1998-09-22 | International Business Machines Corp. | Mobile client computer programmed to process table displays |
US5835916A (en) * | 1995-02-24 | 1998-11-10 | Sanyo Electric Co., Ltd. | Document preparing apparatus capable of relocating cells forming a table and resetting cell size |
US5845299A (en) * | 1996-07-29 | 1998-12-01 | Rae Technology Llc | Draw-based editor for web pages |
US5893127A (en) * | 1996-11-18 | 1999-04-06 | Canon Information Systems, Inc. | Generator for document with HTML tagged table having data elements which preserve layout relationships of information in bitmap image of original document |
US6023714A (en) * | 1997-04-24 | 2000-02-08 | Microsoft Corporation | Method and system for dynamically adapting the layout of a document to an output device |
US6044383A (en) * | 1996-08-13 | 2000-03-28 | Fuji Xerox Co., Ltd. | Tabulation device |
US6055550A (en) * | 1996-03-21 | 2000-04-25 | Oracle Corporation | Auto sizing of fields for displaying computer forms |
US6088708A (en) * | 1997-01-31 | 2000-07-11 | Microsoft Corporation | System and method for creating an online table from a layout of objects |
US6300947B1 (en) * | 1998-07-06 | 2001-10-09 | International Business Machines Corporation | Display screen and window size related web page adaptation system |
US6311196B1 (en) * | 1997-04-09 | 2001-10-30 | Rae Technology Inc. | Method and apparatus for implementing web pages having master borders |
US6326970B1 (en) * | 1997-05-16 | 2001-12-04 | Liberate Technologies | TV centric layout |
US6504544B1 (en) * | 1999-07-30 | 2003-01-07 | Curl Corporation | Processing layout of text graphical objects |
-
1999
- 1999-12-15 US US09/461,896 patent/US6639611B1/en not_active Expired - Lifetime
-
2000
- 2000-12-15 WO PCT/US2000/033968 patent/WO2001044983A1/en active Search and Examination
- 2000-12-15 EP EP00986403A patent/EP1238346A1/en not_active Withdrawn
- 2000-12-15 AU AU22647/01A patent/AU2264701A/en not_active Abandoned
- 2000-12-15 JP JP2001546005A patent/JP2003517685A/en active Pending
Patent Citations (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5289571A (en) * | 1990-02-01 | 1994-02-22 | Brother Kogyo Kabushiki Kaisha | Layout display control system for displaying size of displayed table |
EP0440496A2 (en) | 1990-02-01 | 1991-08-07 | Brother Kogyo Kabushiki Kaisha | Layout display control system for document processing apparatus |
US5379372A (en) * | 1990-09-13 | 1995-01-03 | Wu; William C. | Apparatus and method for designing a form structure using column and row rules |
US5425138A (en) | 1991-12-26 | 1995-06-13 | Casio Computer Co., Ltd. | Apparatus and method for automatically editing documents including text data and table data with ruled lines |
US5808914A (en) | 1994-04-11 | 1998-09-15 | Fuji Xerox Co., Ltd. | Table allocating apparatus and method |
US5588099A (en) * | 1994-09-01 | 1996-12-24 | Microsoft Corporation | Method and system for automatically resizing tables |
US5835916A (en) * | 1995-02-24 | 1998-11-10 | Sanyo Electric Co., Ltd. | Document preparing apparatus capable of relocating cells forming a table and resetting cell size |
US5768606A (en) * | 1995-08-31 | 1998-06-16 | International Business Machines Corporation | Method, system, computer program product and program storage device for declaring column widths of matrices |
US6055550A (en) * | 1996-03-21 | 2000-04-25 | Oracle Corporation | Auto sizing of fields for displaying computer forms |
US5845299A (en) * | 1996-07-29 | 1998-12-01 | Rae Technology Llc | Draw-based editor for web pages |
US6044383A (en) * | 1996-08-13 | 2000-03-28 | Fuji Xerox Co., Ltd. | Tabulation device |
US5893127A (en) * | 1996-11-18 | 1999-04-06 | Canon Information Systems, Inc. | Generator for document with HTML tagged table having data elements which preserve layout relationships of information in bitmap image of original document |
US6088708A (en) * | 1997-01-31 | 2000-07-11 | Microsoft Corporation | System and method for creating an online table from a layout of objects |
US5812131A (en) * | 1997-03-07 | 1998-09-22 | International Business Machines Corp. | Mobile client computer programmed to process table displays |
US6311196B1 (en) * | 1997-04-09 | 2001-10-30 | Rae Technology Inc. | Method and apparatus for implementing web pages having master borders |
US6023714A (en) * | 1997-04-24 | 2000-02-08 | Microsoft Corporation | Method and system for dynamically adapting the layout of a document to an output device |
US6326970B1 (en) * | 1997-05-16 | 2001-12-04 | Liberate Technologies | TV centric layout |
US6300947B1 (en) * | 1998-07-06 | 2001-10-09 | International Business Machines Corporation | Display screen and window size related web page adaptation system |
US6504544B1 (en) * | 1999-07-30 | 2003-01-07 | Curl Corporation | Processing layout of text graphical objects |
Non-Patent Citations (2)
Title |
---|
Raggett, "HTML Tables," May 1996, pp. 1-23. |
Wireless Application Protocol, Wireless Markup Language Specification, Apr. 1998, Wireless Application Protocol Forum, Ltd., pp. 1-59. |
Cited By (107)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6839575B2 (en) * | 2000-05-26 | 2005-01-04 | Nokia Mobile Phones Limited | Displaying a table |
US20020013165A1 (en) * | 2000-05-26 | 2002-01-31 | Christian Ostergaard | Displaying a table |
US6954903B2 (en) * | 2000-06-19 | 2005-10-11 | Hewlett-Packard Development Company, L.P. | Process for automatically displaying graphical objects such as buttons in a web page |
US20020011970A1 (en) * | 2000-06-19 | 2002-01-31 | Hewlett-Packard Company | Process for automatically displaying graphical objects such as buttons in a web page |
US20020069226A1 (en) * | 2000-07-28 | 2002-06-06 | Thierschmidt Klaus Peter | Method and apparatus for outputting a table |
US6981209B1 (en) * | 2000-09-26 | 2005-12-27 | Microsoft Corporation | Automatic layout of vertical flow oriented characters within a defined area |
US20020103830A1 (en) * | 2001-01-31 | 2002-08-01 | Hamaide Fabrice C. | Method for controlling the presentation of multimedia content on an internet web page |
US8707159B1 (en) * | 2001-07-06 | 2014-04-22 | Qualcomm Incorporated | Translating tabular data formatted for one display device to a format for display on other display device |
US6948132B2 (en) * | 2001-12-12 | 2005-09-20 | International Business Machines Corporation | Method for mapping screen display objects with spatial coordinates into an HTML table |
US20030107594A1 (en) * | 2001-12-12 | 2003-06-12 | International Business Machines Corporation | Method for mapping screen display objects with spatial coordinates into an HTML table |
US7313758B2 (en) * | 2002-04-24 | 2007-12-25 | Canon Kabushiki Kaisha | Markup-language document formatting in memory-constrained environment |
US20030221168A1 (en) * | 2002-04-24 | 2003-11-27 | Canon Kabushiki Kaisha | Markup-language document formatting in memory-constrained environment |
US7065704B1 (en) * | 2002-07-18 | 2006-06-20 | Embedded Internet Solutions, Inc. | Methods for fast HTML rendering |
US20040061717A1 (en) * | 2002-09-30 | 2004-04-01 | Menon Rama R. | Mechanism for voice-enabling legacy internet content for use with multi-modal browsers |
US7366978B1 (en) * | 2003-02-13 | 2008-04-29 | Microsoft Corporation | Method and system for creating a grid-like coordinate system for addressing data contained in an irregular computer-generated table |
US8407582B2 (en) * | 2003-02-14 | 2013-03-26 | Access Co., Ltd. | Browser program for performing table-layout |
US20090183065A1 (en) * | 2003-02-14 | 2009-07-16 | Access Co., Ltd. | Browser program for performing table-layout |
US7421649B1 (en) * | 2003-04-28 | 2008-09-02 | Adobe Systems Incorporated | Enhanced visual table editing |
US9170991B2 (en) | 2003-04-28 | 2015-10-27 | Adobe Systems Incorporated | Enhanced visual table editing |
US9715678B2 (en) | 2003-06-26 | 2017-07-25 | Microsoft Technology Licensing, Llc | Side-by-side shared calendars |
US10482429B2 (en) | 2003-07-01 | 2019-11-19 | Microsoft Technology Licensing, Llc | Automatic grouping of electronic mail |
US8122338B2 (en) | 2003-09-11 | 2012-02-21 | Opera Software Asa | Distinguishing and displaying tables in documents |
US7216291B2 (en) * | 2003-10-21 | 2007-05-08 | International Business Machines Corporation | System and method to display table data residing in columns outside the viewable area of a window |
US20050086586A1 (en) * | 2003-10-21 | 2005-04-21 | Kim Steven P. | System and method to display table data residing in columns outside the viewable area of a window |
US7856596B2 (en) * | 2004-02-17 | 2010-12-21 | Microsoft Corporation | Method and system for separation of content and layout definitions in a display description |
US20050183008A1 (en) * | 2004-02-17 | 2005-08-18 | Crider Michael P. | Method and system for separation of content and layout definitions in a display description |
US20060026512A1 (en) * | 2004-07-30 | 2006-02-02 | Microsoft Corporation | Systems and methods for pagination using variable page dimensions |
US7581178B2 (en) * | 2004-07-30 | 2009-08-25 | Microsoft Corporation | Systems and methods for pagination using variable page dimensions |
US20060036955A1 (en) * | 2004-08-12 | 2006-02-16 | Microsoft Corporation | System and method of displaying content on small screen computing devices |
US7721197B2 (en) * | 2004-08-12 | 2010-05-18 | Microsoft Corporation | System and method of displaying content on small screen computing devices |
US7469388B1 (en) * | 2004-08-12 | 2008-12-23 | Microsoft Corporation | Direction-based system and method of generating commands |
US9690448B2 (en) | 2004-08-16 | 2017-06-27 | Microsoft Corporation | User interface for displaying selectable software functionality controls that are relevant to a selected object |
US10521081B2 (en) | 2004-08-16 | 2019-12-31 | Microsoft Technology Licensing, Llc | User interface for displaying a gallery of formatting options |
US8255828B2 (en) | 2004-08-16 | 2012-08-28 | Microsoft Corporation | Command user interface for displaying selectable software functionality controls |
US9645698B2 (en) | 2004-08-16 | 2017-05-09 | Microsoft Technology Licensing, Llc | User interface for displaying a gallery of formatting options applicable to a selected object |
US9223477B2 (en) | 2004-08-16 | 2015-12-29 | Microsoft Technology Licensing, Llc | Command user interface for displaying selectable software functionality controls |
US9690450B2 (en) | 2004-08-16 | 2017-06-27 | Microsoft Corporation | User interface for displaying selectable software functionality controls that are relevant to a selected object |
US10437431B2 (en) | 2004-08-16 | 2019-10-08 | Microsoft Technology Licensing, Llc | Command user interface for displaying selectable software functionality controls |
US10635266B2 (en) | 2004-08-16 | 2020-04-28 | Microsoft Technology Licensing, Llc | User interface for displaying selectable software functionality controls that are relevant to a selected object |
US9015621B2 (en) | 2004-08-16 | 2015-04-21 | Microsoft Technology Licensing, Llc | Command user interface for displaying multiple sections of software functionality controls |
US8001476B2 (en) | 2004-11-16 | 2011-08-16 | Open Text Inc. | Cellular user interface |
US10055428B2 (en) | 2004-11-16 | 2018-08-21 | Open Text Sa Ulc | Spatially driven content presentation in a cellular environment |
US9304837B2 (en) | 2004-11-16 | 2016-04-05 | Open Text S.A. | Cellular user interface |
US10222943B2 (en) | 2004-11-16 | 2019-03-05 | Open Text Sa Ulc | Cellular user interface |
US8793604B2 (en) | 2004-11-16 | 2014-07-29 | Open Text S.A. | Spatially driven content presentation in a cellular environment |
US7472340B2 (en) * | 2004-12-20 | 2008-12-30 | Microsoft Corporation | Method and computer-readable medium for generating a multiple column layout |
US20060136811A1 (en) * | 2004-12-20 | 2006-06-22 | Microsoft Corporation | Method and computer-readable medium for generating a multiple column layout |
US20100287467A1 (en) * | 2005-03-30 | 2010-11-11 | Research In Motion Limited | Method for requesting and viewing a preview of a table attachment on a mobile communication device |
US20070055685A1 (en) * | 2005-08-18 | 2007-03-08 | Avaya Technology Corp. | Telecommunications terminal with multiple display modes |
US10248687B2 (en) | 2005-09-12 | 2019-04-02 | Microsoft Technology Licensing, Llc | Expanded search and find user interface |
US20070118795A1 (en) * | 2005-11-23 | 2007-05-24 | Peter Noyes | A Method of Processing Annotations Using an Editable Multi-Dimensional Catalog |
US7725815B2 (en) * | 2005-12-12 | 2010-05-25 | Sap Ag | Method and system for ordered resizing columns in a table |
US20070136655A1 (en) * | 2005-12-12 | 2007-06-14 | Peters Johan C | Method and system for linearly resizing columns in a table |
US20070136654A1 (en) * | 2005-12-12 | 2007-06-14 | Peters Johan C | Method and system for ordered resizing columns in a table |
US20080012859A1 (en) * | 2006-03-10 | 2008-01-17 | International Business Machines Corporation | Relayout of all or part of a graph in association with a change in state of a graph element |
US7477263B2 (en) | 2006-03-10 | 2009-01-13 | International Business Machines Corporation | Relayout of all or part of a graph in association with a change in state of a graph element |
US9727989B2 (en) | 2006-06-01 | 2017-08-08 | Microsoft Technology Licensing, Llc | Modifying and formatting a chart using pictorially provided chart elements |
US10482637B2 (en) | 2006-06-01 | 2019-11-19 | Microsoft Technology Licensing, Llc | Modifying and formatting a chart using pictorially provided chart elements |
US20080120536A1 (en) * | 2006-11-17 | 2008-05-22 | Canon Kabushiki Kaisha | Information processing apparatus, control method, and computer-readable medium |
US8370738B2 (en) * | 2006-11-17 | 2013-02-05 | Canon Kabushiki Kaisha | Information processing apparatus, control method, and computer-readable medium |
US9075855B2 (en) * | 2006-12-14 | 2015-07-07 | Sybase, Inc. | Table synthesis from raw data |
US20080147712A1 (en) * | 2006-12-14 | 2008-06-19 | Ianywhere Solutions, Inc. | Table synthesis from raw data |
US8448062B2 (en) | 2007-05-09 | 2013-05-21 | Sap Ag | System and method for simultaneous display of multiple tables |
US20080282189A1 (en) * | 2007-05-09 | 2008-11-13 | Sap Ag | System and method for simultaneous display of multiple tables |
US7925989B2 (en) * | 2007-05-09 | 2011-04-12 | Sap Ag | System and method for simultaneous display of multiple tables |
US10521073B2 (en) | 2007-06-29 | 2019-12-31 | Microsoft Technology Licensing, Llc | Exposing non-authoring features through document status information in an out-space user interface |
US10592073B2 (en) | 2007-06-29 | 2020-03-17 | Microsoft Technology Licensing, Llc | Exposing non-authoring features through document status information in an out-space user interface |
US10642927B2 (en) | 2007-06-29 | 2020-05-05 | Microsoft Technology Licensing, Llc | Transitions between user interfaces in a content editing application |
US9619116B2 (en) | 2007-06-29 | 2017-04-11 | Microsoft Technology Licensing, Llc | Communication between a document editor in-space user interface and a document editor out-space user interface |
US20100185974A1 (en) * | 2007-07-02 | 2010-07-22 | Koninklijke Philips Electronics N.V. | Method of presenting a schedule of events |
US20090083614A1 (en) * | 2007-09-26 | 2009-03-26 | Xerox Corporation | System and method for optimizing information display in spreadsheets and tables |
US20090085921A1 (en) * | 2007-10-01 | 2009-04-02 | Lydia Mai Do | Populate Web-Based Content Based on Space Availability |
US9588781B2 (en) | 2008-03-31 | 2017-03-07 | Microsoft Technology Licensing, Llc | Associating command surfaces with multiple active components |
US7549116B1 (en) | 2008-03-31 | 2009-06-16 | International Business Machines Corporation | Computer program product for displaying multiple row layouts in a table |
US9665850B2 (en) | 2008-06-20 | 2017-05-30 | Microsoft Technology Licensing, Llc | Synchronized conversation-centric message list and message reading pane |
US10997562B2 (en) | 2008-06-20 | 2021-05-04 | Microsoft Technology Licensing, Llc | Synchronized conversation-centric message list and message reading pane |
US20100083092A1 (en) * | 2008-09-30 | 2010-04-01 | Apple Inc. | Dynamic Schema Creation |
US8103951B2 (en) * | 2008-09-30 | 2012-01-24 | Apple Inc. | Dynamic schema creation |
US9875009B2 (en) | 2009-05-12 | 2018-01-23 | Microsoft Technology Licensing, Llc | Hierarchically-organized control galleries |
US8429566B2 (en) | 2010-11-09 | 2013-04-23 | Honeywell International Inc. | Programmable HVAC controller with cross column selection on a touch screen interface |
US20120259714A1 (en) * | 2011-04-11 | 2012-10-11 | Toshiba Tec Kabushiki Kaisha | Allocation apparatus and allocation method |
US20130275864A1 (en) * | 2012-04-13 | 2013-10-17 | John Alex William | Rendering digital report elements using a layout optimization tool |
US8972853B2 (en) * | 2012-04-13 | 2015-03-03 | Business Objects Software Limited | Rendering digital report elements using a layout optimization tool |
CN102693217A (en) * | 2012-05-15 | 2012-09-26 | 中国人民解放军91550部队 | Automatic layout method by table font and paper size analysis |
CN102693217B (en) * | 2012-05-15 | 2014-11-26 | 中国人民解放军91550部队 | Automatic layout method by table font and paper size analysis |
US10445421B2 (en) | 2013-02-21 | 2019-10-15 | International Business Machines Corporation | Optimizing rendering of data tables |
US20150347370A1 (en) * | 2013-02-21 | 2015-12-03 | International Business Machines Corporation | Optimizing rendering of data tables |
US10157173B2 (en) * | 2013-02-21 | 2018-12-18 | International Business Machines Corporation | Optimizing rendering of data tables |
US20150006135A1 (en) * | 2013-06-28 | 2015-01-01 | Suparna Deb | Layout algorithm for entity relation model diagram |
US9665270B2 (en) * | 2013-06-28 | 2017-05-30 | Sap Se | Layout algorithm for entity relation model diagram |
US10672163B2 (en) | 2013-06-28 | 2020-06-02 | Sap Se | Layout algorithm for entity relation model diagram |
US20150142781A1 (en) * | 2013-11-21 | 2015-05-21 | Amit Nigam | Interacting with resources exchanged using open data protocol |
US9846730B2 (en) * | 2013-11-21 | 2017-12-19 | Sap Se | Interacting with resources exchanged using open data protocol |
US20160026616A1 (en) * | 2014-07-28 | 2016-01-28 | Microsoft Corporation | Presenting dataset of spreadsheet in form based view |
US10769826B2 (en) * | 2014-12-31 | 2020-09-08 | Servicenow, Inc. | Visual task board visualization |
US10558742B2 (en) | 2015-03-09 | 2020-02-11 | Vinyl Development LLC | Responsive user interface system |
US20160306778A1 (en) * | 2015-03-09 | 2016-10-20 | Vinyl Development LLC | Adaptive Column Selection |
US10152460B2 (en) * | 2015-03-09 | 2018-12-11 | Vinyl Development LLC | Adaptive column selection |
US11042690B2 (en) | 2015-03-09 | 2021-06-22 | Vinyl Development LLC | Adaptive column selection |
US11966689B2 (en) | 2015-03-09 | 2024-04-23 | Jitterbit, Inc. | Responsive user interface system |
US10628468B2 (en) | 2015-11-15 | 2020-04-21 | Microsoft Technology Licensing, Llc | Single or multi-choice data presentation through collaboration database service |
US10366114B2 (en) | 2015-11-15 | 2019-07-30 | Microsoft Technology Licensing, Llc | Providing data presentation functionality associated with collaboration database |
US10445350B2 (en) | 2015-11-15 | 2019-10-15 | Microsoft Technology Licensing, Llc | Optimizing content for consistent presentation through collaboration database service |
US20210110100A1 (en) * | 2016-06-10 | 2021-04-15 | ProntoForms Corporatioin | Flexible online form display |
US11928417B2 (en) * | 2016-06-10 | 2024-03-12 | Truecontext Inc. | Flexible online form display |
US11496435B2 (en) * | 2016-10-28 | 2022-11-08 | The Nielsen Company (Us), Llc | Systems, methods, and apparatus to facilitate mapping a device name to a hardware address |
US11003847B1 (en) * | 2019-11-05 | 2021-05-11 | Sap Se | Smart dynamic column sizing |
Also Published As
Publication number | Publication date |
---|---|
WO2001044983A1 (en) | 2001-06-21 |
AU2264701A (en) | 2001-06-25 |
EP1238346A1 (en) | 2002-09-11 |
JP2003517685A (en) | 2003-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6639611B1 (en) | System and method for efficient layout of a display table | |
US10008009B1 (en) | Method for generating dynamic vector graphics | |
US7284192B2 (en) | Architecture for ink annotations on web documents | |
US8640022B2 (en) | Integration of spreadsheet objects on web page | |
US6380947B1 (en) | Method and apparatus for displaying and tree scrolling a hierarchical data structure | |
US8176081B2 (en) | Forms integration of an external data model not implemented through a document object model (DOM) accessible application programming interface (API) | |
US9390077B2 (en) | Document division method and system | |
US9552212B2 (en) | Caching intermediate data for scroll view rendering | |
US10339209B2 (en) | Webpage display method and device | |
US8213719B2 (en) | Editing 2D structures using natural input | |
Wu et al. | Mobilevisfixer: Tailoring web visualizations for mobile phones leveraging an explainable reinforcement learning framework | |
RU2386171C2 (en) | Levelling in lists generated according to template | |
US9507480B1 (en) | Interface optimization application | |
US20060031755A1 (en) | Sharing inking during multi-modal communication | |
JP4248411B2 (en) | Method, system, computer program and storage device for displaying a document | |
US20110050702A1 (en) | Contribution based chart scaling | |
US20100125828A1 (en) | Data transformation based on a technical design document | |
US9098594B2 (en) | Metric portal | |
CN110110198B (en) | Webpage information extraction method and device | |
US20090254834A1 (en) | Standard Schema and User Interface for Website Maps | |
CN112800373B (en) | Webpage resource data generation method and device, computer equipment and storage medium | |
US20140033132A1 (en) | Guide line snapping | |
US7568153B2 (en) | Methods and computer systems for document authoring | |
US9648381B2 (en) | Method and system for managing display of web-based content on portable communication devices | |
US7478340B2 (en) | Systems and methods for managing preparation of graphical elements for presentation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
FPAY | Fee payment |
Year of fee payment: 4 |
|
FPAY | Fee payment |
Year of fee payment: 8 |
|
FPAY | Fee payment |
Year of fee payment: 12 |