nl_tokens: Processes an individual gloss element
pl_tokens: function processGloss ( gloss , callback ) { if ( ! ( gloss instanceof Element ) ) { var err = <mask> Error ( 'Invalid gloss element' ) ; if ( typeof callback === 'function' ) { callback ( err ) ; } else { throw err ; } } var lines = Array . prototype . slice . call ( gloss . children ) ; var linesToAlign = [ ] ; var firstRawLine = null ; var firstRawLineNum = 0 ; triggerEvent ( gloss , events . beforeGloss ) ; if ( firstLineOrig ) { var firstLine = lines [ 0 ] ; addClass ( firstLine , classes . original ) ; } if ( lastLineFree ) { var lastLine = lines [ lines . length - 1 ] ; addClass ( lastLine , classes . freeTranslation ) ; } // process each line in the gloss lines . forEach ( function ( line , lineNum ) { // don't align lines that are free translations or original, // unformatted lines var isOrig = hasClass ( line , classes . original ) ; var isFree = hasClass ( line , classes . freeTranslation ) ; var shouldSkip = hasClass ( line , classes . noAlign ) ; var shouldAlign = ! isOrig && ! isFree && ! shouldSkip ; if ( shouldAlign ) { triggerEvent ( line , events . beforeLex , { lineNum : lineNum } ) ; var tokens = _this2 . lex ( line . innerHTML ) ; triggerEvent ( line , events . afterLex , { tokens : tokens , lineNum : lineNum } ) ; linesToAlign . push ( tokens ) ; addClass ( line , classes . hidden ) ; // if this is the first aligned line, mark the location // so that the final aligned glosses can be inserted here if ( ! firstRawLine ) { firstRawLine = line ; firstRawLineNum = lineNum ; } } else { addClass ( line , classes . line ) ; addClass ( line , classes . lineNum + lineNum ) ; } } ) ; var lastRawLineNum = firstRawLineNum + ( linesToAlign . length - 1 ) ; triggerEvent ( gloss , events . beforeAlign , { lines : linesToAlign , firstLineNum : firstRawLineNum , lastLineNum : lastRawLineNum } ) ; var alignedLines = _this2 . align ( linesToAlign ) ; triggerEvent ( gloss , events . afterAlign , { lines : alignedLines , firstLineNum : firstRawLineNum , lastLineNum : lastRawLineNum } ) ; // determine which type of element the aligned glosses should be wrapped in var alignedWrapper = undefined ; if ( gloss . tagName === 'UL' || gloss . tagName === 'OL' ) { alignedWrapper = 'li' ; } else { alignedWrapper = 'div' ; } triggerEvent ( gloss , events . beforeFormat , { lines : alignedLines , firstLineNum : firstRawLineNum , lastLineNum : lastRawLineNum } ) ; var formattedLines = _this2 . format ( alignedLines , alignedWrapper , firstRawLineNum ) ; gloss . insertBefore ( formattedLines , firstRawLine ) ; triggerEvent ( formattedLines , events . afterFormat , { firstLineNum : firstRawLineNum , lastLineNum : lastRawLineNum } ) ; // finish up by adding relevant classes to the main container if ( ! spacing ) { addClass ( gloss , classes . noSpace ) ; } addClass ( gloss , classes . glossed ) ; triggerEvent ( gloss , events . afterGloss ) ; }