📄 metrics.java
字号:
*/ public String getTierLabelAt(int position) { String label = null; Annotation a = null; Enumeration en = verticalPositions.keys(); while (en.hasMoreElements()) { a = (Annotation) en.nextElement(); if (((Integer) verticalPositions.get(a)).intValue() == position) { label = a.getTier().getName(); break; } } return label; } /** * Returns vertical positions of every visible tier in the 'tier template': * all visible tier labels in the correct order, at the proper position. * This template can be repeated when blocks are wrapped. In that case * empty lines are also labeled. * * @return Array with vertical positions for every visible tier */ public int[] getVPositionsInTemplate() { int[] vPositions = new int[getInterlinearizer().getVisibleTiers().length]; int lineSpacing = getInterlinearizer().getLineSpacing(); int positionInTemplate = 0; String[] vTierNames = getInterlinearizer().getVisibleTiers(); for (int index = 0; index < vTierNames.length; index++) { int tierHeight = getTierHeight(vTierNames[index]); positionInTemplate += tierHeight; vPositions[index] = positionInTemplate; positionInTemplate += lineSpacing; } return vPositions; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public TimeCodedTranscription getTranscription() { return transcription; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public Interlinearizer getInterlinearizer() { return interlinearizer; } /** * DOCUMENT ME! * * @return */ public int getLeftMargin() { if (leftMarginOn) { return leftMargin; } else { return 0; } } /** * DOCUMENT ME! * * @param i */ public void setLeftMargin(int i) { if (leftMarginOn) { leftMargin = i; } } /** * DOCUMENT ME! * * @param show DOCUMENT ME! */ public void showLeftMargin(boolean show) { leftMarginOn = show; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public boolean leftMarginShown() { return leftMarginOn; } /** * Generates and returns a sorted Vector of visible annotations. Sorting is * done on basis of left to right occurance in interlinear blocks: * horizontal position and position in tier hierarchy are used. * * @return sorted Vector with annotations */ public Vector getBlockWiseOrdered() { if (blockWiseOrdered == null) { // calculate vector // assume that all annotations, visible and invisible, are sized blockWiseOrdered = new Vector(); Set allAnnots = sizeTable.keySet(); String[] visibleTiers = getInterlinearizer().getVisibleTiers(); List vTierList = Arrays.asList(visibleTiers); Iterator annIter = allAnnots.iterator(); while (annIter.hasNext()) { Annotation a = (Annotation) annIter.next(); if (vTierList.contains(a.getTier().getName())) { blockWiseOrdered.add(a); } } Collections.sort(blockWiseOrdered, new AnnotationComparator()); } return blockWiseOrdered; } /** * Generates and returns a sorted Vector of visible annotations. Sorting is * done on basis of vertical position. * * @return sorted Vector with annotations */ public Vector getVerticallyOrdered() { if (verticallyOrdered == null) { // calculate vector // assume that all annotations, visible and invisible, are sized verticallyOrdered = new Vector(); Set allAnnots = sizeTable.keySet(); String[] visibleTiers = getInterlinearizer().getVisibleTiers(); List vTierList = Arrays.asList(visibleTiers); Iterator annIter = allAnnots.iterator(); while (annIter.hasNext()) { Annotation a = (Annotation) annIter.next(); if (vTierList.contains(a.getTier().getName())) { verticallyOrdered.add(a); } } Collections.sort(verticallyOrdered, new AnnotComparatorOnVPos()); } return verticallyOrdered; } /** * DOCUMENT ME! * * @param pageHeight DOCUMENT ME! * * @return DOCUMENT ME! */ public int[] getPageBoundaries(int pageHeight) { int[] pageBoundaries = null; int pageCounter = 0; int lastPageBreak = 0; Vector boundaries = new Vector(); Vector vPosIntegers = null; int[] tierLblVPositions = null; // find sorted int[] of vPositions of tier labels vPosIntegers = getPositionsOfNonEmptyTiers(); Collections.sort(vPosIntegers); tierLblVPositions = new int[vPosIntegers.size()]; for (int i = 0; i < vPosIntegers.size(); i++) { tierLblVPositions[i] = ((Integer) vPosIntegers.elementAt(i)).intValue(); } // loop over tierLabel positions, find each next page break for (int k = 0; k < tierLblVPositions.length; k++) { if (tierLblVPositions[k] > (lastPageBreak + pageHeight)) { // next break passed if (k > 0) { lastPageBreak = tierLblVPositions[k - 1]; boundaries.add(new Integer(lastPageBreak)); } } } pageBoundaries = new int[boundaries.size()]; for (int m = 0; m < boundaries.size(); m++) { pageBoundaries[m] = ((Integer) boundaries.elementAt(m)).intValue(); } return pageBoundaries; } /** * DOCUMENT ME! * * @param pageIndex DOCUMENT ME! * @param pageHeight DOCUMENT ME! * * @return DOCUMENT ME! */ public int[] getPageBoundaries(int pageIndex, int pageHeight) { int pageCounter = 0; int lastPageBreak = 0; int[] boundaries = { 0, 0 }; Vector vPosIntegers = null; int[] tierLblVPositions = null; // find sorted int[] of vPositions of tier labels vPosIntegers = getPositionsOfNonEmptyTiers(); Collections.sort(vPosIntegers); tierLblVPositions = new int[vPosIntegers.size()]; for (int i = 0; i < vPosIntegers.size(); i++) { tierLblVPositions[i] = ((Integer) vPosIntegers.elementAt(i)).intValue(); } // loop over tierLabel positions, find each next page break, count pages for (int k = 0; k < tierLblVPositions.length; k++) { if (tierLblVPositions[k] > (lastPageBreak + pageHeight)) { // next break passed if (pageCounter == pageIndex) { // right page found break; } else { if (k > 0) { lastPageBreak = tierLblVPositions[k - 1]; } pageCounter++; } } boundaries[0] = lastPageBreak; boundaries[1] = tierLblVPositions[k]; } if (pageIndex > pageCounter) { // nothing on page pageIndex, terminate boundaries[0] = 0; boundaries[1] = 0; } return boundaries; } /** * DOCUMENT ME! * $Id: Metrics.java,v 1.2 2005/08/18 14:00:44 klasal Exp $ * @author $Author: klasal $ * @version $Revision: 1.2 $ */ class AnnotationComparator implements Comparator { /** * Compares Annotations, first on basis of their horizontal position as * stored in horizontalPositions, then on basis of their position in * the tier hierarchy. * * @see java.util.Comparator#compare(java.lang.Object, * java.lang.Object) */ public int compare(Object arg0, Object arg1) { Annotation a0 = (Annotation) arg0; Annotation a1 = (Annotation) arg1; int hpos0 = ((Integer) horizontalPositions.get(a0)).intValue(); int hpos1 = ((Integer) horizontalPositions.get(a1)).intValue(); if (hpos0 < hpos1) { return -1; } if (hpos0 > hpos1) { return 1; } if (hpos0 == hpos1) { if (transcription.isAncestorOf(a1.getTier(), a0.getTier())) { // if (((TierImpl)a0.getTier()).hasAncestor((TierImpl)a1.getTier())) { return 1; } else { return -1; } } return 0; } } /** * DOCUMENT ME! * $Id: Metrics.java,v 1.2 2005/08/18 14:00:44 klasal Exp $ * @author $Author: klasal $ * @version $Revision: 1.2 $ */ class AnnotComparatorOnVPos implements Comparator { /** * Compares Annotations, on basis of vertical position * * @see java.util.Comparator#compare(java.lang.Object, * java.lang.Object) */ public int compare(Object arg0, Object arg1) { Annotation a0 = (Annotation) arg0; Annotation a1 = (Annotation) arg1; int vpos0 = ((Integer) verticalPositions.get(a0)).intValue(); int vpos1 = ((Integer) verticalPositions.get(a1)).intValue(); if (vpos0 < vpos1) { return -1; } if (vpos0 >= vpos1) { return 1; } return 0; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -