1 返信 最新の回答 日時: Apr 1, 2005 10:34 AM ユーザー:(アドビフォーラム情報)

    【トピック紹介】InDesign CS の段落スタイル、インポートしたテキストに「次の段落スタイル」を適用

    Level 1
      【オリジナルトピック】
      http://www.adobeforums.com/cgi-bin/webx?14@@.3bb8fd98/11

      【質問】
      四つの段落スタイル「見出し」、「サブ見出し」、「本文」、「価格」があります。テキストをインポートし、「見出し」段落スタイルを適用し、続く段落に自動的に「次の段落スタイル」(この場合 は「サブ見出し」)を自動的する方法を教えてください。

      【回答】
      以下のスクリプトでうまくいくと思われますが、テストしていないため、良くない副作用がある可能性もあります。

      if ( app.documents.length < 1 )
      exit();

      if ( !(app.activeDocument.selection[0] instanceof Text) )
      {
      alert( "Select text to change." );
      exit();
      }

      var NFORMATS = 4; // Number of replacement formats, >= 1
      var d = app.dialogs.add( {name: "Sequential formatting"} );

      var searchstyleDD, pstyleDDs = [];
      var dontApplyEG, dontApplyCBs = [];
      with ( d.dialogColumns.add() )
      {
      with ( dialogRows.add() )
      {
      dialogColumns.add().staticTexts.add( {staticLabel: "Search paragraph style"} );
      searchstyleDD = dialogColumns.add().dropdowns.add( {stringList: [].concat( app.activeDocument.paragraphStyles.everyItem().name ), selectedIndex: 0 } );
      }

      for ( var i = 0; i < NFORMATS; i++ )
      {
      with ( dialogRows.add() )
      {
      dialogColumns.add().staticTexts.add( {staticLabel: "Paragraph " + (i + 1) } );
      pstyleDDs.push( dialogColumns.add().dropdowns.add( {stringList: ["[No change]"].concat( app.activeDocument.paragraphStyles.everyItem().name ), selectedIndex: 0 } ) );
      }
      }

      with ( dontApplyEG = dialogRows.add().enablingGroups.add( {staticLabel: "Ignore sets containing checked paragraph styles", checkedState: false} ) )
      {
      var cols = [dialogColumns.add(), dialogColumns.add()];
      for ( var i = 0; i < app.activeDocument.paragraphStyles.length; i++ )
      dontApplyCBs.push( cols[i % 2].dialogRows.add().checkboxControls.add( {checkedState: false, staticLabel: app.activeDocument.paragraphStyles.item(i).name} ) );
      }
      }

      if ( !d.show() )
      {
      d.destroy();
      exit();
      }

      var paragraphs = app.selection[0].paragraphs;
      var aps = paragraphs.everyItem().appliedParagraphStyle;

      var replacementParagraphs = 0;
      for ( var i = 0; i < pstyleDDs.length; i++ )
      if ( pstyleDDs[i].selectedIndex != 0 )
      replacementParagraphs = i + 1;

      var i;
      search: for ( i = 0; i < aps.length - replacementParagraphs; i++ )
      {
      if ( aps[i].index == searchstyleDD.selectedIndex )
      {
      // Honour "don't apply"-settings
      if ( dontApplyEG.checkedState )
      {
      for ( var j = 0; j < replacementParagraphs; j++ )
      {
      if ( dontApplyCBs[aps[i+j+1].index].checkedState )
      {
      // Increasing i here is not necessary, depends on wanted behaviour
      i += replacementParagraphs;
      continue search;
      }
      }
      }

      for ( var j = 0; j < replacementParagraphs; j++ )
      {
      // Check if it should be changed, don't re-apply.
      if ( pstyleDDs[j].selectedIndex != 0 && aps[i+j+1].index != pstyleDDs[j].selectedIndex - 1 )
      paragraphs.item(i+j+1).appliedParagraphStyle = app.activeDocument.paragraphStyles.item( pstyleDDs[j].selectedIndex - 1 );
      }
      i += replacementParagraphs;
      }
      }

      d.destroy();

      ●回答 2
      下記のリンク先のスクリプトは InDesign 2.0.2 用ですが、参考まで。
      http://adobescripts.pl/modules/news/article.php?storyid=16

      ●回答 3
      ネストしたスタイル、および段落ではなく改行を使用したスクリプト。
      以下のスクリプトはインポート後にテキストを選択して実行します。最低限のチェックとして、4 で割り切れない段落を選択した場合、残りの段落は影響されません。

      if(app.documents.length != 0) {
      if(app.selection.length > 0) {
      if(app.selection[0].constructor.name == "Text"){

      // Apply styles to selected text, every 4 paragraphs
      // Headline, Subheadline, Body Copy, and Price

      myParagraphs = app.selection[0].paragraphs;
      n = myParagraphs.length;
      for (var i = 0; i < n-3; i = i+4){

      myParagraphs.item(i).appliedParagraphStyle = "Headline";

      myParagraphs.item(i+1).appliedParagraphStyle = "Subheadline";

      myParagraphs.item(i+2).appliedParagraphStyle = "Body Copy";

      myParagraphs.item(i+3).appliedParagraphStyle = "Price";
      }
      }
      else{alert("Invalid selection. Please select some text and try again.");}
      }
      else{alert("Nothing is selected. Please select some text and try again.");}
      }
      else {alert("No documents are open. Please open a document and try again.");}

      ------------
      【アドビ米国ユーザフォーラム情報紹介について】
        • 1. Re: 【トピック紹介】InDesign CS の段落スタイル、インポートしたテキストに「次の段落スタイル」を適用
          Level 1
          ●回答 2
          下記のリンク先のスクリプトは InDesign 2.0.2 用ですが、参考まで。
          http://adobescripts.pl/modules/news/article.php?storyid=16

          ●回答 3
          ネストしたスタイル、および段落ではなく改行を使用したスクリプト。
          以下のスクリプトはインポート後にテキストを選択して実行します。最低限のチェックとして、4 で割り切れない段落を選択した場合、残りの段落は影響されません。

          if(app.documents.length != 0) {
          if(app.selection.length > 0) {
          if(app.selection[0].constructor.name == "Text"){

          // Apply styles to selected text, every 4 paragraphs
          // Headline, Subheadline, Body Copy, and Price

          myParagraphs = app.selection[0].paragraphs;
          n = myParagraphs.length;
          for (var i = 0; i < n-3; i = i+4){

          myParagraphs.item(i).appliedParagraphStyle = "Headline";

          myParagraphs.item(i+1).appliedParagraphStyle = "Subheadline";

          myParagraphs.item(i+2).appliedParagraphStyle = "Body Copy";

          myParagraphs.item(i+3).appliedParagraphStyle = "Price";
          }
          }
          else{alert("Invalid selection. Please select some text and try again.");}
          }
          else{alert("Nothing is selected. Please select some text and try again.");}
          }
          else {alert("No documents are open. Please open a document and try again.");}

          ------------
          【アドビ米国ユーザフォーラム情報紹介について】